diff options
350 files changed, 38055 insertions, 24110 deletions
diff --git a/COPYRIGHT.txt b/COPYRIGHT.txt index 59c4dc4020..61696b5e53 100644 --- a/COPYRIGHT.txt +++ b/COPYRIGHT.txt @@ -176,7 +176,7 @@ License: OFL-1.1 Files: ./thirdparty/freetype/ Comment: The FreeType Project -Copyright: 1996-2021, David Turner, Robert Wilhelm, and Werner Lemberg. +Copyright: 1996-2022, David Turner, Robert Wilhelm, and Werner Lemberg. License: FTL Files: ./thirdparty/glslang/ @@ -365,8 +365,8 @@ License: Apache-2.0 Files: ./thirdparty/pcre2/ Comment: PCRE2 -Copyright: 1997-2021, University of Cambridge - 2009-2021, Zoltan Herczeg +Copyright: 1997-2022, University of Cambridge + 2009-2022, Zoltan Herczeg License: BSD-3-clause Files: ./thirdparty/recastnavigation/ diff --git a/core/config/project_settings.cpp b/core/config/project_settings.cpp index 4638d70e59..ff5ff83bf8 100644 --- a/core/config/project_settings.cpp +++ b/core/config/project_settings.cpp @@ -360,8 +360,8 @@ void ProjectSettings::_get_property_list(List<PropertyInfo> *p_list) const { vclist.insert(vc); } - for (RBSet<_VCSort>::Element *E = vclist.front(); E; E = E->next()) { - String prop_info_name = E->get().name; + for (const _VCSort &E : vclist) { + String prop_info_name = E.name; int dot = prop_info_name.find("."); if (dot != -1 && !custom_prop_info.has(prop_info_name)) { prop_info_name = prop_info_name.substr(0, dot); @@ -369,11 +369,11 @@ void ProjectSettings::_get_property_list(List<PropertyInfo> *p_list) const { if (custom_prop_info.has(prop_info_name)) { PropertyInfo pi = custom_prop_info[prop_info_name]; - pi.name = E->get().name; - pi.usage = E->get().flags; + pi.name = E.name; + pi.usage = E.flags; p_list->push_back(pi); } else { - p_list->push_back(PropertyInfo(E->get().type, E->get().name, PROPERTY_HINT_NONE, "", E->get().flags)); + p_list->push_back(PropertyInfo(E.type, E.name, PROPERTY_HINT_NONE, "", E.flags)); } } } @@ -959,9 +959,9 @@ Error ProjectSettings::save_custom(const String &p_path, const CustomMap &p_cust RBMap<String, List<String>> props; - for (RBSet<_VCSort>::Element *E = vclist.front(); E; E = E->next()) { - String category = E->get().name; - String name = E->get().name; + for (const _VCSort &E : vclist) { + String category = E.name; + String name = E.name; int div = category.find("/"); diff --git a/core/io/file_access_pack.cpp b/core/io/file_access_pack.cpp index 89efdc4938..595a6e9873 100644 --- a/core/io/file_access_pack.cpp +++ b/core/io/file_access_pack.cpp @@ -406,8 +406,8 @@ Error DirAccessPack::list_dir_begin() { list_dirs.push_back(E.key); } - for (RBSet<String>::Element *E = current->files.front(); E; E = E->next()) { - list_files.push_back(E->get()); + for (const String &E : current->files) { + list_files.push_back(E); } return OK; diff --git a/core/io/resource.cpp b/core/io/resource.cpp index 4a94c17132..ad01eb1083 100644 --- a/core/io/resource.cpp +++ b/core/io/resource.cpp @@ -317,8 +317,8 @@ void Resource::unregister_owner(Object *p_owner) { } void Resource::notify_change_to_owners() { - for (RBSet<ObjectID>::Element *E = owners.front(); E; E = E->next()) { - Object *obj = ObjectDB::get_instance(E->get()); + for (const ObjectID &E : owners) { + Object *obj = ObjectDB::get_instance(E); ERR_CONTINUE_MSG(!obj, "Object was deleted, while still owning a resource."); //wtf //TODO store string obj->call("resource_changed", Ref<Resource>(this)); diff --git a/core/io/resource_loader.cpp b/core/io/resource_loader.cpp index 9e6330f34b..fb21db1a19 100644 --- a/core/io/resource_loader.cpp +++ b/core/io/resource_loader.cpp @@ -391,8 +391,8 @@ float ResourceLoader::_dependency_get_progress(const String &p_path) { int dep_count = load_task.sub_tasks.size(); if (dep_count > 0) { float dep_progress = 0; - for (RBSet<String>::Element *E = load_task.sub_tasks.front(); E; E = E->next()) { - dep_progress += _dependency_get_progress(E->get()); + for (const String &E : load_task.sub_tasks) { + dep_progress += _dependency_get_progress(E); } dep_progress /= float(dep_count); dep_progress *= 0.5; diff --git a/core/math/a_star.cpp b/core/math/a_star.cpp index a3ee259030..29aa959e54 100644 --- a/core/math/a_star.cpp +++ b/core/math/a_star.cpp @@ -293,10 +293,10 @@ Vector3 AStar3D::get_closest_position_in_segment(const Vector3 &p_point) const { real_t closest_dist = 1e20; Vector3 closest_point; - for (const RBSet<Segment>::Element *E = segments.front(); E; E = E->next()) { + for (const Segment &E : segments) { Point *from_point = nullptr, *to_point = nullptr; - points.lookup(E->get().u, from_point); - points.lookup(E->get().v, to_point); + points.lookup(E.u, from_point); + points.lookup(E.v, to_point); if (!(from_point->enabled && to_point->enabled)) { continue; diff --git a/core/multiplayer/multiplayer_api.cpp b/core/multiplayer/multiplayer_api.cpp index e18c3dd2e4..9605647b3f 100644 --- a/core/multiplayer/multiplayer_api.cpp +++ b/core/multiplayer/multiplayer_api.cpp @@ -494,8 +494,8 @@ Vector<int> MultiplayerAPI::get_peer_ids() const { ERR_FAIL_COND_V_MSG(!multiplayer_peer.is_valid(), Vector<int>(), "No multiplayer peer is assigned. Assume no peers are connected."); Vector<int> ret; - for (RBSet<int>::Element *E = connected_peers.front(); E; E = E->next()) { - ret.push_back(E->get()); + for (const int &E : connected_peers) { + ret.push_back(E); } return ret; diff --git a/core/string/translation.cpp b/core/string/translation.cpp index c64f815563..cba2f09022 100644 --- a/core/string/translation.cpp +++ b/core/string/translation.cpp @@ -507,8 +507,8 @@ String TranslationServer::get_locale() const { Array TranslationServer::get_loaded_locales() const { Array locales; - for (const RBSet<Ref<Translation>>::Element *E = translations.front(); E; E = E->next()) { - const Ref<Translation> &t = E->get(); + for (const Ref<Translation> &E : translations) { + const Ref<Translation> &t = E; ERR_FAIL_COND_V(t.is_null(), Array()); String l = t->get_locale(); @@ -530,8 +530,8 @@ Ref<Translation> TranslationServer::get_translation_object(const String &p_local Ref<Translation> res; int best_score = 0; - for (const RBSet<Ref<Translation>>::Element *E = translations.front(); E; E = E->next()) { - const Ref<Translation> &t = E->get(); + for (const Ref<Translation> &E : translations) { + const Ref<Translation> &t = E; ERR_FAIL_COND_V(t.is_null(), nullptr); String l = t->get_locale(); @@ -599,8 +599,8 @@ StringName TranslationServer::_get_message_from_translations(const StringName &p StringName res; int best_score = 0; - for (const RBSet<Ref<Translation>>::Element *E = translations.front(); E; E = E->next()) { - const Ref<Translation> &t = E->get(); + for (const Ref<Translation> &E : translations) { + const Ref<Translation> &t = E; ERR_FAIL_COND_V(t.is_null(), p_message); String l = t->get_locale(); diff --git a/core/string/ustring.h b/core/string/ustring.h index 0d10d4cf10..e4f6c3327a 100644 --- a/core/string/ustring.h +++ b/core/string/ustring.h @@ -528,6 +528,16 @@ String DTRN(const String &p_text, const String &p_text_plural, int p_n, const St #define TTRGET(m_value) (m_value) #endif +// Use this to mark property names for editor translation. +// Often for dynamic properties defined in _get_property_list(). +// Property names defined directly inside EDITOR_DEF, GLOBAL_DEF, and ADD_PROPERTY macros don't need this. +#define PNAME(m_value) (m_value) + +// Similar to PNAME, but to mark groups, i.e. properties with PROPERTY_USAGE_GROUP. +// Groups defined directly inside ADD_GROUP macros don't need this. +// The arguments are the same as ADD_GROUP. m_prefix is only used for extraction. +#define GNAME(m_value, m_prefix) (m_value) + // Runtime translate for the public node API. String RTR(const String &p_text, const String &p_context = ""); String RTRN(const String &p_text, const String &p_text_plural, int p_n, const String &p_context = ""); diff --git a/core/variant/array.cpp b/core/variant/array.cpp index afc4acadf9..7551350c95 100644 --- a/core/variant/array.cpp +++ b/core/variant/array.cpp @@ -43,7 +43,7 @@ class ArrayPrivate { public: SafeRefCount refcount; Vector<Variant> array; - + Variant *read_only = nullptr; // If enabled, a pointer is used to a temporary value that is used to return read-only values. ContainerTypeValidate typed; }; @@ -52,6 +52,16 @@ void Array::_ref(const Array &p_from) const { ERR_FAIL_COND(!_fp); // should NOT happen. + if (unlikely(_fp->read_only != nullptr)) { + // If p_from is a read-only array, just copy the contents to avoid further modification. + _unref(); + _p = memnew(ArrayPrivate); + _p->refcount.init(); + _p->array = _fp->array; + _p->typed = _fp->typed; + return; + } + if (_fp == _p) { return; // whatever it is, nothing to do here move along } @@ -71,16 +81,27 @@ void Array::_unref() const { } if (_p->refcount.unref()) { + if (_p->read_only) { + memdelete(_p->read_only); + } memdelete(_p); } _p = nullptr; } Variant &Array::operator[](int p_idx) { + if (unlikely(_p->read_only)) { + *_p->read_only = _p->array[p_idx]; + return *_p->read_only; + } return _p->array.write[p_idx]; } const Variant &Array::operator[](int p_idx) const { + if (unlikely(_p->read_only)) { + *_p->read_only = _p->array[p_idx]; + return *_p->read_only; + } return _p->array[p_idx]; } @@ -93,6 +114,7 @@ bool Array::is_empty() const { } void Array::clear() { + ERR_FAIL_COND_MSG(_p->read_only, "Array is in read-only state."); _p->array.clear(); } @@ -224,34 +246,43 @@ bool Array::_assign(const Array &p_array) { } void Array::operator=(const Array &p_array) { + if (this == &p_array) { + return; + } _ref(p_array); } void Array::push_back(const Variant &p_value) { + ERR_FAIL_COND_MSG(_p->read_only, "Array is in read-only state."); ERR_FAIL_COND(!_p->typed.validate(p_value, "push_back")); _p->array.push_back(p_value); } void Array::append_array(const Array &p_array) { + ERR_FAIL_COND_MSG(_p->read_only, "Array is in read-only state."); ERR_FAIL_COND(!_p->typed.validate(p_array, "append_array")); _p->array.append_array(p_array._p->array); } Error Array::resize(int p_new_size) { + ERR_FAIL_COND_V_MSG(_p->read_only, ERR_LOCKED, "Array is in read-only state."); return _p->array.resize(p_new_size); } Error Array::insert(int p_pos, const Variant &p_value) { + ERR_FAIL_COND_V_MSG(_p->read_only, ERR_LOCKED, "Array is in read-only state."); ERR_FAIL_COND_V(!_p->typed.validate(p_value, "insert"), ERR_INVALID_PARAMETER); return _p->array.insert(p_pos, p_value); } void Array::fill(const Variant &p_value) { + ERR_FAIL_COND_MSG(_p->read_only, "Array is in read-only state."); ERR_FAIL_COND(!_p->typed.validate(p_value, "fill")); _p->array.fill(p_value); } void Array::erase(const Variant &p_value) { + ERR_FAIL_COND_MSG(_p->read_only, "Array is in read-only state."); ERR_FAIL_COND(!_p->typed.validate(p_value, "erase")); _p->array.erase(p_value); } @@ -323,10 +354,12 @@ bool Array::has(const Variant &p_value) const { } void Array::remove_at(int p_pos) { + ERR_FAIL_COND_MSG(_p->read_only, "Array is in read-only state."); _p->array.remove_at(p_pos); } void Array::set(int p_idx, const Variant &p_value) { + ERR_FAIL_COND_MSG(_p->read_only, "Array is in read-only state."); ERR_FAIL_COND(!_p->typed.validate(p_value, "set")); operator[](p_idx) = p_value; @@ -481,14 +514,17 @@ struct _ArrayVariantSort { }; void Array::sort() { + ERR_FAIL_COND_MSG(_p->read_only, "Array is in read-only state."); _p->array.sort_custom<_ArrayVariantSort>(); } void Array::sort_custom(const Callable &p_callable) { + ERR_FAIL_COND_MSG(_p->read_only, "Array is in read-only state."); _p->array.sort_custom<CallableComparator, true>(p_callable); } void Array::shuffle() { + ERR_FAIL_COND_MSG(_p->read_only, "Array is in read-only state."); const int n = _p->array.size(); if (n < 2) { return; @@ -515,15 +551,18 @@ int Array::bsearch_custom(const Variant &p_value, const Callable &p_callable, bo } void Array::reverse() { + ERR_FAIL_COND_MSG(_p->read_only, "Array is in read-only state."); _p->array.reverse(); } void Array::push_front(const Variant &p_value) { + ERR_FAIL_COND_MSG(_p->read_only, "Array is in read-only state."); ERR_FAIL_COND(!_p->typed.validate(p_value, "push_front")); _p->array.insert(0, p_value); } Variant Array::pop_back() { + ERR_FAIL_COND_V_MSG(_p->read_only, Variant(), "Array is in read-only state."); if (!_p->array.is_empty()) { const int n = _p->array.size() - 1; const Variant ret = _p->array.get(n); @@ -534,6 +573,7 @@ Variant Array::pop_back() { } Variant Array::pop_front() { + ERR_FAIL_COND_V_MSG(_p->read_only, Variant(), "Array is in read-only state."); if (!_p->array.is_empty()) { const Variant ret = _p->array.get(0); _p->array.remove_at(0); @@ -543,6 +583,7 @@ Variant Array::pop_front() { } Variant Array::pop_at(int p_pos) { + ERR_FAIL_COND_V_MSG(_p->read_only, Variant(), "Array is in read-only state."); if (_p->array.is_empty()) { // Return `null` without printing an error to mimic `pop_back()` and `pop_front()` behavior. return Variant(); @@ -627,6 +668,7 @@ bool Array::typed_assign(const Array &p_other) { } void Array::set_typed(uint32_t p_type, const StringName &p_class_name, const Variant &p_script) { + ERR_FAIL_COND_MSG(_p->read_only, "Array is in read-only state."); ERR_FAIL_COND_MSG(_p->array.size() > 0, "Type can only be set when array is empty."); ERR_FAIL_COND_MSG(_p->refcount.get() > 1, "Type can only be set when array has no more than one user."); ERR_FAIL_COND_MSG(_p->typed.type != Variant::NIL, "Type can only be set once."); @@ -656,6 +698,22 @@ Variant Array::get_typed_script() const { return _p->typed.script; } +void Array::set_read_only(bool p_enable) { + if (p_enable == bool(_p->read_only != nullptr)) { + return; + } + if (p_enable) { + _p->read_only = memnew(Variant); + } else { + memdelete(_p->read_only); + _p->read_only = nullptr; + } +} + +bool Array::is_read_only() const { + return _p->read_only != nullptr; +} + Array::Array(const Array &p_from) { _p = nullptr; _ref(p_from); diff --git a/core/variant/array.h b/core/variant/array.h index ab5f7cd50f..f537700f99 100644 --- a/core/variant/array.h +++ b/core/variant/array.h @@ -125,6 +125,10 @@ public: uint32_t get_typed_builtin() const; StringName get_typed_class_name() const; Variant get_typed_script() const; + + void set_read_only(bool p_enable); + bool is_read_only() const; + Array(const Array &p_from); Array(); ~Array(); diff --git a/core/variant/variant_setget.cpp b/core/variant/variant_setget.cpp index 6514922d01..3839da495f 100644 --- a/core/variant/variant_setget.cpp +++ b/core/variant/variant_setget.cpp @@ -624,6 +624,11 @@ struct VariantIndexedSetGet_Array { PtrToArg<Variant>::encode(v[index], member); } static void set(Variant *base, int64_t index, const Variant *value, bool *valid, bool *oob) { + if (VariantGetInternalPtr<Array>::get_ptr(base)->is_read_only()) { + *valid = false; + *oob = true; + return; + } int64_t size = VariantGetInternalPtr<Array>::get_ptr(base)->size(); if (index < 0) { index += size; @@ -638,6 +643,10 @@ struct VariantIndexedSetGet_Array { *valid = true; } static void validated_set(Variant *base, int64_t index, const Variant *value, bool *oob) { + if (VariantGetInternalPtr<Array>::get_ptr(base)->is_read_only()) { + *oob = true; + return; + } int64_t size = VariantGetInternalPtr<Array>::get_ptr(base)->size(); if (index < 0) { index += size; diff --git a/doc/classes/AnimationNode.xml b/doc/classes/AnimationNode.xml index 99d21706ee..9026aa6a34 100644 --- a/doc/classes/AnimationNode.xml +++ b/doc/classes/AnimationNode.xml @@ -53,6 +53,7 @@ <return type="float" /> <argument index="0" name="time" type="float" /> <argument index="1" name="seek" type="bool" /> + <argument index="2" name="seek_root" type="bool" /> <description> User-defined callback called when a custom node is processed. The [code]time[/code] parameter is a relative delta, unless [code]seek[/code] is [code]true[/code], in which case it is absolute. Here, call the [method blend_input], [method blend_node] or [method blend_animation] functions. You can also use [method get_parameter] and [method set_parameter] to modify local memory. @@ -72,8 +73,9 @@ <argument index="1" name="time" type="float" /> <argument index="2" name="delta" type="float" /> <argument index="3" name="seeked" type="bool" /> - <argument index="4" name="blend" type="float" /> - <argument index="5" name="pingponged" type="int" default="0" /> + <argument index="4" name="seek_root" type="bool" /> + <argument index="5" name="blend" type="float" /> + <argument index="6" name="pingponged" type="int" default="0" /> <description> Blend an animation by [code]blend[/code] amount (name must be valid in the linked [AnimationPlayer]). A [code]time[/code] and [code]delta[/code] may be passed, as well as whether [code]seek[/code] happened. </description> @@ -83,9 +85,10 @@ <argument index="0" name="input_index" type="int" /> <argument index="1" name="time" type="float" /> <argument index="2" name="seek" type="bool" /> - <argument index="3" name="blend" type="float" /> - <argument index="4" name="filter" type="int" enum="AnimationNode.FilterAction" default="0" /> - <argument index="5" name="optimize" type="bool" default="true" /> + <argument index="3" name="seek_root" type="bool" /> + <argument index="4" name="blend" type="float" /> + <argument index="5" name="filter" type="int" enum="AnimationNode.FilterAction" default="0" /> + <argument index="6" name="optimize" type="bool" default="true" /> <description> Blend an input. This is only useful for nodes created for an [AnimationNodeBlendTree]. The [code]time[/code] parameter is a relative delta, unless [code]seek[/code] is [code]true[/code], in which case it is absolute. A filter mode may be optionally passed (see [enum FilterAction] for options). </description> @@ -96,9 +99,10 @@ <argument index="1" name="node" type="AnimationNode" /> <argument index="2" name="time" type="float" /> <argument index="3" name="seek" type="bool" /> - <argument index="4" name="blend" type="float" /> - <argument index="5" name="filter" type="int" enum="AnimationNode.FilterAction" default="0" /> - <argument index="6" name="optimize" type="bool" default="true" /> + <argument index="4" name="seek_root" type="bool" /> + <argument index="5" name="blend" type="float" /> + <argument index="6" name="filter" type="int" enum="AnimationNode.FilterAction" default="0" /> + <argument index="7" name="optimize" type="bool" default="true" /> <description> Blend another animation node (in case this node contains children animation nodes). This function is only useful if you inherit from [AnimationRootNode] instead, else editors will not display your node for addition. </description> diff --git a/doc/classes/AnimationNodeOneShot.xml b/doc/classes/AnimationNodeOneShot.xml index 727a09e110..de2414cd43 100644 --- a/doc/classes/AnimationNodeOneShot.xml +++ b/doc/classes/AnimationNodeOneShot.xml @@ -20,9 +20,9 @@ <member name="autorestart_random_delay" type="float" setter="set_autorestart_random_delay" getter="get_autorestart_random_delay" default="0.0"> If [member autorestart] is [code]true[/code], a random additional delay (in seconds) between 0 and this value will be added to [member autorestart_delay]. </member> - <member name="fadein_time" type="float" setter="set_fadein_time" getter="get_fadein_time" default="0.1"> + <member name="fadein_time" type="float" setter="set_fadein_time" getter="get_fadein_time" default="0.0"> </member> - <member name="fadeout_time" type="float" setter="set_fadeout_time" getter="get_fadeout_time" default="0.1"> + <member name="fadeout_time" type="float" setter="set_fadeout_time" getter="get_fadeout_time" default="0.0"> </member> <member name="mix_mode" type="int" setter="set_mix_mode" getter="get_mix_mode" enum="AnimationNodeOneShot.MixMode" default="0"> </member> diff --git a/doc/classes/Control.xml b/doc/classes/Control.xml index d084bd4db9..911b556f11 100644 --- a/doc/classes/Control.xml +++ b/doc/classes/Control.xml @@ -1037,6 +1037,10 @@ <member name="mouse_filter" type="int" setter="set_mouse_filter" getter="get_mouse_filter" enum="Control.MouseFilter" default="0"> Controls whether the control will be able to receive mouse button input events through [method _gui_input] and how these events should be handled. Also controls whether the control can receive the [signal mouse_entered], and [signal mouse_exited] signals. See the constants to learn what each does. </member> + <member name="mouse_force_pass_scroll_events" type="bool" setter="set_force_pass_scroll_events" getter="is_force_pass_scroll_events" default="true"> + When enabled, scroll wheel events processed by [method _gui_input] will be passed to the parent control even if [member mouse_filter] is set to [constant MOUSE_FILTER_STOP]. As it defaults to true, this allows nested scrollable containers to work out of the box. + You should disable it on the root of your UI if you do not want scroll events to go to the [code]_unhandled_input[/code] processing. + </member> <member name="offset_bottom" type="float" setter="set_offset" getter="get_offset" default="0.0"> Distance between the node's bottom edge and its parent control, based on [member anchor_bottom]. Offsets are often controlled by one or multiple parent [Container] nodes, so you should not modify them manually if your node is a direct child of a [Container]. Offsets update automatically when you move or resize the node. @@ -1315,7 +1319,7 @@ The control will receive mouse button input events through [method _gui_input] if clicked on. And the control will receive the [signal mouse_entered] and [signal mouse_exited] signals. These events are automatically marked as handled, and they will not propagate further to other controls. This also results in blocking signals in other controls. </constant> <constant name="MOUSE_FILTER_PASS" value="1" enum="MouseFilter"> - The control will receive mouse button input events through [method _gui_input] if clicked on. And the control will receive the [signal mouse_entered] and [signal mouse_exited] signals. If this control does not handle the event, the parent control (if any) will be considered, and so on until there is no more parent control to potentially handle it. This also allows signals to fire in other controls. Even if no control handled it at all, the event will still be handled automatically, so unhandled input will not be fired. + The control will receive mouse button input events through [method _gui_input] if clicked on. And the control will receive the [signal mouse_entered] and [signal mouse_exited] signals. If this control does not handle the event, the parent control (if any) will be considered, and so on until there is no more parent control to potentially handle it. This also allows signals to fire in other controls. If no control handled it, the event will be passed to `_unhandled_input` for further processing. </constant> <constant name="MOUSE_FILTER_IGNORE" value="2" enum="MouseFilter"> The control will not receive mouse button input events through [method _gui_input]. The control will also not receive the [signal mouse_entered] nor [signal mouse_exited] signals. This will not block other controls from receiving these events or firing the signals. Ignored events will not be handled automatically. diff --git a/doc/classes/Curve.xml b/doc/classes/Curve.xml index 16d0e82a1f..383d33532b 100644 --- a/doc/classes/Curve.xml +++ b/doc/classes/Curve.xml @@ -38,12 +38,6 @@ Removes all points from the curve. </description> </method> - <method name="get_point_count" qualifiers="const"> - <return type="int" /> - <description> - Returns the number of points describing the curve. - </description> - </method> <method name="get_point_left_mode" qualifiers="const"> <return type="int" enum="Curve.TangentMode" /> <argument index="0" name="index" type="int" /> @@ -159,6 +153,9 @@ <member name="min_value" type="float" setter="set_min_value" getter="get_min_value" default="0.0"> The minimum value the curve can reach. </member> + <member name="point_count" type="int" setter="set_point_count" getter="get_point_count" default="0"> + The number of points describing the curve. + </member> </members> <signals> <signal name="range_changed"> diff --git a/doc/classes/Curve2D.xml b/doc/classes/Curve2D.xml index 94e52912a1..3bba825aaa 100644 --- a/doc/classes/Curve2D.xml +++ b/doc/classes/Curve2D.xml @@ -55,12 +55,6 @@ [code]to_point[/code] must be in this curve's local space. </description> </method> - <method name="get_point_count" qualifiers="const"> - <return type="int" /> - <description> - Returns the number of points describing the curve. - </description> - </method> <method name="get_point_in" qualifiers="const"> <return type="Vector2" /> <argument index="0" name="idx" type="int" /> @@ -155,5 +149,8 @@ <member name="bake_interval" type="float" setter="set_bake_interval" getter="get_bake_interval" default="5.0"> 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> + <member name="point_count" type="int" setter="set_point_count" getter="get_point_count" default="0"> + The number of points describing the curve. + </member> </members> </class> diff --git a/doc/classes/Curve3D.xml b/doc/classes/Curve3D.xml index ed642e0ddc..6457d9681e 100644 --- a/doc/classes/Curve3D.xml +++ b/doc/classes/Curve3D.xml @@ -68,12 +68,6 @@ [code]to_point[/code] must be in this curve's local space. </description> </method> - <method name="get_point_count" qualifiers="const"> - <return type="int" /> - <description> - Returns the number of points describing the curve. - </description> - </method> <method name="get_point_in" qualifiers="const"> <return type="Vector3" /> <argument index="0" name="idx" type="int" /> @@ -194,6 +188,9 @@ <member name="bake_interval" type="float" setter="set_bake_interval" getter="get_bake_interval" default="0.2"> The distance in meters 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> + <member name="point_count" type="int" setter="set_point_count" getter="get_point_count" default="0"> + The number of points describing the curve. + </member> <member name="up_vector_enabled" type="bool" setter="set_up_vector_enabled" getter="is_up_vector_enabled" default="true"> 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> diff --git a/doc/classes/EditorFileSystem.xml b/doc/classes/EditorFileSystem.xml index 60ac499d25..402efba34a 100644 --- a/doc/classes/EditorFileSystem.xml +++ b/doc/classes/EditorFileSystem.xml @@ -39,7 +39,7 @@ <method name="is_scanning" qualifiers="const"> <return type="bool" /> <description> - Returns [code]true[/code] of the filesystem is being scanned. + Returns [code]true[/code] if the filesystem is being scanned. </description> </method> <method name="reimport_files"> diff --git a/doc/classes/PhysicsTestMotionParameters2D.xml b/doc/classes/PhysicsTestMotionParameters2D.xml index c22a49edf7..00f21a2058 100644 --- a/doc/classes/PhysicsTestMotionParameters2D.xml +++ b/doc/classes/PhysicsTestMotionParameters2D.xml @@ -28,5 +28,9 @@ <member name="motion" type="Vector2" setter="set_motion" getter="get_motion" default="Vector2(0, 0)"> Motion vector to define the length and direction of the motion to test. </member> + <member name="recovery_as_collision" type="bool" setter="set_recovery_as_collision_enabled" getter="is_recovery_as_collision_enabled" default="false"> + If set to [code]true[/code], any depenetration from the recovery phase is reported as a collision; this is used e.g. by [method CharacterBody2D.move_and_slide] for improving floor detection when floor snapping is disabled. + If set to [code]false[/code], only collisions resulting from the motion are reported; this is used e.g. by [method PhysicsBody2D.move_and_collide]. + </member> </members> </class> diff --git a/doc/classes/PhysicsTestMotionParameters3D.xml b/doc/classes/PhysicsTestMotionParameters3D.xml index 4ff07de7aa..5b07796a10 100644 --- a/doc/classes/PhysicsTestMotionParameters3D.xml +++ b/doc/classes/PhysicsTestMotionParameters3D.xml @@ -31,5 +31,9 @@ <member name="motion" type="Vector3" setter="set_motion" getter="get_motion" default="Vector3(0, 0, 0)"> Motion vector to define the length and direction of the motion to test. </member> + <member name="recovery_as_collision" type="bool" setter="set_recovery_as_collision_enabled" getter="is_recovery_as_collision_enabled" default="false"> + If set to [code]true[/code], any depenetration from the recovery phase is reported as a collision; this is used e.g. by [method CharacterBody3D.move_and_slide] for improving floor detection when floor snapping is disabled. + If set to [code]false[/code], only collisions resulting from the motion are detected; this is used e.g. by [method PhysicsBody3D.move_and_collide]. + </member> </members> </class> diff --git a/doc/classes/RichTextLabel.xml b/doc/classes/RichTextLabel.xml index 62a692d4a7..c481fa30c2 100644 --- a/doc/classes/RichTextLabel.xml +++ b/doc/classes/RichTextLabel.xml @@ -60,6 +60,7 @@ <argument index="0" name="character" type="int" /> <description> Returns the line number of the character position provided. + [b]Note:[/b] If [member threaded] is enabled, this method returns a value for the loaded part of the document. Use [method is_ready] or [signal finished] to determine whether document is fully loaded. </description> </method> <method name="get_character_paragraph"> @@ -67,24 +68,28 @@ <argument index="0" name="character" type="int" /> <description> Returns the paragraph number of the character position provided. + [b]Note:[/b] If [member threaded] is enabled, this method returns a value for the loaded part of the document. Use [method is_ready] or [signal finished] to determine whether document is fully loaded. </description> </method> <method name="get_content_height" qualifiers="const"> <return type="int" /> <description> Returns the height of the content. + [b]Note:[/b] If [member threaded] is enabled, this method returns a value for the loaded part of the document. Use [method is_ready] or [signal finished] to determine whether document is fully loaded. </description> </method> <method name="get_content_width" qualifiers="const"> <return type="int" /> <description> Returns the width of the content. + [b]Note:[/b] If [member threaded] is enabled, this method returns a value for the loaded part of the document. Use [method is_ready] or [signal finished] to determine whether document is fully loaded. </description> </method> <method name="get_line_count" qualifiers="const"> <return type="int" /> <description> Returns the total number of lines in the text. Wrapped text is counted as multiple lines. + [b]Note:[/b] If [member threaded] is enabled, this method returns a value for the loaded part of the document. Use [method is_ready] or [signal finished] to determine whether document is fully loaded. </description> </method> <method name="get_line_offset"> @@ -92,6 +97,7 @@ <argument index="0" name="line" type="int" /> <description> Returns the vertical offset of the line found at the provided index. + [b]Note:[/b] If [member threaded] is enabled, this method returns a value for the loaded part of the document. Use [method is_ready] or [signal finished] to determine whether document is fully loaded. </description> </method> <method name="get_menu" qualifiers="const"> @@ -112,6 +118,7 @@ <argument index="0" name="paragraph" type="int" /> <description> Returns the vertical offset of the paragraph found at the provided index. + [b]Note:[/b] If [member threaded] is enabled, this method returns a value for the loaded part of the document. Use [method is_ready] or [signal finished] to determine whether document is fully loaded. </description> </method> <method name="get_parsed_text" qualifiers="const"> @@ -155,12 +162,14 @@ <return type="int" /> <description> Returns the number of visible lines. + [b]Note:[/b] If [member threaded] is enabled, this method returns a value for the loaded part of the document. Use [method is_ready] or [signal finished] to determine whether document is fully loaded. </description> </method> <method name="get_visible_paragraph_count" qualifiers="const"> <return type="int" /> <description> Returns the number of visible paragraphs. A paragraph is considered visible if at least one of its lines is visible. + [b]Note:[/b] If [member threaded] is enabled, this method returns a value for the loaded part of the document. Use [method is_ready] or [signal finished] to determine whether document is fully loaded. </description> </method> <method name="install_effect"> @@ -176,6 +185,12 @@ Returns whether the menu is visible. Use this instead of [code]get_menu().visible[/code] to improve performance (so the creation of the menu is avoided). </description> </method> + <method name="is_ready" qualifiers="const"> + <return type="bool" /> + <description> + If [member threaded] is enabled, returns [code]true[/code] if the background thread has finished text processing, otherwise always return [code]true[/code]. + </description> + </method> <method name="newline"> <return type="void" /> <description> @@ -476,6 +491,10 @@ The range of characters to display, as a [float] between 0.0 and 1.0. When assigned an out of range value, it's the same as assigning 1.0. [b]Note:[/b] Setting this property updates [member visible_characters] based on current [method get_total_character_count]. </member> + <member name="progress_bar_delay" type="int" setter="set_progress_bar_delay" getter="get_progress_bar_delay" default="1000"> + The delay after which the loading progress bar is displayed, in milliseconds. Set to [code]-1[/code] to disable progress bar entirely. + [b]Note:[/b] Progress bar is dislayed only if [member threaded] is enabled. + </member> <member name="scroll_active" type="bool" setter="set_scroll_active" getter="is_scroll_active" default="true"> If [code]true[/code], the scrollbar is visible. Setting this to [code]false[/code] does not block scrolling completely. See [method scroll_to_line]. </member> @@ -504,6 +523,9 @@ <member name="text_direction" type="int" setter="set_text_direction" getter="get_text_direction" enum="Control.TextDirection" default="0"> Base text writing direction. </member> + <member name="threaded" type="bool" setter="set_threaded" getter="is_threaded" default="false"> + If [code]true[/code], text processing is done in a background thread. + </member> <member name="visible_characters" type="int" setter="set_visible_characters" getter="get_visible_characters" default="-1"> The restricted number of characters to display in the label. If [code]-1[/code], all characters will be displayed. [b]Note:[/b] Setting this property updates [member percent_visible] based on current [method get_total_character_count]. @@ -513,6 +535,11 @@ </member> </members> <signals> + <signal name="finished"> + <description> + Triggered when the document is fully loaded. + </description> + </signal> <signal name="meta_clicked"> <argument index="0" name="meta" type="Variant" /> <description> diff --git a/doc/translations/ar.po b/doc/translations/ar.po index 41f1f50d6b..9c160cb499 100644 --- a/doc/translations/ar.po +++ b/doc/translations/ar.po @@ -1017,11 +1017,12 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Random range, any floating point value between [code]from[/code] and " -"[code]to[/code].\n" +"Returns a random floating point value between [code]from[/code] and " +"[code]to[/code] (both endpoints inclusive).\n" "[codeblock]\n" "prints(rand_range(0, 1), rand_range(0, 1)) # Prints e.g. 0.135591 0.405263\n" -"[/codeblock]" +"[/codeblock]\n" +"[b]Note:[/b] This is equivalent to [code]randf() * (to - from) + from[/code]." msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml @@ -1065,37 +1066,36 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Returns an array with the given range. Range can be 1 argument [code]N[/" -"code] (0 to [code]N[/code] - 1), two arguments ([code]initial[/code], " -"[code]final - 1[/code]) or three arguments ([code]initial[/code], " -"[code]final - 1[/code], [code]increment[/code]). Returns an empty array if " -"the range isn't valid (e.g. [code]range(2, 5, -1)[/code] or [code]range(5, " -"5, 1)[/code]).\n" -"Returns an array with the given range. [code]range()[/code] can have 1 " -"argument N ([code]0[/code] to [code]N - 1[/code]), two arguments " -"([code]initial[/code], [code]final - 1[/code]) or three arguments " -"([code]initial[/code], [code]final - 1[/code], [code]increment[/code]). " -"[code]increment[/code] can be negative. If [code]increment[/code] is " -"negative, [code]final - 1[/code] will become [code]final + 1[/code]. Also, " -"the initial value must be greater than the final value for the loop to run.\n" -"[codeblock]\n" -"print(range(4))\n" -"print(range(2, 5))\n" -"print(range(0, 6, 2))\n" -"[/codeblock]\n" -"Output:\n" +"Returns an array with the given range. [method range] can be called in three " +"ways:\n" +"[code]range(n: int)[/code]: Starts from 0, increases by steps of 1, and " +"stops [i]before[/i] [code]n[/code]. The argument [code]n[/code] is " +"[b]exclusive[/b].\n" +"[code]range(b: int, n: int)[/code]: Starts from [code]b[/code], increases by " +"steps of 1, and stops [i]before[/i] [code]n[/code]. The arguments [code]b[/" +"code] and [code]n[/code] are [b]inclusive[/b] and [b]exclusive[/b], " +"respectively.\n" +"[code]range(b: int, n: int, s: int)[/code]: Starts from [code]b[/code], " +"increases/decreases by steps of [code]s[/code], and stops [i]before[/i] " +"[code]n[/code]. The arguments [code]b[/code] and [code]n[/code] are " +"[b]inclusive[/b] and [b]exclusive[/b], respectively. The argument [code]s[/" +"code] [b]can[/b] be negative, but not [code]0[/code]. If [code]s[/code] is " +"[code]0[/code], an error message is printed.\n" +"[method range] converts all arguments to [int] before processing.\n" +"[b]Note:[/b] Returns an empty array if no value meets the value constraint " +"(e.g. [code]range(2, 5, -1)[/code] or [code]range(5, 5, 1)[/code]).\n" +"Examples:\n" "[codeblock]\n" -"[0, 1, 2, 3]\n" -"[2, 3, 4]\n" -"[0, 2, 4]\n" +"print(range(4)) # Prints [0, 1, 2, 3]\n" +"print(range(2, 5)) # Prints [2, 3, 4]\n" +"print(range(0, 6, 2)) # Prints [0, 2, 4]\n" +"print(range(4, 1, -1)) # Prints [4, 3, 2]\n" "[/codeblock]\n" "To iterate over an [Array] backwards, use:\n" "[codeblock]\n" "var array = [3, 6, 9]\n" -"var i := array.size() - 1\n" -"while i >= 0:\n" -" print(array[i])\n" -" i -= 1\n" +"for i in range(array.size(), 0, -1):\n" +" print(array[i - 1])\n" "[/codeblock]\n" "Output:\n" "[codeblock]\n" @@ -4197,17 +4197,24 @@ msgid "Maximum value for the mode enum." msgstr "" #: doc/classes/AnimatedSprite.xml -msgid "Sprite node that can use multiple textures for animation." +msgid "" +"Sprite node that contains multiple textures as frames to play for animation." msgstr "" #: doc/classes/AnimatedSprite.xml msgid "" -"Animations are created using a [SpriteFrames] resource, which can be " -"configured in the editor via the SpriteFrames panel.\n" -"[b]Note:[/b] You can associate a set of normal maps by creating additional " -"[SpriteFrames] resources with a [code]_normal[/code] suffix. For example, " -"having 2 [SpriteFrames] resources [code]run[/code] and [code]run_normal[/" -"code] will make it so the [code]run[/code] animation uses the normal map." +"[AnimatedSprite] is similar to the [Sprite] node, except it carries multiple " +"textures as animation frames. Animations are created using a [SpriteFrames] " +"resource, which allows you to import image files (or a folder containing " +"said files) to provide the animation frames for the sprite. The " +"[SpriteFrames] resource can be configured in the editor via the SpriteFrames " +"bottom panel.\n" +"[b]Note:[/b] You can associate a set of normal or specular maps by creating " +"additional [SpriteFrames] resources with a [code]_normal[/code] or " +"[code]_specular[/code] suffix. For example, having 3 [SpriteFrames] " +"resources [code]run[/code], [code]run_normal[/code], and [code]run_specular[/" +"code] will make it so the [code]run[/code] animation uses normal and " +"specular maps." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml @@ -4235,9 +4242,9 @@ msgstr "" msgid "Stops the current animation (does not reset the frame counter)." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml +#: doc/classes/AnimatedSprite.xml msgid "" -"The current animation from the [code]frames[/code] resource. If this value " +"The current animation from the [member frames] resource. If this value " "changes, the [code]frame[/code] counter is reset." msgstr "" @@ -4261,8 +4268,11 @@ msgstr "" msgid "The displayed animation frame's index." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml -msgid "The [SpriteFrames] resource containing the animation(s)." +#: doc/classes/AnimatedSprite.xml +msgid "" +"The [SpriteFrames] resource containing the animation(s). Allows you the " +"option to load, edit, clear, make unique and save the states of the " +"[SpriteFrames] resource." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/Sprite.xml @@ -4314,6 +4324,16 @@ msgid "" "provided, the current animation is played." msgstr "" +#: doc/classes/AnimatedSprite3D.xml +msgid "" +"The current animation from the [code]frames[/code] resource. If this value " +"changes, the [code]frame[/code] counter is reset." +msgstr "" + +#: doc/classes/AnimatedSprite3D.xml +msgid "The [SpriteFrames] resource containing the animation(s)." +msgstr "" + #: doc/classes/AnimatedTexture.xml msgid "Proxy texture for simple frame-based animations." msgstr "" @@ -4830,11 +4850,11 @@ msgstr "" msgid "No interpolation (nearest value)." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Linear interpolation." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Cubic interpolation." msgstr "" @@ -5870,7 +5890,10 @@ msgid "" "Seeks the animation to the [code]seconds[/code] point in time (in seconds). " "If [code]update[/code] is [code]true[/code], the animation updates too, " "otherwise it updates at process time. Events between the current frame and " -"[code]seconds[/code] are skipped." +"[code]seconds[/code] are skipped.\n" +"[b]Note:[/b] Seeking to the end of the animation doesn't emit [signal " +"animation_finished]. If you want to skip animation and emit the signal, use " +"[method advance]." msgstr "" #: doc/classes/AnimationPlayer.xml @@ -7060,7 +7083,10 @@ msgid "" "[code]0[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "Returns the number of times an element is in the array." msgstr "" @@ -7105,10 +7131,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array for a value and returns its index or [code]-1[/code] if " -"not found. Optionally, the initial search index can be passed." +"not found. Optionally, the initial search index can be passed. Returns " +"[code]-1[/code] if [code]from[/code] is out of bounds." msgstr "" #: doc/classes/Array.xml @@ -7246,11 +7276,15 @@ msgid "" "[code]null[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array in reverse order. Optionally, a start search index can be " "passed. If negative, the start index is considered relative to the end of " -"the array." +"the array. If the adjusted start index is out of bounds, this method " +"searches from the end of the array." msgstr "" #: doc/classes/Array.xml @@ -8385,7 +8419,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -8607,7 +8641,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -11721,17 +11755,17 @@ msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a normal vector in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a 3D position in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml @@ -13983,7 +14017,9 @@ msgstr "" #: doc/classes/CollisionPolygon2D.xml msgid "" "If [code]true[/code], only edges that face up, relative to " -"[CollisionPolygon2D]'s rotation, will collide with other objects." +"[CollisionPolygon2D]'s rotation, will collide with other objects.\n" +"[b]Note:[/b] This property has no effect if this [CollisionPolygon2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionPolygon2D.xml @@ -14079,7 +14115,9 @@ msgstr "" #: doc/classes/CollisionShape2D.xml msgid "" "Sets whether this collision shape should only detect collision on one side " -"(top or bottom)." +"(top or bottom).\n" +"[b]Note:[/b] This property has no effect if this [CollisionShape2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionShape2D.xml @@ -22495,6 +22533,11 @@ msgid "" "same behavior." msgstr "" +#: doc/classes/EditorSpinSlider.xml +#, fuzzy +msgid "If [code]true[/code], the slider is hidden." +msgstr "ÙŠÙØ±Ø¬Ø¹ جيب التمام \"cosine \" لقيمة المَعلم." + #: doc/classes/EditorVCSInterface.xml msgid "" "Version Control System (VCS) interface, which reads and writes to the local " @@ -26082,9 +26125,22 @@ msgid "Gradient's colors returned as a [PoolColorArray]." msgstr "" #: doc/classes/Gradient.xml +msgid "" +"Defines how the colors between points of the gradient are interpolated. See " +"[enum InterpolationMode] for available modes." +msgstr "" + +#: doc/classes/Gradient.xml msgid "Gradient's offsets returned as a [PoolRealArray]." msgstr "" +#: doc/classes/Gradient.xml +msgid "" +"Constant interpolation, color changes abruptly at each point and stays " +"uniform between. This might cause visible aliasing when used for a gradient " +"texture in some cases." +msgstr "" + #: doc/classes/GradientTexture.xml msgid "Gradient-filled texture." msgstr "" @@ -34614,13 +34670,13 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used easing from [enum Tween.EaseType]. If not set, the " "default easing is used from the [SceneTreeTween] that contains this Tweener." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used transition from [enum Tween.TransitionType]. If not " "set, the default transition is used from the [SceneTreeTween] that contains " @@ -35332,6 +35388,12 @@ msgid "Creates the agent." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]agent[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" @@ -35401,6 +35463,12 @@ msgid "Create a new map." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation agents [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns the map cell size." msgstr "ÙŠÙØ±Ø¬Ø¹ قيمة الجيب العكسية للمَعلم." @@ -35428,6 +35496,12 @@ msgid "Returns the navigation path to reach the destination from the origin." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation regions [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns [code]true[/code] if the map is active." msgstr "ÙŠÙØ±Ø¬Ø¹ جيب التمام \"cosine \" لقيمة المَعلم." @@ -35451,6 +35525,12 @@ msgid "Creates a new region." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]region[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Sets the map for the region." msgstr "ÙŠÙØ±Ø¬Ø¹ جيب المَعلم." @@ -35929,19 +36009,60 @@ msgid "Represents the size of the [enum SourceGeometryMode] enum." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "This class is responsible for creating and clearing navigation meshes." +msgid "Helper class for creating and clearing navigation meshes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml msgid "" -"Bakes the navigation mesh. This will allow you to use pathfinding with the " -"navigation system." +"This class is responsible for creating and clearing 3D navigation meshes " +"used as [NavigationMesh] resources inside [NavigationMeshInstance]. The " +"[NavigationMeshGenerator] has very limited to no use for 2D as the " +"navigation mesh baking process expects 3D node types and 3D source geometry " +"to parse.\n" +"The entire navigation mesh baking is best done in a separate thread as the " +"voxelization, collision tests and mesh optimization steps involved are very " +"performance and time hungry operations.\n" +"Navigation mesh baking happens in multiple steps and the result depends on " +"3D source geometry and properties of the [NavigationMesh] resource. In the " +"first step, starting from a root node and depending on [NavigationMesh] " +"properties all valid 3D source geometry nodes are collected from the " +"[SceneTree]. Second, all collected nodes are parsed for their relevant 3D " +"geometry data and a combined 3D mesh is build. Due to the many different " +"types of parsable objects, from normal [MeshInstance]s to [CSGShape]s or " +"various [CollisionObject]s, some operations to collect geometry data can " +"trigger [VisualServer] and [PhysicsServer] synchronizations. Server " +"synchronization can have a negative effect on baking time or framerate as it " +"often involves [Mutex] locking for thread security. Many parsable objects " +"and the continuous synchronization with other threaded Servers can increase " +"the baking time significantly. On the other hand only a few but very large " +"and complex objects will take some time to prepare for the Servers which can " +"noticeably stall the next frame render. As a general rule the total amount " +"of parsable objects and their individual size and complexity should be " +"balanced to avoid framerate issues or very long baking times. The combined " +"mesh is then passed to the Recast Navigation Object to test the source " +"geometry for walkable terrain suitable to [NavigationMesh] agent properties " +"by creating a voxel world around the meshes bounding area.\n" +"The finalized navigation mesh is then returned and stored inside the " +"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "Clears the navigation mesh." +msgid "" +"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " +"nodes under the provided [code]root_node[/code] or a specific group of nodes " +"for potential source geometry. The parse behavior can be controlled with the " +"[member NavigationMesh.geometry/parsed_geometry_type] and [member " +"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[NavigationMesh] resource." msgstr "" +#: doc/classes/NavigationMeshGenerator.xml +#, fuzzy +msgid "" +"Removes all polygons and vertices from the provided [code]nav_mesh[/code] " +"resource." +msgstr "ÙŠÙØ±Ø¬Ø¹ جيب المَعلم." + #: doc/classes/NavigationMeshInstance.xml msgid "An instance of a [NavigationMesh]." msgstr "" @@ -35960,7 +36081,10 @@ msgid "" "thread is useful because navigation baking is not a cheap operation. When it " "is completed, it automatically sets the new [NavigationMesh]. Please note " "that baking on separate thread may be very slow if geometry is parsed from " -"meshes as async access to each mesh involves heavy synchronization." +"meshes as async access to each mesh involves heavy synchronization. Also, " +"please note that baking on a separate thread is automatically disabled on " +"operating systems that cannot use threads (such as HTML5 with threads " +"disabled)." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -36006,6 +36130,11 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle.xml +#, fuzzy +msgid "Returns the [RID] of this obstacle on the [NavigationServer]." +msgstr "ÙŠÙØ±Ø¬Ø¹ جيب المَعلم." + +#: doc/classes/NavigationObstacle.xml msgid "" "Sets the [Navigation] node used by the obstacle. Useful when you don't want " "to make the obstacle a child of a [Navigation] node." @@ -36042,6 +36171,11 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle2D.xml +#, fuzzy +msgid "Returns the [RID] of this obstacle on the [Navigation2DServer]." +msgstr "ÙŠÙØ±Ø¬Ø¹ جيب المَعلم." + +#: doc/classes/NavigationObstacle2D.xml msgid "" "Sets the [Navigation2D] node used by the obstacle. Useful when you don't " "want to make the obstacle a child of a [Navigation2D] node." @@ -37230,7 +37364,7 @@ msgstr "" #: doc/classes/Node.xml msgid "" "Returns [code]true[/code] if the physics interpolated flag is set for this " -"Node (see [method set_physics_interpolated]).\n" +"Node (see [member physics_interpolation_mode]).\n" "[b]Note:[/b] Interpolation will only be active is both the flag is set " "[b]and[/b] physics interpolation is enabled within the [SceneTree]. This can " "be tested using [method is_physics_interpolated_and_enabled]." @@ -37238,8 +37372,8 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Returns [code]true[/code] if physics interpolation is enabled (see [method " -"set_physics_interpolated]) [b]and[/b] enabled in the [SceneTree].\n" +"Returns [code]true[/code] if physics interpolation is enabled (see [member " +"physics_interpolation_mode]) [b]and[/b] enabled in the [SceneTree].\n" "This is a convenience version of [method is_physics_interpolated] that also " "checks whether physics interpolation is enabled globally.\n" "See [member SceneTree.physics_interpolation] and [member ProjectSettings." @@ -37533,14 +37667,6 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Enables or disables physics interpolation per node, offering a finer grain " -"of control than turning physics interpolation on and off globally.\n" -"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " -"interpolation can sometimes give superior results." -msgstr "" - -#: doc/classes/Node.xml -msgid "" "Enables or disables physics (i.e. fixed framerate) processing. When a node " "is being processed, it will receive a [constant " "NOTIFICATION_PHYSICS_PROCESS] at a fixed (usually 60 FPS, see [member Engine." @@ -37673,6 +37799,15 @@ msgstr "" #: doc/classes/Node.xml msgid "" +"Allows enabling or disabling physics interpolation per node, offering a " +"finer grain of control than turning physics interpolation on and off " +"globally.\n" +"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " +"interpolation can sometimes give superior results." +msgstr "" + +#: doc/classes/Node.xml +msgid "" "The node's priority in the execution order of the enabled processing " "callbacks (i.e. [constant NOTIFICATION_PROCESS], [constant " "NOTIFICATION_PHYSICS_PROCESS] and their internal counterparts). Nodes whose " @@ -37834,6 +37969,24 @@ msgid "Continue to process regardless of the [SceneTree] pause state." msgstr "" #: doc/classes/Node.xml +msgid "" +"Inherits physics interpolation mode from the node's parent. For the root " +"node, it is equivalent to [constant PHYSICS_INTERPOLATION_MODE_ON]. Default." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn off physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn on physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml msgid "Duplicate the node's signals." msgstr "" @@ -39075,7 +39228,7 @@ msgstr "ÙŠÙØ±Ø¬Ø¹ جيب المَعلم." #: doc/classes/OptionButton.xml msgid "" -"Returns the ID of the selected item, or [code]0[/code] if no item is " +"Returns the ID of the selected item, or [code]-1[/code] if no item is " "selected." msgstr "" @@ -39097,7 +39250,8 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" "Selects an item by index and makes it the current item. This will work even " -"if the item is disabled." +"if the item is disabled.\n" +"Passing [code]-1[/code] as the index deselects any currently selected item." msgstr "" #: doc/classes/OptionButton.xml @@ -44450,6 +44604,15 @@ msgid "" "should always be preferred." msgstr "" +#: doc/classes/PoolByteArray.xml doc/classes/PoolColorArray.xml +#: doc/classes/PoolIntArray.xml doc/classes/PoolRealArray.xml +#: doc/classes/PoolStringArray.xml doc/classes/PoolVector2Array.xml +#: doc/classes/PoolVector3Array.xml +msgid "" +"Returns [code]true[/code] if the array contains the given value.\n" +"[b]Note:[/b] This is equivalent to using the [code]in[/code] operator." +msgstr "" + #: doc/classes/PoolByteArray.xml msgid "" "Returns a hexadecimal representation of this array as a [String].\n" @@ -45244,6 +45407,10 @@ msgid "[Font] used for the menu items." msgstr "" #: doc/classes/PopupMenu.xml +msgid "[Font] used for the labeled separator." +msgstr "" + +#: doc/classes/PopupMenu.xml msgid "[Texture] icon for the checked checkbox items." msgstr "" @@ -48690,19 +48857,6 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used easing from [enum Tween.EaseType]. If not set, the " -"default easing is used from the [Tween] that contains this Tweener." -msgstr "" - -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used transition from [enum Tween.TransitionType]. If not " -"set, the default transition is used from the [Tween] that contains this " -"Tweener." -msgstr "" - #: doc/classes/ProximityGroup.xml msgid "General-purpose 3D proximity detection node." msgstr "" @@ -53534,8 +53688,15 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape touches another. If there are " -"no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape touches another.\n" +"If there are no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the shape to check collisions with " "([code]with_shape[/code]), and the transformation matrix of that shape " @@ -53556,8 +53717,16 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape would touch another, if a " -"given movement was applied. If there are no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape would touch another, " +"if a given movement was applied.\n" +"If there would be no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the movement to test on this shape " "([code]local_motion[/code]), the shape to check collisions with " diff --git a/doc/translations/ca.po b/doc/translations/ca.po index eb82d850ee..9b721874b7 100644 --- a/doc/translations/ca.po +++ b/doc/translations/ca.po @@ -1047,11 +1047,12 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Random range, any floating point value between [code]from[/code] and " -"[code]to[/code].\n" +"Returns a random floating point value between [code]from[/code] and " +"[code]to[/code] (both endpoints inclusive).\n" "[codeblock]\n" "prints(rand_range(0, 1), rand_range(0, 1)) # Prints e.g. 0.135591 0.405263\n" -"[/codeblock]" +"[/codeblock]\n" +"[b]Note:[/b] This is equivalent to [code]randf() * (to - from) + from[/code]." msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml @@ -1095,37 +1096,36 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Returns an array with the given range. Range can be 1 argument [code]N[/" -"code] (0 to [code]N[/code] - 1), two arguments ([code]initial[/code], " -"[code]final - 1[/code]) or three arguments ([code]initial[/code], " -"[code]final - 1[/code], [code]increment[/code]). Returns an empty array if " -"the range isn't valid (e.g. [code]range(2, 5, -1)[/code] or [code]range(5, " -"5, 1)[/code]).\n" -"Returns an array with the given range. [code]range()[/code] can have 1 " -"argument N ([code]0[/code] to [code]N - 1[/code]), two arguments " -"([code]initial[/code], [code]final - 1[/code]) or three arguments " -"([code]initial[/code], [code]final - 1[/code], [code]increment[/code]). " -"[code]increment[/code] can be negative. If [code]increment[/code] is " -"negative, [code]final - 1[/code] will become [code]final + 1[/code]. Also, " -"the initial value must be greater than the final value for the loop to run.\n" -"[codeblock]\n" -"print(range(4))\n" -"print(range(2, 5))\n" -"print(range(0, 6, 2))\n" -"[/codeblock]\n" -"Output:\n" +"Returns an array with the given range. [method range] can be called in three " +"ways:\n" +"[code]range(n: int)[/code]: Starts from 0, increases by steps of 1, and " +"stops [i]before[/i] [code]n[/code]. The argument [code]n[/code] is " +"[b]exclusive[/b].\n" +"[code]range(b: int, n: int)[/code]: Starts from [code]b[/code], increases by " +"steps of 1, and stops [i]before[/i] [code]n[/code]. The arguments [code]b[/" +"code] and [code]n[/code] are [b]inclusive[/b] and [b]exclusive[/b], " +"respectively.\n" +"[code]range(b: int, n: int, s: int)[/code]: Starts from [code]b[/code], " +"increases/decreases by steps of [code]s[/code], and stops [i]before[/i] " +"[code]n[/code]. The arguments [code]b[/code] and [code]n[/code] are " +"[b]inclusive[/b] and [b]exclusive[/b], respectively. The argument [code]s[/" +"code] [b]can[/b] be negative, but not [code]0[/code]. If [code]s[/code] is " +"[code]0[/code], an error message is printed.\n" +"[method range] converts all arguments to [int] before processing.\n" +"[b]Note:[/b] Returns an empty array if no value meets the value constraint " +"(e.g. [code]range(2, 5, -1)[/code] or [code]range(5, 5, 1)[/code]).\n" +"Examples:\n" "[codeblock]\n" -"[0, 1, 2, 3]\n" -"[2, 3, 4]\n" -"[0, 2, 4]\n" +"print(range(4)) # Prints [0, 1, 2, 3]\n" +"print(range(2, 5)) # Prints [2, 3, 4]\n" +"print(range(0, 6, 2)) # Prints [0, 2, 4]\n" +"print(range(4, 1, -1)) # Prints [4, 3, 2]\n" "[/codeblock]\n" "To iterate over an [Array] backwards, use:\n" "[codeblock]\n" "var array = [3, 6, 9]\n" -"var i := array.size() - 1\n" -"while i >= 0:\n" -" print(array[i])\n" -" i -= 1\n" +"for i in range(array.size(), 0, -1):\n" +" print(array[i - 1])\n" "[/codeblock]\n" "Output:\n" "[codeblock]\n" @@ -4220,17 +4220,24 @@ msgid "Maximum value for the mode enum." msgstr "" #: doc/classes/AnimatedSprite.xml -msgid "Sprite node that can use multiple textures for animation." +msgid "" +"Sprite node that contains multiple textures as frames to play for animation." msgstr "" #: doc/classes/AnimatedSprite.xml msgid "" -"Animations are created using a [SpriteFrames] resource, which can be " -"configured in the editor via the SpriteFrames panel.\n" -"[b]Note:[/b] You can associate a set of normal maps by creating additional " -"[SpriteFrames] resources with a [code]_normal[/code] suffix. For example, " -"having 2 [SpriteFrames] resources [code]run[/code] and [code]run_normal[/" -"code] will make it so the [code]run[/code] animation uses the normal map." +"[AnimatedSprite] is similar to the [Sprite] node, except it carries multiple " +"textures as animation frames. Animations are created using a [SpriteFrames] " +"resource, which allows you to import image files (or a folder containing " +"said files) to provide the animation frames for the sprite. The " +"[SpriteFrames] resource can be configured in the editor via the SpriteFrames " +"bottom panel.\n" +"[b]Note:[/b] You can associate a set of normal or specular maps by creating " +"additional [SpriteFrames] resources with a [code]_normal[/code] or " +"[code]_specular[/code] suffix. For example, having 3 [SpriteFrames] " +"resources [code]run[/code], [code]run_normal[/code], and [code]run_specular[/" +"code] will make it so the [code]run[/code] animation uses normal and " +"specular maps." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml @@ -4258,9 +4265,9 @@ msgstr "" msgid "Stops the current animation (does not reset the frame counter)." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml +#: doc/classes/AnimatedSprite.xml msgid "" -"The current animation from the [code]frames[/code] resource. If this value " +"The current animation from the [member frames] resource. If this value " "changes, the [code]frame[/code] counter is reset." msgstr "" @@ -4284,8 +4291,11 @@ msgstr "" msgid "The displayed animation frame's index." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml -msgid "The [SpriteFrames] resource containing the animation(s)." +#: doc/classes/AnimatedSprite.xml +msgid "" +"The [SpriteFrames] resource containing the animation(s). Allows you the " +"option to load, edit, clear, make unique and save the states of the " +"[SpriteFrames] resource." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/Sprite.xml @@ -4337,6 +4347,16 @@ msgid "" "provided, the current animation is played." msgstr "" +#: doc/classes/AnimatedSprite3D.xml +msgid "" +"The current animation from the [code]frames[/code] resource. If this value " +"changes, the [code]frame[/code] counter is reset." +msgstr "" + +#: doc/classes/AnimatedSprite3D.xml +msgid "The [SpriteFrames] resource containing the animation(s)." +msgstr "" + #: doc/classes/AnimatedTexture.xml msgid "Proxy texture for simple frame-based animations." msgstr "" @@ -4852,11 +4872,11 @@ msgstr "" msgid "No interpolation (nearest value)." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Linear interpolation." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Cubic interpolation." msgstr "" @@ -5891,7 +5911,10 @@ msgid "" "Seeks the animation to the [code]seconds[/code] point in time (in seconds). " "If [code]update[/code] is [code]true[/code], the animation updates too, " "otherwise it updates at process time. Events between the current frame and " -"[code]seconds[/code] are skipped." +"[code]seconds[/code] are skipped.\n" +"[b]Note:[/b] Seeking to the end of the animation doesn't emit [signal " +"animation_finished]. If you want to skip animation and emit the signal, use " +"[method advance]." msgstr "" #: doc/classes/AnimationPlayer.xml @@ -7081,7 +7104,10 @@ msgid "" "[code]0[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "Returns the number of times an element is in the array." msgstr "" @@ -7126,10 +7152,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array for a value and returns its index or [code]-1[/code] if " -"not found. Optionally, the initial search index can be passed." +"not found. Optionally, the initial search index can be passed. Returns " +"[code]-1[/code] if [code]from[/code] is out of bounds." msgstr "" #: doc/classes/Array.xml @@ -7267,11 +7297,15 @@ msgid "" "[code]null[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array in reverse order. Optionally, a start search index can be " "passed. If negative, the start index is considered relative to the end of " -"the array." +"the array. If the adjusted start index is out of bounds, this method " +"searches from the end of the array." msgstr "" #: doc/classes/Array.xml @@ -8406,7 +8440,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -8628,7 +8662,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -11739,17 +11773,17 @@ msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a normal vector in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a 3D position in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml @@ -13998,7 +14032,9 @@ msgstr "" #: doc/classes/CollisionPolygon2D.xml msgid "" "If [code]true[/code], only edges that face up, relative to " -"[CollisionPolygon2D]'s rotation, will collide with other objects." +"[CollisionPolygon2D]'s rotation, will collide with other objects.\n" +"[b]Note:[/b] This property has no effect if this [CollisionPolygon2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionPolygon2D.xml @@ -14094,7 +14130,9 @@ msgstr "" #: doc/classes/CollisionShape2D.xml msgid "" "Sets whether this collision shape should only detect collision on one side " -"(top or bottom)." +"(top or bottom).\n" +"[b]Note:[/b] This property has no effect if this [CollisionShape2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionShape2D.xml @@ -22500,6 +22538,10 @@ msgid "" "same behavior." msgstr "" +#: doc/classes/EditorSpinSlider.xml +msgid "If [code]true[/code], the slider is hidden." +msgstr "" + #: doc/classes/EditorVCSInterface.xml msgid "" "Version Control System (VCS) interface, which reads and writes to the local " @@ -26084,9 +26126,22 @@ msgid "Gradient's colors returned as a [PoolColorArray]." msgstr "" #: doc/classes/Gradient.xml +msgid "" +"Defines how the colors between points of the gradient are interpolated. See " +"[enum InterpolationMode] for available modes." +msgstr "" + +#: doc/classes/Gradient.xml msgid "Gradient's offsets returned as a [PoolRealArray]." msgstr "" +#: doc/classes/Gradient.xml +msgid "" +"Constant interpolation, color changes abruptly at each point and stays " +"uniform between. This might cause visible aliasing when used for a gradient " +"texture in some cases." +msgstr "" + #: doc/classes/GradientTexture.xml msgid "Gradient-filled texture." msgstr "" @@ -34608,13 +34663,13 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used easing from [enum Tween.EaseType]. If not set, the " "default easing is used from the [SceneTreeTween] that contains this Tweener." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used transition from [enum Tween.TransitionType]. If not " "set, the default transition is used from the [SceneTreeTween] that contains " @@ -35320,6 +35375,12 @@ msgid "Creates the agent." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]agent[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" @@ -35383,6 +35444,12 @@ msgid "Create a new map." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation agents [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns the map cell size." msgstr "" @@ -35409,6 +35476,12 @@ msgid "Returns the navigation path to reach the destination from the origin." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation regions [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns [code]true[/code] if the map is active." msgstr "" @@ -35430,6 +35503,12 @@ msgid "Creates a new region." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]region[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the map for the region." msgstr "" @@ -35902,17 +35981,57 @@ msgid "Represents the size of the [enum SourceGeometryMode] enum." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "This class is responsible for creating and clearing navigation meshes." +msgid "Helper class for creating and clearing navigation meshes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml msgid "" -"Bakes the navigation mesh. This will allow you to use pathfinding with the " -"navigation system." +"This class is responsible for creating and clearing 3D navigation meshes " +"used as [NavigationMesh] resources inside [NavigationMeshInstance]. The " +"[NavigationMeshGenerator] has very limited to no use for 2D as the " +"navigation mesh baking process expects 3D node types and 3D source geometry " +"to parse.\n" +"The entire navigation mesh baking is best done in a separate thread as the " +"voxelization, collision tests and mesh optimization steps involved are very " +"performance and time hungry operations.\n" +"Navigation mesh baking happens in multiple steps and the result depends on " +"3D source geometry and properties of the [NavigationMesh] resource. In the " +"first step, starting from a root node and depending on [NavigationMesh] " +"properties all valid 3D source geometry nodes are collected from the " +"[SceneTree]. Second, all collected nodes are parsed for their relevant 3D " +"geometry data and a combined 3D mesh is build. Due to the many different " +"types of parsable objects, from normal [MeshInstance]s to [CSGShape]s or " +"various [CollisionObject]s, some operations to collect geometry data can " +"trigger [VisualServer] and [PhysicsServer] synchronizations. Server " +"synchronization can have a negative effect on baking time or framerate as it " +"often involves [Mutex] locking for thread security. Many parsable objects " +"and the continuous synchronization with other threaded Servers can increase " +"the baking time significantly. On the other hand only a few but very large " +"and complex objects will take some time to prepare for the Servers which can " +"noticeably stall the next frame render. As a general rule the total amount " +"of parsable objects and their individual size and complexity should be " +"balanced to avoid framerate issues or very long baking times. The combined " +"mesh is then passed to the Recast Navigation Object to test the source " +"geometry for walkable terrain suitable to [NavigationMesh] agent properties " +"by creating a voxel world around the meshes bounding area.\n" +"The finalized navigation mesh is then returned and stored inside the " +"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes." +msgstr "" + +#: doc/classes/NavigationMeshGenerator.xml +msgid "" +"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " +"nodes under the provided [code]root_node[/code] or a specific group of nodes " +"for potential source geometry. The parse behavior can be controlled with the " +"[member NavigationMesh.geometry/parsed_geometry_type] and [member " +"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[NavigationMesh] resource." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "Clears the navigation mesh." +msgid "" +"Removes all polygons and vertices from the provided [code]nav_mesh[/code] " +"resource." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -35933,7 +36052,10 @@ msgid "" "thread is useful because navigation baking is not a cheap operation. When it " "is completed, it automatically sets the new [NavigationMesh]. Please note " "that baking on separate thread may be very slow if geometry is parsed from " -"meshes as async access to each mesh involves heavy synchronization." +"meshes as async access to each mesh involves heavy synchronization. Also, " +"please note that baking on a separate thread is automatically disabled on " +"operating systems that cannot use threads (such as HTML5 with threads " +"disabled)." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -35979,6 +36101,10 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle.xml +msgid "Returns the [RID] of this obstacle on the [NavigationServer]." +msgstr "" + +#: doc/classes/NavigationObstacle.xml msgid "" "Sets the [Navigation] node used by the obstacle. Useful when you don't want " "to make the obstacle a child of a [Navigation] node." @@ -36015,6 +36141,10 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle2D.xml +msgid "Returns the [RID] of this obstacle on the [Navigation2DServer]." +msgstr "" + +#: doc/classes/NavigationObstacle2D.xml msgid "" "Sets the [Navigation2D] node used by the obstacle. Useful when you don't " "want to make the obstacle a child of a [Navigation2D] node." @@ -37199,7 +37329,7 @@ msgstr "" #: doc/classes/Node.xml msgid "" "Returns [code]true[/code] if the physics interpolated flag is set for this " -"Node (see [method set_physics_interpolated]).\n" +"Node (see [member physics_interpolation_mode]).\n" "[b]Note:[/b] Interpolation will only be active is both the flag is set " "[b]and[/b] physics interpolation is enabled within the [SceneTree]. This can " "be tested using [method is_physics_interpolated_and_enabled]." @@ -37207,8 +37337,8 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Returns [code]true[/code] if physics interpolation is enabled (see [method " -"set_physics_interpolated]) [b]and[/b] enabled in the [SceneTree].\n" +"Returns [code]true[/code] if physics interpolation is enabled (see [member " +"physics_interpolation_mode]) [b]and[/b] enabled in the [SceneTree].\n" "This is a convenience version of [method is_physics_interpolated] that also " "checks whether physics interpolation is enabled globally.\n" "See [member SceneTree.physics_interpolation] and [member ProjectSettings." @@ -37502,14 +37632,6 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Enables or disables physics interpolation per node, offering a finer grain " -"of control than turning physics interpolation on and off globally.\n" -"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " -"interpolation can sometimes give superior results." -msgstr "" - -#: doc/classes/Node.xml -msgid "" "Enables or disables physics (i.e. fixed framerate) processing. When a node " "is being processed, it will receive a [constant " "NOTIFICATION_PHYSICS_PROCESS] at a fixed (usually 60 FPS, see [member Engine." @@ -37642,6 +37764,15 @@ msgstr "" #: doc/classes/Node.xml msgid "" +"Allows enabling or disabling physics interpolation per node, offering a " +"finer grain of control than turning physics interpolation on and off " +"globally.\n" +"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " +"interpolation can sometimes give superior results." +msgstr "" + +#: doc/classes/Node.xml +msgid "" "The node's priority in the execution order of the enabled processing " "callbacks (i.e. [constant NOTIFICATION_PROCESS], [constant " "NOTIFICATION_PHYSICS_PROCESS] and their internal counterparts). Nodes whose " @@ -37803,6 +37934,24 @@ msgid "Continue to process regardless of the [SceneTree] pause state." msgstr "" #: doc/classes/Node.xml +msgid "" +"Inherits physics interpolation mode from the node's parent. For the root " +"node, it is equivalent to [constant PHYSICS_INTERPOLATION_MODE_ON]. Default." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn off physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn on physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml msgid "Duplicate the node's signals." msgstr "" @@ -39043,7 +39192,7 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" -"Returns the ID of the selected item, or [code]0[/code] if no item is " +"Returns the ID of the selected item, or [code]-1[/code] if no item is " "selected." msgstr "" @@ -39065,7 +39214,8 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" "Selects an item by index and makes it the current item. This will work even " -"if the item is disabled." +"if the item is disabled.\n" +"Passing [code]-1[/code] as the index deselects any currently selected item." msgstr "" #: doc/classes/OptionButton.xml @@ -44392,6 +44542,15 @@ msgid "" "should always be preferred." msgstr "" +#: doc/classes/PoolByteArray.xml doc/classes/PoolColorArray.xml +#: doc/classes/PoolIntArray.xml doc/classes/PoolRealArray.xml +#: doc/classes/PoolStringArray.xml doc/classes/PoolVector2Array.xml +#: doc/classes/PoolVector3Array.xml +msgid "" +"Returns [code]true[/code] if the array contains the given value.\n" +"[b]Note:[/b] This is equivalent to using the [code]in[/code] operator." +msgstr "" + #: doc/classes/PoolByteArray.xml msgid "" "Returns a hexadecimal representation of this array as a [String].\n" @@ -45185,6 +45344,10 @@ msgid "[Font] used for the menu items." msgstr "" #: doc/classes/PopupMenu.xml +msgid "[Font] used for the labeled separator." +msgstr "" + +#: doc/classes/PopupMenu.xml msgid "[Texture] icon for the checked checkbox items." msgstr "" @@ -48630,19 +48793,6 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used easing from [enum Tween.EaseType]. If not set, the " -"default easing is used from the [Tween] that contains this Tweener." -msgstr "" - -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used transition from [enum Tween.TransitionType]. If not " -"set, the default transition is used from the [Tween] that contains this " -"Tweener." -msgstr "" - #: doc/classes/ProximityGroup.xml msgid "General-purpose 3D proximity detection node." msgstr "" @@ -53472,8 +53622,15 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape touches another. If there are " -"no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape touches another.\n" +"If there are no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the shape to check collisions with " "([code]with_shape[/code]), and the transformation matrix of that shape " @@ -53494,8 +53651,16 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape would touch another, if a " -"given movement was applied. If there are no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape would touch another, " +"if a given movement was applied.\n" +"If there would be no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the movement to test on this shape " "([code]local_motion[/code]), the shape to check collisions with " diff --git a/doc/translations/classes.pot b/doc/translations/classes.pot index 067a49c93d..0068c04766 100644 --- a/doc/translations/classes.pot +++ b/doc/translations/classes.pot @@ -927,11 +927,12 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Random range, any floating point value between [code]from[/code] and " -"[code]to[/code].\n" +"Returns a random floating point value between [code]from[/code] and " +"[code]to[/code] (both endpoints inclusive).\n" "[codeblock]\n" "prints(rand_range(0, 1), rand_range(0, 1)) # Prints e.g. 0.135591 0.405263\n" -"[/codeblock]" +"[/codeblock]\n" +"[b]Note:[/b] This is equivalent to [code]randf() * (to - from) + from[/code]." msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml @@ -975,37 +976,36 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Returns an array with the given range. Range can be 1 argument [code]N[/" -"code] (0 to [code]N[/code] - 1), two arguments ([code]initial[/code], " -"[code]final - 1[/code]) or three arguments ([code]initial[/code], " -"[code]final - 1[/code], [code]increment[/code]). Returns an empty array if " -"the range isn't valid (e.g. [code]range(2, 5, -1)[/code] or [code]range(5, " -"5, 1)[/code]).\n" -"Returns an array with the given range. [code]range()[/code] can have 1 " -"argument N ([code]0[/code] to [code]N - 1[/code]), two arguments " -"([code]initial[/code], [code]final - 1[/code]) or three arguments " -"([code]initial[/code], [code]final - 1[/code], [code]increment[/code]). " -"[code]increment[/code] can be negative. If [code]increment[/code] is " -"negative, [code]final - 1[/code] will become [code]final + 1[/code]. Also, " -"the initial value must be greater than the final value for the loop to run.\n" -"[codeblock]\n" -"print(range(4))\n" -"print(range(2, 5))\n" -"print(range(0, 6, 2))\n" -"[/codeblock]\n" -"Output:\n" +"Returns an array with the given range. [method range] can be called in three " +"ways:\n" +"[code]range(n: int)[/code]: Starts from 0, increases by steps of 1, and " +"stops [i]before[/i] [code]n[/code]. The argument [code]n[/code] is " +"[b]exclusive[/b].\n" +"[code]range(b: int, n: int)[/code]: Starts from [code]b[/code], increases by " +"steps of 1, and stops [i]before[/i] [code]n[/code]. The arguments [code]b[/" +"code] and [code]n[/code] are [b]inclusive[/b] and [b]exclusive[/b], " +"respectively.\n" +"[code]range(b: int, n: int, s: int)[/code]: Starts from [code]b[/code], " +"increases/decreases by steps of [code]s[/code], and stops [i]before[/i] " +"[code]n[/code]. The arguments [code]b[/code] and [code]n[/code] are " +"[b]inclusive[/b] and [b]exclusive[/b], respectively. The argument [code]s[/" +"code] [b]can[/b] be negative, but not [code]0[/code]. If [code]s[/code] is " +"[code]0[/code], an error message is printed.\n" +"[method range] converts all arguments to [int] before processing.\n" +"[b]Note:[/b] Returns an empty array if no value meets the value constraint " +"(e.g. [code]range(2, 5, -1)[/code] or [code]range(5, 5, 1)[/code]).\n" +"Examples:\n" "[codeblock]\n" -"[0, 1, 2, 3]\n" -"[2, 3, 4]\n" -"[0, 2, 4]\n" +"print(range(4)) # Prints [0, 1, 2, 3]\n" +"print(range(2, 5)) # Prints [2, 3, 4]\n" +"print(range(0, 6, 2)) # Prints [0, 2, 4]\n" +"print(range(4, 1, -1)) # Prints [4, 3, 2]\n" "[/codeblock]\n" "To iterate over an [Array] backwards, use:\n" "[codeblock]\n" "var array = [3, 6, 9]\n" -"var i := array.size() - 1\n" -"while i >= 0:\n" -" print(array[i])\n" -" i -= 1\n" +"for i in range(array.size(), 0, -1):\n" +" print(array[i - 1])\n" "[/codeblock]\n" "Output:\n" "[codeblock]\n" @@ -4100,17 +4100,24 @@ msgid "Maximum value for the mode enum." msgstr "" #: doc/classes/AnimatedSprite.xml -msgid "Sprite node that can use multiple textures for animation." +msgid "" +"Sprite node that contains multiple textures as frames to play for animation." msgstr "" #: doc/classes/AnimatedSprite.xml msgid "" -"Animations are created using a [SpriteFrames] resource, which can be " -"configured in the editor via the SpriteFrames panel.\n" -"[b]Note:[/b] You can associate a set of normal maps by creating additional " -"[SpriteFrames] resources with a [code]_normal[/code] suffix. For example, " -"having 2 [SpriteFrames] resources [code]run[/code] and [code]run_normal[/" -"code] will make it so the [code]run[/code] animation uses the normal map." +"[AnimatedSprite] is similar to the [Sprite] node, except it carries multiple " +"textures as animation frames. Animations are created using a [SpriteFrames] " +"resource, which allows you to import image files (or a folder containing " +"said files) to provide the animation frames for the sprite. The " +"[SpriteFrames] resource can be configured in the editor via the SpriteFrames " +"bottom panel.\n" +"[b]Note:[/b] You can associate a set of normal or specular maps by creating " +"additional [SpriteFrames] resources with a [code]_normal[/code] or " +"[code]_specular[/code] suffix. For example, having 3 [SpriteFrames] " +"resources [code]run[/code], [code]run_normal[/code], and [code]run_specular[/" +"code] will make it so the [code]run[/code] animation uses normal and " +"specular maps." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml @@ -4138,9 +4145,9 @@ msgstr "" msgid "Stops the current animation (does not reset the frame counter)." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml +#: doc/classes/AnimatedSprite.xml msgid "" -"The current animation from the [code]frames[/code] resource. If this value " +"The current animation from the [member frames] resource. If this value " "changes, the [code]frame[/code] counter is reset." msgstr "" @@ -4164,8 +4171,11 @@ msgstr "" msgid "The displayed animation frame's index." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml -msgid "The [SpriteFrames] resource containing the animation(s)." +#: doc/classes/AnimatedSprite.xml +msgid "" +"The [SpriteFrames] resource containing the animation(s). Allows you the " +"option to load, edit, clear, make unique and save the states of the " +"[SpriteFrames] resource." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/Sprite.xml @@ -4217,6 +4227,16 @@ msgid "" "provided, the current animation is played." msgstr "" +#: doc/classes/AnimatedSprite3D.xml +msgid "" +"The current animation from the [code]frames[/code] resource. If this value " +"changes, the [code]frame[/code] counter is reset." +msgstr "" + +#: doc/classes/AnimatedSprite3D.xml +msgid "The [SpriteFrames] resource containing the animation(s)." +msgstr "" + #: doc/classes/AnimatedTexture.xml msgid "Proxy texture for simple frame-based animations." msgstr "" @@ -4732,11 +4752,11 @@ msgstr "" msgid "No interpolation (nearest value)." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Linear interpolation." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Cubic interpolation." msgstr "" @@ -5771,7 +5791,10 @@ msgid "" "Seeks the animation to the [code]seconds[/code] point in time (in seconds). " "If [code]update[/code] is [code]true[/code], the animation updates too, " "otherwise it updates at process time. Events between the current frame and " -"[code]seconds[/code] are skipped." +"[code]seconds[/code] are skipped.\n" +"[b]Note:[/b] Seeking to the end of the animation doesn't emit [signal " +"animation_finished]. If you want to skip animation and emit the signal, use " +"[method advance]." msgstr "" #: doc/classes/AnimationPlayer.xml @@ -6961,7 +6984,10 @@ msgid "" "[code]0[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "Returns the number of times an element is in the array." msgstr "" @@ -7006,10 +7032,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array for a value and returns its index or [code]-1[/code] if " -"not found. Optionally, the initial search index can be passed." +"not found. Optionally, the initial search index can be passed. Returns " +"[code]-1[/code] if [code]from[/code] is out of bounds." msgstr "" #: doc/classes/Array.xml @@ -7147,11 +7177,15 @@ msgid "" "[code]null[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array in reverse order. Optionally, a start search index can be " "passed. If negative, the start index is considered relative to the end of " -"the array." +"the array. If the adjusted start index is out of bounds, this method " +"searches from the end of the array." msgstr "" #: doc/classes/Array.xml @@ -8286,7 +8320,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -8508,7 +8542,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -11619,17 +11653,17 @@ msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a normal vector in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a 3D position in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml @@ -13878,7 +13912,9 @@ msgstr "" #: doc/classes/CollisionPolygon2D.xml msgid "" "If [code]true[/code], only edges that face up, relative to " -"[CollisionPolygon2D]'s rotation, will collide with other objects." +"[CollisionPolygon2D]'s rotation, will collide with other objects.\n" +"[b]Note:[/b] This property has no effect if this [CollisionPolygon2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionPolygon2D.xml @@ -13974,7 +14010,9 @@ msgstr "" #: doc/classes/CollisionShape2D.xml msgid "" "Sets whether this collision shape should only detect collision on one side " -"(top or bottom)." +"(top or bottom).\n" +"[b]Note:[/b] This property has no effect if this [CollisionShape2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionShape2D.xml @@ -22380,6 +22418,10 @@ msgid "" "same behavior." msgstr "" +#: doc/classes/EditorSpinSlider.xml +msgid "If [code]true[/code], the slider is hidden." +msgstr "" + #: doc/classes/EditorVCSInterface.xml msgid "" "Version Control System (VCS) interface, which reads and writes to the local " @@ -25961,9 +26003,22 @@ msgid "Gradient's colors returned as a [PoolColorArray]." msgstr "" #: doc/classes/Gradient.xml +msgid "" +"Defines how the colors between points of the gradient are interpolated. See " +"[enum InterpolationMode] for available modes." +msgstr "" + +#: doc/classes/Gradient.xml msgid "Gradient's offsets returned as a [PoolRealArray]." msgstr "" +#: doc/classes/Gradient.xml +msgid "" +"Constant interpolation, color changes abruptly at each point and stays " +"uniform between. This might cause visible aliasing when used for a gradient " +"texture in some cases." +msgstr "" + #: doc/classes/GradientTexture.xml msgid "Gradient-filled texture." msgstr "" @@ -34485,13 +34540,13 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used easing from [enum Tween.EaseType]. If not set, the " "default easing is used from the [SceneTreeTween] that contains this Tweener." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used transition from [enum Tween.TransitionType]. If not " "set, the default transition is used from the [SceneTreeTween] that contains " @@ -35197,6 +35252,12 @@ msgid "Creates the agent." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]agent[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" @@ -35260,6 +35321,12 @@ msgid "Create a new map." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation agents [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns the map cell size." msgstr "" @@ -35286,6 +35353,12 @@ msgid "Returns the navigation path to reach the destination from the origin." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation regions [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns [code]true[/code] if the map is active." msgstr "" @@ -35307,6 +35380,12 @@ msgid "Creates a new region." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]region[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the map for the region." msgstr "" @@ -35779,17 +35858,57 @@ msgid "Represents the size of the [enum SourceGeometryMode] enum." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "This class is responsible for creating and clearing navigation meshes." +msgid "Helper class for creating and clearing navigation meshes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml msgid "" -"Bakes the navigation mesh. This will allow you to use pathfinding with the " -"navigation system." +"This class is responsible for creating and clearing 3D navigation meshes " +"used as [NavigationMesh] resources inside [NavigationMeshInstance]. The " +"[NavigationMeshGenerator] has very limited to no use for 2D as the " +"navigation mesh baking process expects 3D node types and 3D source geometry " +"to parse.\n" +"The entire navigation mesh baking is best done in a separate thread as the " +"voxelization, collision tests and mesh optimization steps involved are very " +"performance and time hungry operations.\n" +"Navigation mesh baking happens in multiple steps and the result depends on " +"3D source geometry and properties of the [NavigationMesh] resource. In the " +"first step, starting from a root node and depending on [NavigationMesh] " +"properties all valid 3D source geometry nodes are collected from the " +"[SceneTree]. Second, all collected nodes are parsed for their relevant 3D " +"geometry data and a combined 3D mesh is build. Due to the many different " +"types of parsable objects, from normal [MeshInstance]s to [CSGShape]s or " +"various [CollisionObject]s, some operations to collect geometry data can " +"trigger [VisualServer] and [PhysicsServer] synchronizations. Server " +"synchronization can have a negative effect on baking time or framerate as it " +"often involves [Mutex] locking for thread security. Many parsable objects " +"and the continuous synchronization with other threaded Servers can increase " +"the baking time significantly. On the other hand only a few but very large " +"and complex objects will take some time to prepare for the Servers which can " +"noticeably stall the next frame render. As a general rule the total amount " +"of parsable objects and their individual size and complexity should be " +"balanced to avoid framerate issues or very long baking times. The combined " +"mesh is then passed to the Recast Navigation Object to test the source " +"geometry for walkable terrain suitable to [NavigationMesh] agent properties " +"by creating a voxel world around the meshes bounding area.\n" +"The finalized navigation mesh is then returned and stored inside the " +"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes." +msgstr "" + +#: doc/classes/NavigationMeshGenerator.xml +msgid "" +"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " +"nodes under the provided [code]root_node[/code] or a specific group of nodes " +"for potential source geometry. The parse behavior can be controlled with the " +"[member NavigationMesh.geometry/parsed_geometry_type] and [member " +"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[NavigationMesh] resource." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "Clears the navigation mesh." +msgid "" +"Removes all polygons and vertices from the provided [code]nav_mesh[/code] " +"resource." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -35810,7 +35929,10 @@ msgid "" "thread is useful because navigation baking is not a cheap operation. When it " "is completed, it automatically sets the new [NavigationMesh]. Please note " "that baking on separate thread may be very slow if geometry is parsed from " -"meshes as async access to each mesh involves heavy synchronization." +"meshes as async access to each mesh involves heavy synchronization. Also, " +"please note that baking on a separate thread is automatically disabled on " +"operating systems that cannot use threads (such as HTML5 with threads " +"disabled)." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -35856,6 +35978,10 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle.xml +msgid "Returns the [RID] of this obstacle on the [NavigationServer]." +msgstr "" + +#: doc/classes/NavigationObstacle.xml msgid "" "Sets the [Navigation] node used by the obstacle. Useful when you don't want " "to make the obstacle a child of a [Navigation] node." @@ -35892,6 +36018,10 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle2D.xml +msgid "Returns the [RID] of this obstacle on the [Navigation2DServer]." +msgstr "" + +#: doc/classes/NavigationObstacle2D.xml msgid "" "Sets the [Navigation2D] node used by the obstacle. Useful when you don't " "want to make the obstacle a child of a [Navigation2D] node." @@ -37076,7 +37206,7 @@ msgstr "" #: doc/classes/Node.xml msgid "" "Returns [code]true[/code] if the physics interpolated flag is set for this " -"Node (see [method set_physics_interpolated]).\n" +"Node (see [member physics_interpolation_mode]).\n" "[b]Note:[/b] Interpolation will only be active is both the flag is set " "[b]and[/b] physics interpolation is enabled within the [SceneTree]. This can " "be tested using [method is_physics_interpolated_and_enabled]." @@ -37084,8 +37214,8 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Returns [code]true[/code] if physics interpolation is enabled (see [method " -"set_physics_interpolated]) [b]and[/b] enabled in the [SceneTree].\n" +"Returns [code]true[/code] if physics interpolation is enabled (see [member " +"physics_interpolation_mode]) [b]and[/b] enabled in the [SceneTree].\n" "This is a convenience version of [method is_physics_interpolated] that also " "checks whether physics interpolation is enabled globally.\n" "See [member SceneTree.physics_interpolation] and [member ProjectSettings." @@ -37379,14 +37509,6 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Enables or disables physics interpolation per node, offering a finer grain " -"of control than turning physics interpolation on and off globally.\n" -"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " -"interpolation can sometimes give superior results." -msgstr "" - -#: doc/classes/Node.xml -msgid "" "Enables or disables physics (i.e. fixed framerate) processing. When a node " "is being processed, it will receive a [constant " "NOTIFICATION_PHYSICS_PROCESS] at a fixed (usually 60 FPS, see [member Engine." @@ -37519,6 +37641,15 @@ msgstr "" #: doc/classes/Node.xml msgid "" +"Allows enabling or disabling physics interpolation per node, offering a " +"finer grain of control than turning physics interpolation on and off " +"globally.\n" +"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " +"interpolation can sometimes give superior results." +msgstr "" + +#: doc/classes/Node.xml +msgid "" "The node's priority in the execution order of the enabled processing " "callbacks (i.e. [constant NOTIFICATION_PROCESS], [constant " "NOTIFICATION_PHYSICS_PROCESS] and their internal counterparts). Nodes whose " @@ -37680,6 +37811,24 @@ msgid "Continue to process regardless of the [SceneTree] pause state." msgstr "" #: doc/classes/Node.xml +msgid "" +"Inherits physics interpolation mode from the node's parent. For the root " +"node, it is equivalent to [constant PHYSICS_INTERPOLATION_MODE_ON]. Default." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn off physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn on physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml msgid "Duplicate the node's signals." msgstr "" @@ -38920,7 +39069,7 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" -"Returns the ID of the selected item, or [code]0[/code] if no item is " +"Returns the ID of the selected item, or [code]-1[/code] if no item is " "selected." msgstr "" @@ -38942,7 +39091,8 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" "Selects an item by index and makes it the current item. This will work even " -"if the item is disabled." +"if the item is disabled.\n" +"Passing [code]-1[/code] as the index deselects any currently selected item." msgstr "" #: doc/classes/OptionButton.xml @@ -44269,6 +44419,15 @@ msgid "" "should always be preferred." msgstr "" +#: doc/classes/PoolByteArray.xml doc/classes/PoolColorArray.xml +#: doc/classes/PoolIntArray.xml doc/classes/PoolRealArray.xml +#: doc/classes/PoolStringArray.xml doc/classes/PoolVector2Array.xml +#: doc/classes/PoolVector3Array.xml +msgid "" +"Returns [code]true[/code] if the array contains the given value.\n" +"[b]Note:[/b] This is equivalent to using the [code]in[/code] operator." +msgstr "" + #: doc/classes/PoolByteArray.xml msgid "" "Returns a hexadecimal representation of this array as a [String].\n" @@ -45062,6 +45221,10 @@ msgid "[Font] used for the menu items." msgstr "" #: doc/classes/PopupMenu.xml +msgid "[Font] used for the labeled separator." +msgstr "" + +#: doc/classes/PopupMenu.xml msgid "[Texture] icon for the checked checkbox items." msgstr "" @@ -48507,19 +48670,6 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used easing from [enum Tween.EaseType]. If not set, the " -"default easing is used from the [Tween] that contains this Tweener." -msgstr "" - -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used transition from [enum Tween.TransitionType]. If not " -"set, the default transition is used from the [Tween] that contains this " -"Tweener." -msgstr "" - #: doc/classes/ProximityGroup.xml msgid "General-purpose 3D proximity detection node." msgstr "" @@ -53349,8 +53499,15 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape touches another. If there are " -"no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape touches another.\n" +"If there are no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the shape to check collisions with " "([code]with_shape[/code]), and the transformation matrix of that shape " @@ -53371,8 +53528,16 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape would touch another, if a " -"given movement was applied. If there are no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape would touch another, " +"if a given movement was applied.\n" +"If there would be no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the movement to test on this shape " "([code]local_motion[/code]), the shape to check collisions with " diff --git a/doc/translations/cs.po b/doc/translations/cs.po index 6315c89af2..bfa9be6259 100644 --- a/doc/translations/cs.po +++ b/doc/translations/cs.po @@ -1357,12 +1357,14 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml +#, fuzzy msgid "" -"Random range, any floating point value between [code]from[/code] and " -"[code]to[/code].\n" +"Returns a random floating point value between [code]from[/code] and " +"[code]to[/code] (both endpoints inclusive).\n" "[codeblock]\n" "prints(rand_range(0, 1), rand_range(0, 1)) # Prints e.g. 0.135591 0.405263\n" -"[/codeblock]" +"[/codeblock]\n" +"[b]Note:[/b] This is equivalent to [code]randf() * (to - from) + from[/code]." msgstr "" "Náhodný rozptyl, jakákoliv hodnota ÄÃsla s plovoucà řádkou (float, double) " "mezi hodnotami [code]od[/code] a [code]do[/code].\n" @@ -1427,37 +1429,36 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Returns an array with the given range. Range can be 1 argument [code]N[/" -"code] (0 to [code]N[/code] - 1), two arguments ([code]initial[/code], " -"[code]final - 1[/code]) or three arguments ([code]initial[/code], " -"[code]final - 1[/code], [code]increment[/code]). Returns an empty array if " -"the range isn't valid (e.g. [code]range(2, 5, -1)[/code] or [code]range(5, " -"5, 1)[/code]).\n" -"Returns an array with the given range. [code]range()[/code] can have 1 " -"argument N ([code]0[/code] to [code]N - 1[/code]), two arguments " -"([code]initial[/code], [code]final - 1[/code]) or three arguments " -"([code]initial[/code], [code]final - 1[/code], [code]increment[/code]). " -"[code]increment[/code] can be negative. If [code]increment[/code] is " -"negative, [code]final - 1[/code] will become [code]final + 1[/code]. Also, " -"the initial value must be greater than the final value for the loop to run.\n" -"[codeblock]\n" -"print(range(4))\n" -"print(range(2, 5))\n" -"print(range(0, 6, 2))\n" -"[/codeblock]\n" -"Output:\n" +"Returns an array with the given range. [method range] can be called in three " +"ways:\n" +"[code]range(n: int)[/code]: Starts from 0, increases by steps of 1, and " +"stops [i]before[/i] [code]n[/code]. The argument [code]n[/code] is " +"[b]exclusive[/b].\n" +"[code]range(b: int, n: int)[/code]: Starts from [code]b[/code], increases by " +"steps of 1, and stops [i]before[/i] [code]n[/code]. The arguments [code]b[/" +"code] and [code]n[/code] are [b]inclusive[/b] and [b]exclusive[/b], " +"respectively.\n" +"[code]range(b: int, n: int, s: int)[/code]: Starts from [code]b[/code], " +"increases/decreases by steps of [code]s[/code], and stops [i]before[/i] " +"[code]n[/code]. The arguments [code]b[/code] and [code]n[/code] are " +"[b]inclusive[/b] and [b]exclusive[/b], respectively. The argument [code]s[/" +"code] [b]can[/b] be negative, but not [code]0[/code]. If [code]s[/code] is " +"[code]0[/code], an error message is printed.\n" +"[method range] converts all arguments to [int] before processing.\n" +"[b]Note:[/b] Returns an empty array if no value meets the value constraint " +"(e.g. [code]range(2, 5, -1)[/code] or [code]range(5, 5, 1)[/code]).\n" +"Examples:\n" "[codeblock]\n" -"[0, 1, 2, 3]\n" -"[2, 3, 4]\n" -"[0, 2, 4]\n" +"print(range(4)) # Prints [0, 1, 2, 3]\n" +"print(range(2, 5)) # Prints [2, 3, 4]\n" +"print(range(0, 6, 2)) # Prints [0, 2, 4]\n" +"print(range(4, 1, -1)) # Prints [4, 3, 2]\n" "[/codeblock]\n" "To iterate over an [Array] backwards, use:\n" "[codeblock]\n" "var array = [3, 6, 9]\n" -"var i := array.size() - 1\n" -"while i >= 0:\n" -" print(array[i])\n" -" i -= 1\n" +"for i in range(array.size(), 0, -1):\n" +" print(array[i - 1])\n" "[/codeblock]\n" "Output:\n" "[codeblock]\n" @@ -4604,17 +4605,24 @@ msgid "Maximum value for the mode enum." msgstr "" #: doc/classes/AnimatedSprite.xml -msgid "Sprite node that can use multiple textures for animation." +msgid "" +"Sprite node that contains multiple textures as frames to play for animation." msgstr "" #: doc/classes/AnimatedSprite.xml msgid "" -"Animations are created using a [SpriteFrames] resource, which can be " -"configured in the editor via the SpriteFrames panel.\n" -"[b]Note:[/b] You can associate a set of normal maps by creating additional " -"[SpriteFrames] resources with a [code]_normal[/code] suffix. For example, " -"having 2 [SpriteFrames] resources [code]run[/code] and [code]run_normal[/" -"code] will make it so the [code]run[/code] animation uses the normal map." +"[AnimatedSprite] is similar to the [Sprite] node, except it carries multiple " +"textures as animation frames. Animations are created using a [SpriteFrames] " +"resource, which allows you to import image files (or a folder containing " +"said files) to provide the animation frames for the sprite. The " +"[SpriteFrames] resource can be configured in the editor via the SpriteFrames " +"bottom panel.\n" +"[b]Note:[/b] You can associate a set of normal or specular maps by creating " +"additional [SpriteFrames] resources with a [code]_normal[/code] or " +"[code]_specular[/code] suffix. For example, having 3 [SpriteFrames] " +"resources [code]run[/code], [code]run_normal[/code], and [code]run_specular[/" +"code] will make it so the [code]run[/code] animation uses normal and " +"specular maps." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml @@ -4642,9 +4650,9 @@ msgstr "" msgid "Stops the current animation (does not reset the frame counter)." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml +#: doc/classes/AnimatedSprite.xml msgid "" -"The current animation from the [code]frames[/code] resource. If this value " +"The current animation from the [member frames] resource. If this value " "changes, the [code]frame[/code] counter is reset." msgstr "" @@ -4668,8 +4676,11 @@ msgstr "" msgid "The displayed animation frame's index." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml -msgid "The [SpriteFrames] resource containing the animation(s)." +#: doc/classes/AnimatedSprite.xml +msgid "" +"The [SpriteFrames] resource containing the animation(s). Allows you the " +"option to load, edit, clear, make unique and save the states of the " +"[SpriteFrames] resource." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/Sprite.xml @@ -4721,6 +4732,16 @@ msgid "" "provided, the current animation is played." msgstr "" +#: doc/classes/AnimatedSprite3D.xml +msgid "" +"The current animation from the [code]frames[/code] resource. If this value " +"changes, the [code]frame[/code] counter is reset." +msgstr "" + +#: doc/classes/AnimatedSprite3D.xml +msgid "The [SpriteFrames] resource containing the animation(s)." +msgstr "" + #: doc/classes/AnimatedTexture.xml msgid "Proxy texture for simple frame-based animations." msgstr "" @@ -5237,11 +5258,11 @@ msgstr "" msgid "No interpolation (nearest value)." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Linear interpolation." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Cubic interpolation." msgstr "" @@ -6277,7 +6298,10 @@ msgid "" "Seeks the animation to the [code]seconds[/code] point in time (in seconds). " "If [code]update[/code] is [code]true[/code], the animation updates too, " "otherwise it updates at process time. Events between the current frame and " -"[code]seconds[/code] are skipped." +"[code]seconds[/code] are skipped.\n" +"[b]Note:[/b] Seeking to the end of the animation doesn't emit [signal " +"animation_finished]. If you want to skip animation and emit the signal, use " +"[method advance]." msgstr "" #: doc/classes/AnimationPlayer.xml @@ -7469,7 +7493,10 @@ msgid "" "[code]0[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "Returns the number of times an element is in the array." msgstr "" @@ -7514,10 +7541,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array for a value and returns its index or [code]-1[/code] if " -"not found. Optionally, the initial search index can be passed." +"not found. Optionally, the initial search index can be passed. Returns " +"[code]-1[/code] if [code]from[/code] is out of bounds." msgstr "" #: doc/classes/Array.xml @@ -7655,11 +7686,15 @@ msgid "" "[code]null[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array in reverse order. Optionally, a start search index can be " "passed. If negative, the start index is considered relative to the end of " -"the array." +"the array. If the adjusted start index is out of bounds, this method " +"searches from the end of the array." msgstr "" #: doc/classes/Array.xml @@ -8795,7 +8830,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -9017,7 +9052,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -12138,17 +12173,17 @@ msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a normal vector in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a 3D position in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml @@ -14405,7 +14440,9 @@ msgstr "" #: doc/classes/CollisionPolygon2D.xml msgid "" "If [code]true[/code], only edges that face up, relative to " -"[CollisionPolygon2D]'s rotation, will collide with other objects." +"[CollisionPolygon2D]'s rotation, will collide with other objects.\n" +"[b]Note:[/b] This property has no effect if this [CollisionPolygon2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionPolygon2D.xml @@ -14501,7 +14538,9 @@ msgstr "" #: doc/classes/CollisionShape2D.xml msgid "" "Sets whether this collision shape should only detect collision on one side " -"(top or bottom)." +"(top or bottom).\n" +"[b]Note:[/b] This property has no effect if this [CollisionShape2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionShape2D.xml @@ -22952,6 +22991,11 @@ msgid "" "same behavior." msgstr "" +#: doc/classes/EditorSpinSlider.xml +#, fuzzy +msgid "If [code]true[/code], the slider is hidden." +msgstr "Vrátà [code] true [/code], pokud je vektor normalizován, jinak false." + #: doc/classes/EditorVCSInterface.xml msgid "" "Version Control System (VCS) interface, which reads and writes to the local " @@ -26539,9 +26583,22 @@ msgid "Gradient's colors returned as a [PoolColorArray]." msgstr "" #: doc/classes/Gradient.xml +msgid "" +"Defines how the colors between points of the gradient are interpolated. See " +"[enum InterpolationMode] for available modes." +msgstr "" + +#: doc/classes/Gradient.xml msgid "Gradient's offsets returned as a [PoolRealArray]." msgstr "" +#: doc/classes/Gradient.xml +msgid "" +"Constant interpolation, color changes abruptly at each point and stays " +"uniform between. This might cause visible aliasing when used for a gradient " +"texture in some cases." +msgstr "" + #: doc/classes/GradientTexture.xml msgid "Gradient-filled texture." msgstr "" @@ -35079,13 +35136,13 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used easing from [enum Tween.EaseType]. If not set, the " "default easing is used from the [SceneTreeTween] that contains this Tweener." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used transition from [enum Tween.TransitionType]. If not " "set, the default transition is used from the [SceneTreeTween] that contains " @@ -35798,6 +35855,12 @@ msgid "Creates the agent." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]agent[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "Vrátà [code] true [/code], pokud je vektor normalizován, jinak false." @@ -35868,6 +35931,12 @@ msgid "Create a new map." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation agents [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns the map cell size." msgstr "Vrátà arkus sinus parametru." @@ -35895,6 +35964,12 @@ msgid "Returns the navigation path to reach the destination from the origin." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation regions [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns [code]true[/code] if the map is active." msgstr "Vrátà [code] true [/code], pokud je vektor normalizován, jinak false." @@ -35918,6 +35993,12 @@ msgid "Creates a new region." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]region[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Sets the map for the region." msgstr "Vrátà sinus parametru." @@ -36398,19 +36479,60 @@ msgid "Represents the size of the [enum SourceGeometryMode] enum." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "This class is responsible for creating and clearing navigation meshes." +msgid "Helper class for creating and clearing navigation meshes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml msgid "" -"Bakes the navigation mesh. This will allow you to use pathfinding with the " -"navigation system." +"This class is responsible for creating and clearing 3D navigation meshes " +"used as [NavigationMesh] resources inside [NavigationMeshInstance]. The " +"[NavigationMeshGenerator] has very limited to no use for 2D as the " +"navigation mesh baking process expects 3D node types and 3D source geometry " +"to parse.\n" +"The entire navigation mesh baking is best done in a separate thread as the " +"voxelization, collision tests and mesh optimization steps involved are very " +"performance and time hungry operations.\n" +"Navigation mesh baking happens in multiple steps and the result depends on " +"3D source geometry and properties of the [NavigationMesh] resource. In the " +"first step, starting from a root node and depending on [NavigationMesh] " +"properties all valid 3D source geometry nodes are collected from the " +"[SceneTree]. Second, all collected nodes are parsed for their relevant 3D " +"geometry data and a combined 3D mesh is build. Due to the many different " +"types of parsable objects, from normal [MeshInstance]s to [CSGShape]s or " +"various [CollisionObject]s, some operations to collect geometry data can " +"trigger [VisualServer] and [PhysicsServer] synchronizations. Server " +"synchronization can have a negative effect on baking time or framerate as it " +"often involves [Mutex] locking for thread security. Many parsable objects " +"and the continuous synchronization with other threaded Servers can increase " +"the baking time significantly. On the other hand only a few but very large " +"and complex objects will take some time to prepare for the Servers which can " +"noticeably stall the next frame render. As a general rule the total amount " +"of parsable objects and their individual size and complexity should be " +"balanced to avoid framerate issues or very long baking times. The combined " +"mesh is then passed to the Recast Navigation Object to test the source " +"geometry for walkable terrain suitable to [NavigationMesh] agent properties " +"by creating a voxel world around the meshes bounding area.\n" +"The finalized navigation mesh is then returned and stored inside the " +"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "Clears the navigation mesh." +msgid "" +"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " +"nodes under the provided [code]root_node[/code] or a specific group of nodes " +"for potential source geometry. The parse behavior can be controlled with the " +"[member NavigationMesh.geometry/parsed_geometry_type] and [member " +"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[NavigationMesh] resource." msgstr "" +#: doc/classes/NavigationMeshGenerator.xml +#, fuzzy +msgid "" +"Removes all polygons and vertices from the provided [code]nav_mesh[/code] " +"resource." +msgstr "Vracà [code]true[/code] pokud [code]s[/code] je nula nebo téměř nula." + #: doc/classes/NavigationMeshInstance.xml msgid "An instance of a [NavigationMesh]." msgstr "" @@ -36429,7 +36551,10 @@ msgid "" "thread is useful because navigation baking is not a cheap operation. When it " "is completed, it automatically sets the new [NavigationMesh]. Please note " "that baking on separate thread may be very slow if geometry is parsed from " -"meshes as async access to each mesh involves heavy synchronization." +"meshes as async access to each mesh involves heavy synchronization. Also, " +"please note that baking on a separate thread is automatically disabled on " +"operating systems that cannot use threads (such as HTML5 with threads " +"disabled)." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -36475,6 +36600,11 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle.xml +#, fuzzy +msgid "Returns the [RID] of this obstacle on the [NavigationServer]." +msgstr "Vrátà sinus parametru." + +#: doc/classes/NavigationObstacle.xml msgid "" "Sets the [Navigation] node used by the obstacle. Useful when you don't want " "to make the obstacle a child of a [Navigation] node." @@ -36511,6 +36641,11 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle2D.xml +#, fuzzy +msgid "Returns the [RID] of this obstacle on the [Navigation2DServer]." +msgstr "Vrátà sinus parametru." + +#: doc/classes/NavigationObstacle2D.xml msgid "" "Sets the [Navigation2D] node used by the obstacle. Useful when you don't " "want to make the obstacle a child of a [Navigation2D] node." @@ -37699,7 +37834,7 @@ msgstr "" #: doc/classes/Node.xml msgid "" "Returns [code]true[/code] if the physics interpolated flag is set for this " -"Node (see [method set_physics_interpolated]).\n" +"Node (see [member physics_interpolation_mode]).\n" "[b]Note:[/b] Interpolation will only be active is both the flag is set " "[b]and[/b] physics interpolation is enabled within the [SceneTree]. This can " "be tested using [method is_physics_interpolated_and_enabled]." @@ -37707,8 +37842,8 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Returns [code]true[/code] if physics interpolation is enabled (see [method " -"set_physics_interpolated]) [b]and[/b] enabled in the [SceneTree].\n" +"Returns [code]true[/code] if physics interpolation is enabled (see [member " +"physics_interpolation_mode]) [b]and[/b] enabled in the [SceneTree].\n" "This is a convenience version of [method is_physics_interpolated] that also " "checks whether physics interpolation is enabled globally.\n" "See [member SceneTree.physics_interpolation] and [member ProjectSettings." @@ -38002,14 +38137,6 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Enables or disables physics interpolation per node, offering a finer grain " -"of control than turning physics interpolation on and off globally.\n" -"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " -"interpolation can sometimes give superior results." -msgstr "" - -#: doc/classes/Node.xml -msgid "" "Enables or disables physics (i.e. fixed framerate) processing. When a node " "is being processed, it will receive a [constant " "NOTIFICATION_PHYSICS_PROCESS] at a fixed (usually 60 FPS, see [member Engine." @@ -38142,6 +38269,15 @@ msgstr "" #: doc/classes/Node.xml msgid "" +"Allows enabling or disabling physics interpolation per node, offering a " +"finer grain of control than turning physics interpolation on and off " +"globally.\n" +"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " +"interpolation can sometimes give superior results." +msgstr "" + +#: doc/classes/Node.xml +msgid "" "The node's priority in the execution order of the enabled processing " "callbacks (i.e. [constant NOTIFICATION_PROCESS], [constant " "NOTIFICATION_PHYSICS_PROCESS] and their internal counterparts). Nodes whose " @@ -38303,6 +38439,24 @@ msgid "Continue to process regardless of the [SceneTree] pause state." msgstr "" #: doc/classes/Node.xml +msgid "" +"Inherits physics interpolation mode from the node's parent. For the root " +"node, it is equivalent to [constant PHYSICS_INTERPOLATION_MODE_ON]. Default." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn off physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn on physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml msgid "Duplicate the node's signals." msgstr "" @@ -39547,7 +39701,7 @@ msgstr "Vracà [code]true[/code] pokud [code]s[/code] je nula nebo téměř nula #: doc/classes/OptionButton.xml msgid "" -"Returns the ID of the selected item, or [code]0[/code] if no item is " +"Returns the ID of the selected item, or [code]-1[/code] if no item is " "selected." msgstr "" @@ -39569,7 +39723,8 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" "Selects an item by index and makes it the current item. This will work even " -"if the item is disabled." +"if the item is disabled.\n" +"Passing [code]-1[/code] as the index deselects any currently selected item." msgstr "" #: doc/classes/OptionButton.xml @@ -44930,6 +45085,18 @@ msgid "" "should always be preferred." msgstr "" +#: doc/classes/PoolByteArray.xml doc/classes/PoolColorArray.xml +#: doc/classes/PoolIntArray.xml doc/classes/PoolRealArray.xml +#: doc/classes/PoolStringArray.xml doc/classes/PoolVector2Array.xml +#: doc/classes/PoolVector3Array.xml +#, fuzzy +msgid "" +"Returns [code]true[/code] if the array contains the given value.\n" +"[b]Note:[/b] This is equivalent to using the [code]in[/code] operator." +msgstr "" +"Vracà [code]true[/code] pokud si jsou [code]a[/code] a [code]b[/code] " +"pÅ™iblÞnÄ› rovny." + #: doc/classes/PoolByteArray.xml msgid "" "Returns a hexadecimal representation of this array as a [String].\n" @@ -45726,6 +45893,10 @@ msgid "[Font] used for the menu items." msgstr "" #: doc/classes/PopupMenu.xml +msgid "[Font] used for the labeled separator." +msgstr "" + +#: doc/classes/PopupMenu.xml msgid "[Texture] icon for the checked checkbox items." msgstr "" @@ -49172,19 +49343,6 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used easing from [enum Tween.EaseType]. If not set, the " -"default easing is used from the [Tween] that contains this Tweener." -msgstr "" - -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used transition from [enum Tween.TransitionType]. If not " -"set, the default transition is used from the [Tween] that contains this " -"Tweener." -msgstr "" - #: doc/classes/ProximityGroup.xml msgid "General-purpose 3D proximity detection node." msgstr "" @@ -54024,8 +54182,15 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape touches another. If there are " -"no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape touches another.\n" +"If there are no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the shape to check collisions with " "([code]with_shape[/code]), and the transformation matrix of that shape " @@ -54046,8 +54211,16 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape would touch another, if a " -"given movement was applied. If there are no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape would touch another, " +"if a given movement was applied.\n" +"If there would be no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the movement to test on this shape " "([code]local_motion[/code]), the shape to check collisions with " diff --git a/doc/translations/de.po b/doc/translations/de.po index eb6e3b1886..10d5d2f52c 100644 --- a/doc/translations/de.po +++ b/doc/translations/de.po @@ -46,12 +46,13 @@ # Robin <robin.janzen@gmx.net>, 2022. # Andreas <self@andreasbresser.de>, 2022. # Christian Packenius <christian@packenius.com>, 2022. +# Hannes Petersen <01zustrom.baklava@icloud.com>, 2022. msgid "" msgstr "" "Project-Id-Version: Godot Engine class reference\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" -"PO-Revision-Date: 2022-04-30 17:12+0000\n" -"Last-Translator: Christian Packenius <christian@packenius.com>\n" +"PO-Revision-Date: 2022-05-13 19:27+0000\n" +"Last-Translator: Hannes Petersen <01zustrom.baklava@icloud.com>\n" "Language-Team: German <https://hosted.weblate.org/projects/godot-engine/" "godot-class-reference/de/>\n" "Language: de\n" @@ -59,7 +60,7 @@ msgstr "" "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.12.1\n" +"X-Generator: Weblate 4.13-dev\n" #: doc/tools/make_rst.py msgid "Description" @@ -103,7 +104,7 @@ msgstr "Methoden-Beschreibung" #: doc/tools/make_rst.py msgid "Theme Property Descriptions" -msgstr "Theme-Eigenschaften-Beschreibung" +msgstr "Beschreibung der Theme-Eigenschaften" #: doc/tools/make_rst.py msgid "Inherits:" @@ -123,7 +124,7 @@ msgstr "Standard" #: doc/tools/make_rst.py msgid "Setter" -msgstr "Setter" +msgstr "Wert-Zuweiser" #: doc/tools/make_rst.py msgid "value" @@ -131,7 +132,7 @@ msgstr "Wert" #: doc/tools/make_rst.py msgid "Getter" -msgstr "Getter" +msgstr "Wert-Abrufer" #: doc/tools/make_rst.py msgid "" @@ -143,7 +144,7 @@ msgid "" "This method has no side effects. It doesn't modify any of the instance's " "member variables." msgstr "" -"Diese Methode verursacht keine Seiteneffekte. Variablen der betroffenen " +"Diese Methode löst keine Seiteneffekte aus. Variablen der betroffenen " "Instanz bleiben unverändert." #: doc/tools/make_rst.py @@ -151,11 +152,11 @@ msgid "" "This method accepts any number of arguments after the ones described here." msgstr "" "Diese Methode nimmt eine beliebige Anzahl an Argumenten nach Ende der hier " -"beschriebenen auf." +"beschriebenen Argumente auf." #: doc/tools/make_rst.py msgid "This method is used to construct a type." -msgstr "Diese Methode wird dazu verwendet, einen Typ zu konstruieren." +msgstr "Diese Methode wird dazu verwendet, einen Typen zu konstruieren." #: doc/tools/make_rst.py msgid "" @@ -1533,12 +1534,14 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml +#, fuzzy msgid "" -"Random range, any floating point value between [code]from[/code] and " -"[code]to[/code].\n" +"Returns a random floating point value between [code]from[/code] and " +"[code]to[/code] (both endpoints inclusive).\n" "[codeblock]\n" "prints(rand_range(0, 1), rand_range(0, 1)) # Prints e.g. 0.135591 0.405263\n" -"[/codeblock]" +"[/codeblock]\n" +"[b]Note:[/b] This is equivalent to [code]randf() * (to - from) + from[/code]." msgstr "" "Gibt einen Zufallswert zwischen [code]from[/code] und [code]to[/code] " "zurück.\n" @@ -1617,37 +1620,36 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Returns an array with the given range. Range can be 1 argument [code]N[/" -"code] (0 to [code]N[/code] - 1), two arguments ([code]initial[/code], " -"[code]final - 1[/code]) or three arguments ([code]initial[/code], " -"[code]final - 1[/code], [code]increment[/code]). Returns an empty array if " -"the range isn't valid (e.g. [code]range(2, 5, -1)[/code] or [code]range(5, " -"5, 1)[/code]).\n" -"Returns an array with the given range. [code]range()[/code] can have 1 " -"argument N ([code]0[/code] to [code]N - 1[/code]), two arguments " -"([code]initial[/code], [code]final - 1[/code]) or three arguments " -"([code]initial[/code], [code]final - 1[/code], [code]increment[/code]). " -"[code]increment[/code] can be negative. If [code]increment[/code] is " -"negative, [code]final - 1[/code] will become [code]final + 1[/code]. Also, " -"the initial value must be greater than the final value for the loop to run.\n" -"[codeblock]\n" -"print(range(4))\n" -"print(range(2, 5))\n" -"print(range(0, 6, 2))\n" -"[/codeblock]\n" -"Output:\n" +"Returns an array with the given range. [method range] can be called in three " +"ways:\n" +"[code]range(n: int)[/code]: Starts from 0, increases by steps of 1, and " +"stops [i]before[/i] [code]n[/code]. The argument [code]n[/code] is " +"[b]exclusive[/b].\n" +"[code]range(b: int, n: int)[/code]: Starts from [code]b[/code], increases by " +"steps of 1, and stops [i]before[/i] [code]n[/code]. The arguments [code]b[/" +"code] and [code]n[/code] are [b]inclusive[/b] and [b]exclusive[/b], " +"respectively.\n" +"[code]range(b: int, n: int, s: int)[/code]: Starts from [code]b[/code], " +"increases/decreases by steps of [code]s[/code], and stops [i]before[/i] " +"[code]n[/code]. The arguments [code]b[/code] and [code]n[/code] are " +"[b]inclusive[/b] and [b]exclusive[/b], respectively. The argument [code]s[/" +"code] [b]can[/b] be negative, but not [code]0[/code]. If [code]s[/code] is " +"[code]0[/code], an error message is printed.\n" +"[method range] converts all arguments to [int] before processing.\n" +"[b]Note:[/b] Returns an empty array if no value meets the value constraint " +"(e.g. [code]range(2, 5, -1)[/code] or [code]range(5, 5, 1)[/code]).\n" +"Examples:\n" "[codeblock]\n" -"[0, 1, 2, 3]\n" -"[2, 3, 4]\n" -"[0, 2, 4]\n" +"print(range(4)) # Prints [0, 1, 2, 3]\n" +"print(range(2, 5)) # Prints [2, 3, 4]\n" +"print(range(0, 6, 2)) # Prints [0, 2, 4]\n" +"print(range(4, 1, -1)) # Prints [4, 3, 2]\n" "[/codeblock]\n" "To iterate over an [Array] backwards, use:\n" "[codeblock]\n" "var array = [3, 6, 9]\n" -"var i := array.size() - 1\n" -"while i >= 0:\n" -" print(array[i])\n" -" i -= 1\n" +"for i in range(array.size(), 0, -1):\n" +" print(array[i - 1])\n" "[/codeblock]\n" "Output:\n" "[codeblock]\n" @@ -1656,45 +1658,6 @@ msgid "" "3\n" "[/codeblock]" msgstr "" -"Gibt zurück ein Array mit der angegebenen Reichweite. Range kann 1 Argument " -"[code]N[/code] (0 bis [code]N[/code] - 1), zwei Argumente ([code]initial[/" -"code], [code]final - 1[/code]) oder drei Argumente ([code]initial[/code], " -"[code]final - 1[/code], [code]increment[/code]) aufnehmen. Gibt ein leeres " -"Array zurück, falls die Reichweite ungültig ist (z.B. [code]range(2, 5, -1)[/" -"code] oder [code]range(5, 5, 1)[/code]).\n" -"Gibt zurück ein Array mit der angegebenen Reichweite. [code]range()[/code] " -"kann 1 Argument N ([code]0[/code] bis [code]N - 1[/code]), zwei Argumente " -"([code]initial[/code], [code]final - 1[/code]) oder drei Argumente " -"([code]initial[/code], [code]final - 1[/code], [code]increment[/code]) " -"aufnehmen. [code]increment[/code] darf negativ sein. Ist [code]increment[/" -"code] negativ, wird [code]final - 1[/code] zu [code]final + 1[/code]. Ferner " -"muss, damit die Schleife durchlaufen werden kann, der Initialwert größer " -"sein als der Finalwert.\n" -"[codeblock]\n" -"print(range(4))\n" -"print(range(2, 5))\n" -"print(range(0, 6, 2))\n" -"[/codeblock]\n" -"Ausgabe:\n" -"[codeblock]\n" -"[0, 1, 2, 3]\n" -"[2, 3, 4]\n" -"[0, 2, 4]\n" -"[/codeblock]\n" -"Um rückwärts durch ein [Array] zu iterieren:\n" -"[codeblock]\n" -"var array = [3, 6, 9]\n" -"var i := array.size() - 1\n" -"while i >= 0:\n" -" print(array[i])\n" -" i -= 1\n" -"[/codeblock]\n" -"Ausgabe:\n" -"[codeblock]\n" -"9\n" -"6\n" -"3\n" -"[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" @@ -3973,6 +3936,8 @@ msgid "" "MIDI note ON message. See the documentation of [InputEventMIDI] for " "information of how to use MIDI inputs." msgstr "" +"MIDI Noten ON Mitteilung. Weitere Informationen, wie MIDI Eingaben verwendet " +"werden, können der Dokumentation von [InputEventMIDI] entnommen werden." #: doc/classes/@GlobalScope.xml msgid "" @@ -3985,6 +3950,9 @@ msgid "" "MIDI control change message. This message is sent when a controller value " "changes. Controllers include devices such as pedals and levers." msgstr "" +"Änderungsmitteilung für eine MIDI-Steuerungseinheit. Diese Mitteilung wird " +"gesendet, sollte sich der Wert einer Steuerungseinheit ändern. " +"Steuerungseinheiten sind zum Beispiel Pedale und Schalter." #: doc/classes/@GlobalScope.xml msgid "" @@ -4028,6 +3996,9 @@ msgid "" "MIDI song select message. Specifies which sequence or song is to be played. " "Getting this data is not implemented in Godot." msgstr "" +"MIDI Mitteilung für Songauswahl. Legt fest, welche Musik-Sequenz oder " +"welcher Song abgespielt werden soll. Das Abrufen dieser Daten ist nicht in " +"Godot implementiert." #: doc/classes/@GlobalScope.xml msgid "" @@ -4040,20 +4011,26 @@ msgid "" "MIDI timing clock message. Sent 24 times per quarter note when " "synchronization is required." msgstr "" +"MIDI Mitteilung zum Uhr-Timing. Diese Mitteilung wird 24 Mal pro Viertelnote " +"gesendet, sollte eine Synchronisation erforderlich sein." #: doc/classes/@GlobalScope.xml msgid "" "MIDI start message. Start the current sequence playing. This message will be " "followed with Timing Clocks." msgstr "" +"MIDI Start-Mitteilung. Startet die Wiedergabe der aktuellen Sequenz. Dieser " +"Mitteilung folgen die Uhr-Timings." #: doc/classes/@GlobalScope.xml msgid "MIDI continue message. Continue at the point the sequence was stopped." msgstr "" +"MIDI Wiederaufnahme-Mitteilung. Die Wiedergabe der Sequenz wird an dem Punkt " +"fortgesetzt, an dem die Wiedergabe gestoppt wurde." #: doc/classes/@GlobalScope.xml msgid "MIDI stop message. Stop the current sequence." -msgstr "" +msgstr "MIDI Stop-Mitteilung. Stoppt die Wiedergabe der aktuellen Sequenz." #: doc/classes/@GlobalScope.xml msgid "" @@ -4066,6 +4043,9 @@ msgid "" "MIDI system reset message. Reset all receivers in the system to power-up " "status. It should not be sent on power-up itself." msgstr "" +"MIDI System-Reset Mitteilung. Reset aller Empfänger im System in den " +"Hochfahren-Status. Diese Mitteilung sollte nicht zum Starten der Empfänger " +"selbst genutzt werden." #: doc/classes/@GlobalScope.xml msgid "" @@ -4843,7 +4823,7 @@ msgstr "" #: doc/classes/Transform.xml doc/classes/Transform2D.xml #: doc/classes/Vector2.xml doc/classes/Vector3.xml msgid "Math tutorial index" -msgstr "" +msgstr "Mathematik Anleitungsindex" #: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml #: doc/classes/Vector3.xml @@ -4897,6 +4877,8 @@ msgid "" "Returns the center of the [AABB], which is equal to [member position] + " "([member size] / 2)." msgstr "" +"Gibt den Mittelwert von [AABB] zurück, welcher gleich ist wie [member " +"position] + ([member size] / 2)." #: doc/classes/AABB.xml msgid "Gets the position of the 8 endpoints of the [AABB] in space." @@ -5300,22 +5282,30 @@ msgid "Maximum value for the mode enum." msgstr "Maximaler Wert für das Modus-Enum." #: doc/classes/AnimatedSprite.xml -msgid "Sprite node that can use multiple textures for animation." +#, fuzzy +msgid "" +"Sprite node that contains multiple textures as frames to play for animation." msgstr "Sprite-Knoten, der mehrere Texturen für die Animation verwenden kann." #: doc/classes/AnimatedSprite.xml msgid "" -"Animations are created using a [SpriteFrames] resource, which can be " -"configured in the editor via the SpriteFrames panel.\n" -"[b]Note:[/b] You can associate a set of normal maps by creating additional " -"[SpriteFrames] resources with a [code]_normal[/code] suffix. For example, " -"having 2 [SpriteFrames] resources [code]run[/code] and [code]run_normal[/" -"code] will make it so the [code]run[/code] animation uses the normal map." +"[AnimatedSprite] is similar to the [Sprite] node, except it carries multiple " +"textures as animation frames. Animations are created using a [SpriteFrames] " +"resource, which allows you to import image files (or a folder containing " +"said files) to provide the animation frames for the sprite. The " +"[SpriteFrames] resource can be configured in the editor via the SpriteFrames " +"bottom panel.\n" +"[b]Note:[/b] You can associate a set of normal or specular maps by creating " +"additional [SpriteFrames] resources with a [code]_normal[/code] or " +"[code]_specular[/code] suffix. For example, having 3 [SpriteFrames] " +"resources [code]run[/code], [code]run_normal[/code], and [code]run_specular[/" +"code] will make it so the [code]run[/code] animation uses normal and " +"specular maps." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml msgid "2D Sprite animation" -msgstr "" +msgstr "2D Sprite Animation" #: doc/classes/AnimatedSprite.xml doc/classes/Area2D.xml #: doc/classes/AudioStreamPlayer.xml doc/classes/Button.xml @@ -5325,7 +5315,7 @@ msgstr "" #: doc/classes/Particles2D.xml doc/classes/Timer.xml #: doc/classes/VisibilityNotifier2D.xml msgid "2D Dodge The Creeps Demo" -msgstr "" +msgstr "2D „Dodge The Creeps“ Demo" #: doc/classes/AnimatedSprite.xml msgid "" @@ -5342,9 +5332,10 @@ msgstr "" msgid "Stops the current animation (does not reset the frame counter)." msgstr "Hält die aktuelle Animation an (setzt den Bildzähler nicht zurück)." -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml +#: doc/classes/AnimatedSprite.xml +#, fuzzy msgid "" -"The current animation from the [code]frames[/code] resource. If this value " +"The current animation from the [member frames] resource. If this value " "changes, the [code]frame[/code] counter is reset." msgstr "" "Die aktuelle Animation aus der Ressource [code]frames[/code]. Wenn sich " @@ -5370,9 +5361,12 @@ msgstr "Wenn [code]true[/code], wird die Textur vertikal gespiegelt." msgid "The displayed animation frame's index." msgstr "Der Index des angezeigten Animationsrahmens." -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml -msgid "The [SpriteFrames] resource containing the animation(s)." -msgstr "Die [SpriteFrames]-Ressource, welche die Animation(en) enthält." +#: doc/classes/AnimatedSprite.xml +msgid "" +"The [SpriteFrames] resource containing the animation(s). Allows you the " +"option to load, edit, clear, make unique and save the states of the " +"[SpriteFrames] resource." +msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/Sprite.xml #: doc/classes/SpriteBase3D.xml @@ -5418,7 +5412,7 @@ msgstr "" #: doc/classes/AnimatedSprite3D.xml msgid "2D Sprite animation (also applies to 3D)" -msgstr "" +msgstr "2D Sprite Animation (gilt ebenfalls für 3D)" #: doc/classes/AnimatedSprite3D.xml msgid "Returns [code]true[/code] if an animation is currently being played." @@ -5433,6 +5427,18 @@ msgstr "" "Spielt die Animation mit dem Namen [code]anim[/code] ab. Wenn keine " "[code]anim[/code] angegeben ist, wird die aktuelle Animation abgespielt." +#: doc/classes/AnimatedSprite3D.xml +msgid "" +"The current animation from the [code]frames[/code] resource. If this value " +"changes, the [code]frame[/code] counter is reset." +msgstr "" +"Die aktuelle Animation aus der Ressource [code]frames[/code]. Wenn sich " +"dieser Wert ändert, wird der [code]frames[/code]-Zähler zurückgesetzt." + +#: doc/classes/AnimatedSprite3D.xml +msgid "The [SpriteFrames] resource containing the animation(s)." +msgstr "Die [SpriteFrames]-Ressource, welche die Animation(en) enthält." + #: doc/classes/AnimatedTexture.xml msgid "Proxy texture for simple frame-based animations." msgstr "Proxy-Textur für einfache framebasierte Animationen." @@ -6169,11 +6175,11 @@ msgstr "" msgid "No interpolation (nearest value)." msgstr "Keine Interpolation (nächstgelegener Wert)." -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Linear interpolation." msgstr "lineare Interpolation." -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Cubic interpolation." msgstr "Kubische Interpolation." @@ -7109,7 +7115,7 @@ msgstr "Benennt das übergebene Node um." #: doc/classes/AnimationNodeStateMachine.xml msgid "Replaces the node and keeps its transitions unchanged." -msgstr "" +msgstr "Ersetzt den Knotenpunkt und erhält seine Übergänge unverändert." #: doc/classes/AnimationNodeStateMachine.xml msgid "Sets the given node as the graph end point." @@ -7556,11 +7562,15 @@ msgstr "" "[code]newname[/code] um." #: doc/classes/AnimationPlayer.xml +#, fuzzy msgid "" "Seeks the animation to the [code]seconds[/code] point in time (in seconds). " "If [code]update[/code] is [code]true[/code], the animation updates too, " "otherwise it updates at process time. Events between the current frame and " -"[code]seconds[/code] are skipped." +"[code]seconds[/code] are skipped.\n" +"[b]Note:[/b] Seeking to the end of the animation doesn't emit [signal " +"animation_finished]. If you want to skip animation and emit the signal, use " +"[method advance]." msgstr "" "Sucht die Animation bis zum Zeitpunkt [code]Sekunden[/code] (in Sekunden). " "Wenn [code]update[/code] ist [code]true[/code], wird auch die Animation " @@ -7685,6 +7695,10 @@ msgid "" "[b]Note:[/b] The signal is not emitted when the animation is changed via " "[method play] or from [AnimationTree]." msgstr "" +"Wird ausgelöst, wenn eine zurückgestellte Animation abgespielt wird nachdem " +"eine vorherige Animation beendet wurde. Siehe auch [method queue].\n" +"[b]Anmerkung:[/b] Das Signal wird nicht ausgelöst, wenn die Animation mit " +"[method play] oder von [AnimationTree] geändert wird." #: doc/classes/AnimationPlayer.xml msgid "Notifies when an animation finished playing." @@ -7857,6 +7871,9 @@ msgid "" "[i]Deprecated.[/i] Animation player that uses a node graph for blending " "animations. Superseded by [AnimationTree]." msgstr "" +"[i]Veraltet.[/i] Animations-Wiedergabekomponente die einen Knoten-basierten " +"Graphen zur Überblendung von Animationen nutzt. Wurde ersetzt durch " +"[AnimationTree]." #: doc/classes/AnimationTreePlayer.xml msgid "" @@ -7868,6 +7885,15 @@ msgid "" "depending on the graph.\n" "See [AnimationTree] for a more full-featured replacement of this node." msgstr "" +"[i]Veraltet.[/i] Ein knoten-basiertes Graphen-Tool zum Überblenden von " +"mehreren Animationen die an einen [AnimationPlayer] gebunden sind. Das ist " +"besonders hilfreich beim Animieren von Spieler-Charakteren oder anderen " +"Objekten auf Skelett-Basis. Es kann mehrere Animationen nutzen um eine " +"erwünschte Pose zu formen.\n" +"Es nimmt [Animation]s von einem [AnimationPlayer] Knoten und vermischt sie " +"wie benötigt auf dem Graphen.\n" +"Siehe auch [AnimationTree] für einen vollumfänglichen Austausch dieses " +"Knotenpunkts." #: doc/classes/AnimationTreePlayer.xml #, fuzzy @@ -8999,7 +9025,10 @@ msgid "" "[code]0[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "Returns the number of times an element is in the array." msgstr "" @@ -9044,10 +9073,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array for a value and returns its index or [code]-1[/code] if " -"not found. Optionally, the initial search index can be passed." +"not found. Optionally, the initial search index can be passed. Returns " +"[code]-1[/code] if [code]from[/code] is out of bounds." msgstr "" #: doc/classes/Array.xml @@ -9187,11 +9220,15 @@ msgid "" "[code]null[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array in reverse order. Optionally, a start search index can be " "passed. If negative, the start index is considered relative to the end of " -"the array." +"the array. If the adjusted start index is out of bounds, this method " +"searches from the end of the array." msgstr "" #: doc/classes/Array.xml @@ -10331,7 +10368,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -10553,7 +10590,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -13695,17 +13732,17 @@ msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a normal vector in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a 3D position in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml @@ -16027,7 +16064,9 @@ msgstr "" #: doc/classes/CollisionPolygon2D.xml msgid "" "If [code]true[/code], only edges that face up, relative to " -"[CollisionPolygon2D]'s rotation, will collide with other objects." +"[CollisionPolygon2D]'s rotation, will collide with other objects.\n" +"[b]Note:[/b] This property has no effect if this [CollisionPolygon2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionPolygon2D.xml @@ -16124,7 +16163,9 @@ msgstr "" #: doc/classes/CollisionShape2D.xml msgid "" "Sets whether this collision shape should only detect collision on one side " -"(top or bottom)." +"(top or bottom).\n" +"[b]Note:[/b] This property has no effect if this [CollisionShape2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionShape2D.xml @@ -24666,6 +24707,11 @@ msgid "" "same behavior." msgstr "" +#: doc/classes/EditorSpinSlider.xml +#, fuzzy +msgid "If [code]true[/code], the slider is hidden." +msgstr "Falls [code]wahr[/code] wir Audio gerade abgespielt." + #: doc/classes/EditorVCSInterface.xml msgid "" "Version Control System (VCS) interface, which reads and writes to the local " @@ -28284,9 +28330,22 @@ msgid "Gradient's colors returned as a [PoolColorArray]." msgstr "" #: doc/classes/Gradient.xml +msgid "" +"Defines how the colors between points of the gradient are interpolated. See " +"[enum InterpolationMode] for available modes." +msgstr "" + +#: doc/classes/Gradient.xml msgid "Gradient's offsets returned as a [PoolRealArray]." msgstr "" +#: doc/classes/Gradient.xml +msgid "" +"Constant interpolation, color changes abruptly at each point and stays " +"uniform between. This might cause visible aliasing when used for a gradient " +"texture in some cases." +msgstr "" + #: doc/classes/GradientTexture.xml msgid "Gradient-filled texture." msgstr "" @@ -36869,13 +36928,13 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used easing from [enum Tween.EaseType]. If not set, the " "default easing is used from the [SceneTreeTween] that contains this Tweener." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used transition from [enum Tween.TransitionType]. If not " "set, the default transition is used from the [SceneTreeTween] that contains " @@ -37593,6 +37652,15 @@ msgstr "Benennt das übergebene Node um." #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy +msgid "" +"Returns the navigation map [RID] the requested [code]agent[/code] is " +"currently assigned to." +msgstr "" +"Liefert die [Animation] mit dem Schlüssel [code]name[/code] oder [code]null[/" +"code], wenn nicht gefunden." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" "Gibt [code]true[/code] zurück, wenn der Graph das übergebene Node enthält." @@ -37664,6 +37732,12 @@ msgid "Create a new map." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation agents [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns the map cell size." msgstr "Gibt das letzte Node des Graphen zurück." @@ -37694,6 +37768,12 @@ msgid "Returns the navigation path to reach the destination from the origin." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation regions [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns [code]true[/code] if the map is active." msgstr "Gibt [code]true[/code] zurück falls das Array leer ist." @@ -37717,6 +37797,12 @@ msgid "Creates a new region." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]region[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Sets the map for the region." msgstr "Gibt die Größe des Arrays zurück." @@ -38211,19 +38297,59 @@ msgid "Represents the size of the [enum SourceGeometryMode] enum." msgstr "Steht für die Größe von [enum TextureRepeat] enum." #: doc/classes/NavigationMeshGenerator.xml -msgid "This class is responsible for creating and clearing navigation meshes." +msgid "Helper class for creating and clearing navigation meshes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml msgid "" -"Bakes the navigation mesh. This will allow you to use pathfinding with the " -"navigation system." +"This class is responsible for creating and clearing 3D navigation meshes " +"used as [NavigationMesh] resources inside [NavigationMeshInstance]. The " +"[NavigationMeshGenerator] has very limited to no use for 2D as the " +"navigation mesh baking process expects 3D node types and 3D source geometry " +"to parse.\n" +"The entire navigation mesh baking is best done in a separate thread as the " +"voxelization, collision tests and mesh optimization steps involved are very " +"performance and time hungry operations.\n" +"Navigation mesh baking happens in multiple steps and the result depends on " +"3D source geometry and properties of the [NavigationMesh] resource. In the " +"first step, starting from a root node and depending on [NavigationMesh] " +"properties all valid 3D source geometry nodes are collected from the " +"[SceneTree]. Second, all collected nodes are parsed for their relevant 3D " +"geometry data and a combined 3D mesh is build. Due to the many different " +"types of parsable objects, from normal [MeshInstance]s to [CSGShape]s or " +"various [CollisionObject]s, some operations to collect geometry data can " +"trigger [VisualServer] and [PhysicsServer] synchronizations. Server " +"synchronization can have a negative effect on baking time or framerate as it " +"often involves [Mutex] locking for thread security. Many parsable objects " +"and the continuous synchronization with other threaded Servers can increase " +"the baking time significantly. On the other hand only a few but very large " +"and complex objects will take some time to prepare for the Servers which can " +"noticeably stall the next frame render. As a general rule the total amount " +"of parsable objects and their individual size and complexity should be " +"balanced to avoid framerate issues or very long baking times. The combined " +"mesh is then passed to the Recast Navigation Object to test the source " +"geometry for walkable terrain suitable to [NavigationMesh] agent properties " +"by creating a voxel world around the meshes bounding area.\n" +"The finalized navigation mesh is then returned and stored inside the " +"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes." +msgstr "" + +#: doc/classes/NavigationMeshGenerator.xml +msgid "" +"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " +"nodes under the provided [code]root_node[/code] or a specific group of nodes " +"for potential source geometry. The parse behavior can be controlled with the " +"[member NavigationMesh.geometry/parsed_geometry_type] and [member " +"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[NavigationMesh] resource." msgstr "" #: doc/classes/NavigationMeshGenerator.xml #, fuzzy -msgid "Clears the navigation mesh." -msgstr "Enthält die Audio Daten in Bytes." +msgid "" +"Removes all polygons and vertices from the provided [code]nav_mesh[/code] " +"resource." +msgstr "Entfernt die Animation mit dem key [code]name[/code]." #: doc/classes/NavigationMeshInstance.xml msgid "An instance of a [NavigationMesh]." @@ -38243,7 +38369,10 @@ msgid "" "thread is useful because navigation baking is not a cheap operation. When it " "is completed, it automatically sets the new [NavigationMesh]. Please note " "that baking on separate thread may be very slow if geometry is parsed from " -"meshes as async access to each mesh involves heavy synchronization." +"meshes as async access to each mesh involves heavy synchronization. Also, " +"please note that baking on a separate thread is automatically disabled on " +"operating systems that cannot use threads (such as HTML5 with threads " +"disabled)." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -38293,6 +38422,11 @@ msgid "" msgstr "Gibt das AnimationNode mit dem gegebenen Namen zurück." #: doc/classes/NavigationObstacle.xml +#, fuzzy +msgid "Returns the [RID] of this obstacle on the [NavigationServer]." +msgstr "Gibt die Anzahl der Spuren in der Animation zurück." + +#: doc/classes/NavigationObstacle.xml msgid "" "Sets the [Navigation] node used by the obstacle. Useful when you don't want " "to make the obstacle a child of a [Navigation] node." @@ -38329,6 +38463,11 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle2D.xml +#, fuzzy +msgid "Returns the [RID] of this obstacle on the [Navigation2DServer]." +msgstr "Gibt die Anzahl der Spuren in der Animation zurück." + +#: doc/classes/NavigationObstacle2D.xml msgid "" "Sets the [Navigation2D] node used by the obstacle. Useful when you don't " "want to make the obstacle a child of a [Navigation2D] node." @@ -39522,7 +39661,7 @@ msgstr "" #: doc/classes/Node.xml msgid "" "Returns [code]true[/code] if the physics interpolated flag is set for this " -"Node (see [method set_physics_interpolated]).\n" +"Node (see [member physics_interpolation_mode]).\n" "[b]Note:[/b] Interpolation will only be active is both the flag is set " "[b]and[/b] physics interpolation is enabled within the [SceneTree]. This can " "be tested using [method is_physics_interpolated_and_enabled]." @@ -39530,8 +39669,8 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Returns [code]true[/code] if physics interpolation is enabled (see [method " -"set_physics_interpolated]) [b]and[/b] enabled in the [SceneTree].\n" +"Returns [code]true[/code] if physics interpolation is enabled (see [member " +"physics_interpolation_mode]) [b]and[/b] enabled in the [SceneTree].\n" "This is a convenience version of [method is_physics_interpolated] that also " "checks whether physics interpolation is enabled globally.\n" "See [member SceneTree.physics_interpolation] and [member ProjectSettings." @@ -39825,14 +39964,6 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Enables or disables physics interpolation per node, offering a finer grain " -"of control than turning physics interpolation on and off globally.\n" -"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " -"interpolation can sometimes give superior results." -msgstr "" - -#: doc/classes/Node.xml -msgid "" "Enables or disables physics (i.e. fixed framerate) processing. When a node " "is being processed, it will receive a [constant " "NOTIFICATION_PHYSICS_PROCESS] at a fixed (usually 60 FPS, see [member Engine." @@ -39965,6 +40096,15 @@ msgstr "" #: doc/classes/Node.xml msgid "" +"Allows enabling or disabling physics interpolation per node, offering a " +"finer grain of control than turning physics interpolation on and off " +"globally.\n" +"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " +"interpolation can sometimes give superior results." +msgstr "" + +#: doc/classes/Node.xml +msgid "" "The node's priority in the execution order of the enabled processing " "callbacks (i.e. [constant NOTIFICATION_PROCESS], [constant " "NOTIFICATION_PHYSICS_PROCESS] and their internal counterparts). Nodes whose " @@ -40126,6 +40266,24 @@ msgid "Continue to process regardless of the [SceneTree] pause state." msgstr "" #: doc/classes/Node.xml +msgid "" +"Inherits physics interpolation mode from the node's parent. For the root " +"node, it is equivalent to [constant PHYSICS_INTERPOLATION_MODE_ON]. Default." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn off physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn on physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml msgid "Duplicate the node's signals." msgstr "" @@ -41369,10 +41527,13 @@ msgid "Returns the tooltip of the item at index [code]idx[/code]." msgstr "Liefert die Position des Punktes bei Index [code]Punkt[/code]." #: doc/classes/OptionButton.xml +#, fuzzy msgid "" -"Returns the ID of the selected item, or [code]0[/code] if no item is " +"Returns the ID of the selected item, or [code]-1[/code] if no item is " "selected." msgstr "" +"Liefert die [Animation] mit dem Schlüssel [code]name[/code] oder [code]null[/" +"code], wenn nicht gefunden." #: doc/classes/OptionButton.xml msgid "" @@ -41392,7 +41553,8 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" "Selects an item by index and makes it the current item. This will work even " -"if the item is disabled." +"if the item is disabled.\n" +"Passing [code]-1[/code] as the index deselects any currently selected item." msgstr "" #: doc/classes/OptionButton.xml @@ -46791,6 +46953,17 @@ msgid "" "should always be preferred." msgstr "" +#: doc/classes/PoolByteArray.xml doc/classes/PoolColorArray.xml +#: doc/classes/PoolIntArray.xml doc/classes/PoolRealArray.xml +#: doc/classes/PoolStringArray.xml doc/classes/PoolVector2Array.xml +#: doc/classes/PoolVector3Array.xml +#, fuzzy +msgid "" +"Returns [code]true[/code] if the array contains the given value.\n" +"[b]Note:[/b] This is equivalent to using the [code]in[/code] operator." +msgstr "" +"Liefert [code]true[/code] wenn die Länge der Zeichenkette [code]0[/code] ist." + #: doc/classes/PoolByteArray.xml msgid "" "Returns a hexadecimal representation of this array as a [String].\n" @@ -47659,6 +47832,11 @@ msgid "[Font] used for the menu items." msgstr "" #: doc/classes/PopupMenu.xml +#, fuzzy +msgid "[Font] used for the labeled separator." +msgstr "Kein Hinweis auf die bearbeitete Eigenschaft." + +#: doc/classes/PopupMenu.xml msgid "[Texture] icon for the checked checkbox items." msgstr "" @@ -51117,19 +51295,6 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used easing from [enum Tween.EaseType]. If not set, the " -"default easing is used from the [Tween] that contains this Tweener." -msgstr "" - -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used transition from [enum Tween.TransitionType]. If not " -"set, the default transition is used from the [Tween] that contains this " -"Tweener." -msgstr "" - #: doc/classes/ProximityGroup.xml msgid "General-purpose 3D proximity detection node." msgstr "" @@ -56014,8 +56179,15 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape touches another. If there are " -"no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape touches another.\n" +"If there are no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the shape to check collisions with " "([code]with_shape[/code]), and the transformation matrix of that shape " @@ -56036,8 +56208,16 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape would touch another, if a " -"given movement was applied. If there are no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape would touch another, " +"if a given movement was applied.\n" +"If there would be no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the movement to test on this shape " "([code]local_motion[/code]), the shape to check collisions with " @@ -76160,10 +76340,12 @@ msgstr "" #: modules/webxr/doc_classes/WebXRInterface.xml msgid "Target ray from touch screen, mouse or other tactile input device." msgstr "" +"Ziel-Strahl für einen Touch-Screen, eine Computer-Maus oder ein taktisches " +"Eingabegerät." #: doc/classes/WindowDialog.xml msgid "Base class for window dialogs." -msgstr "" +msgstr "Basis-Klasse für Fenster-Dialoge." #: doc/classes/WindowDialog.xml msgid "" @@ -76204,6 +76386,8 @@ msgid "" "The thickness of the border that can be dragged when scaling the window (if " "[member resizable] is enabled)." msgstr "" +"Die Breite der Kante, die zum Anpassen der Fenstergröße genutzt werden kann " +"(wenn [member resizable] aktiviert ist)." #: doc/classes/WindowDialog.xml msgid "The vertical offset of the title text." @@ -76234,7 +76418,7 @@ msgstr "" #: doc/classes/World.xml msgid "Class that has everything pertaining to a world." -msgstr "" +msgstr "Eine Klasse die alles für eine Welt mitbringt." #: doc/classes/World.xml msgid "" @@ -76248,6 +76432,8 @@ msgid "" "Direct access to the world's physics 3D space state. Used for querying " "current and potential collisions." msgstr "" +"Direkter Zugang zu dem physischen Zustand des 3D Raums der Welt. Wird " +"genutzt um aktuelle oder zukünftige Kollisionen abzufragen." #: doc/classes/World.xml msgid "The World's [Environment]." @@ -76258,18 +76444,20 @@ msgid "" "The World's fallback_environment will be used if the World's [Environment] " "fails or is missing." msgstr "" +"Das fallback_environment der Welt wird genutzt, sollte das [Environment] der " +"Welt nicht existieren oder nicht geladen werden können." #: doc/classes/World.xml msgid "The World's visual scenario." -msgstr "" +msgstr "Das visuelle Szenario der Welt." #: doc/classes/World.xml msgid "The World's physics space." -msgstr "" +msgstr "The physikalische Raum der Welt." #: doc/classes/World2D.xml msgid "Class that has everything pertaining to a 2D world." -msgstr "" +msgstr "Eine Klasse die alles für eine 2D Welt mitbringt." #: doc/classes/World2D.xml msgid "" @@ -76277,12 +76465,17 @@ msgid "" "visual scenario and a sound space. 2D nodes register their resources into " "the current 2D world." msgstr "" +"Eine Klasse die alles für eine 2D Welt mitbringt. Einen physikalischen Raum, " +"ein visuelles Szenario und einen Bereich für Sounds. 2D Knotenpunkte " +"registrieren ihre Resourcen in die aktuelle 2D Welt." #: doc/classes/World2D.xml msgid "" "The [RID] of this world's canvas resource. Used by the [VisualServer] for 2D " "drawing." msgstr "" +"Die [RID] der Canvas Resource dieser Welt. Wird von [VisualServer] für 2D-" +"Zeichnungen genutzt." #: doc/classes/World2D.xml msgid "" @@ -76357,6 +76550,8 @@ msgid "" "Low-level class for creating parsers for [url=https://en.wikipedia.org/wiki/" "XML]XML[/url] files." msgstr "" +"Niedrig-levelige Klasse um Parser für [url=https://en.wikipedia.org/wiki/" +"XML]XML[/url]-Dateien zu erstellen." #: doc/classes/XMLParser.xml msgid "" @@ -76364,6 +76559,9 @@ msgid "" "flexible standard, this interface is low-level so it can be applied to any " "possible schema." msgstr "" +"Diese Klasse kann als Grundlage für eigene XML Parser genutzt werden. Da XML " +"ein sehr flexibler Standard ist, kann dieses niedrig-levelige Interface an " +"jedes beliebige Schema angepasst werden." #: doc/classes/XMLParser.xml msgid "Gets the amount of attributes in the current element." @@ -76374,16 +76572,22 @@ msgid "" "Gets the name of the attribute specified by the index in [code]idx[/code] " "argument." msgstr "" +"Gibt den Namen des Attributes zurück, dass durch den Index in dem [code]idx[/" +"code] Argument spezifiziert wird." #: doc/classes/XMLParser.xml msgid "" "Gets the value of the attribute specified by the index in [code]idx[/code] " "argument." msgstr "" +"Gibt den Wert eines Attributes zurück, das durch den Index in dem [code]idx[/" +"code] Argument spezifiziert wird." #: doc/classes/XMLParser.xml msgid "Gets the current line in the parsed file (currently not implemented)." msgstr "" +"Gibt die aktuelle Zeile in der geöffneten Datei zurück (aktuell nicht " +"implementiert)." #: doc/classes/XMLParser.xml msgid "" @@ -76396,12 +76600,17 @@ msgid "" "Gets the value of a certain attribute of the current element by name. This " "will return an empty [String] if the attribute is not found." msgstr "" +"Gibt den Wert eines bestimmten Attributes innerhalb des aktuellen Elementes " +"zurück, dass den gesuchten Namen besitzt. Der Rückgabewert ist ein leerer " +"[String], sollte das Attribut nicht gefunden werden." #: doc/classes/XMLParser.xml msgid "" "Gets the contents of a text node. This will raise an error in any other type " "of node." msgstr "" +"Gibt den Inhalt eines Text-Knotenpunkts zurück. Sollte der Knotenpunkt ein " +"anderer Typ sein, so wird ein Fehler geworfen." #: doc/classes/XMLParser.xml msgid "" @@ -76420,10 +76629,12 @@ msgstr "" msgid "" "Gets the type of the current node. Compare with [enum NodeType] constants." msgstr "" +"Gibt den Typ des aktuellen Knotenpunkts zurück. Der Typ kann mit den [enum " +"NodeType] Konstanten verglichen werden." #: doc/classes/XMLParser.xml msgid "Check whether the current element has a certain attribute." -msgstr "" +msgstr "Überprüft, ob das aktuelle Element einen bestimmtes Attribut enthält." #: doc/classes/XMLParser.xml msgid "" @@ -76433,15 +76644,19 @@ msgstr "" #: doc/classes/XMLParser.xml msgid "Opens an XML file for parsing. This returns an error code." -msgstr "" +msgstr "Öffnet eine XML-Datei zum Parsen. Der Rückgabewert ist ein Fehlercode." #: doc/classes/XMLParser.xml msgid "Opens an XML raw buffer for parsing. This returns an error code." msgstr "" +"Öffnet einen unbearbeiteten Buffer zum Parsen. Der Rückgabewert ist ein " +"Fehlercode." #: doc/classes/XMLParser.xml msgid "Reads the next node of the file. This returns an error code." msgstr "" +"Liest den Text-Knotenpunkt der Datei aus. Der Reückgabewert ist ein " +"Fehlercode." #: doc/classes/XMLParser.xml msgid "" @@ -76458,10 +76673,12 @@ msgstr "" #: doc/classes/XMLParser.xml msgid "There's no node (no file or buffer opened)." msgstr "" +"Es ist kein Knotenpunkt verfügbar (da keine Datei oder kein Buffer geöffnet " +"wurde)." #: doc/classes/XMLParser.xml msgid "Element (tag)." -msgstr "" +msgstr "Element (Tag)." #: doc/classes/XMLParser.xml msgid "End of element." @@ -76469,11 +76686,11 @@ msgstr "Ende des Elements." #: doc/classes/XMLParser.xml msgid "Text node." -msgstr "" +msgstr "Text-Knotenpunkt." #: doc/classes/XMLParser.xml msgid "Comment node." -msgstr "" +msgstr "Kommentar-Knotenpunkt." #: doc/classes/XMLParser.xml msgid "CDATA content." @@ -76485,7 +76702,7 @@ msgstr "unbekanntes Node." #: doc/classes/YSort.xml msgid "Sort all child nodes based on their Y positions." -msgstr "" +msgstr "Sotiert alle Kind-Knotenpunkte basierend auf ihrer Y-Position." #: doc/classes/YSort.xml msgid "" diff --git a/doc/translations/el.po b/doc/translations/el.po index ec174486ec..11cf5ad2c9 100644 --- a/doc/translations/el.po +++ b/doc/translations/el.po @@ -942,11 +942,12 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Random range, any floating point value between [code]from[/code] and " -"[code]to[/code].\n" +"Returns a random floating point value between [code]from[/code] and " +"[code]to[/code] (both endpoints inclusive).\n" "[codeblock]\n" "prints(rand_range(0, 1), rand_range(0, 1)) # Prints e.g. 0.135591 0.405263\n" -"[/codeblock]" +"[/codeblock]\n" +"[b]Note:[/b] This is equivalent to [code]randf() * (to - from) + from[/code]." msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml @@ -990,37 +991,36 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Returns an array with the given range. Range can be 1 argument [code]N[/" -"code] (0 to [code]N[/code] - 1), two arguments ([code]initial[/code], " -"[code]final - 1[/code]) or three arguments ([code]initial[/code], " -"[code]final - 1[/code], [code]increment[/code]). Returns an empty array if " -"the range isn't valid (e.g. [code]range(2, 5, -1)[/code] or [code]range(5, " -"5, 1)[/code]).\n" -"Returns an array with the given range. [code]range()[/code] can have 1 " -"argument N ([code]0[/code] to [code]N - 1[/code]), two arguments " -"([code]initial[/code], [code]final - 1[/code]) or three arguments " -"([code]initial[/code], [code]final - 1[/code], [code]increment[/code]). " -"[code]increment[/code] can be negative. If [code]increment[/code] is " -"negative, [code]final - 1[/code] will become [code]final + 1[/code]. Also, " -"the initial value must be greater than the final value for the loop to run.\n" -"[codeblock]\n" -"print(range(4))\n" -"print(range(2, 5))\n" -"print(range(0, 6, 2))\n" -"[/codeblock]\n" -"Output:\n" +"Returns an array with the given range. [method range] can be called in three " +"ways:\n" +"[code]range(n: int)[/code]: Starts from 0, increases by steps of 1, and " +"stops [i]before[/i] [code]n[/code]. The argument [code]n[/code] is " +"[b]exclusive[/b].\n" +"[code]range(b: int, n: int)[/code]: Starts from [code]b[/code], increases by " +"steps of 1, and stops [i]before[/i] [code]n[/code]. The arguments [code]b[/" +"code] and [code]n[/code] are [b]inclusive[/b] and [b]exclusive[/b], " +"respectively.\n" +"[code]range(b: int, n: int, s: int)[/code]: Starts from [code]b[/code], " +"increases/decreases by steps of [code]s[/code], and stops [i]before[/i] " +"[code]n[/code]. The arguments [code]b[/code] and [code]n[/code] are " +"[b]inclusive[/b] and [b]exclusive[/b], respectively. The argument [code]s[/" +"code] [b]can[/b] be negative, but not [code]0[/code]. If [code]s[/code] is " +"[code]0[/code], an error message is printed.\n" +"[method range] converts all arguments to [int] before processing.\n" +"[b]Note:[/b] Returns an empty array if no value meets the value constraint " +"(e.g. [code]range(2, 5, -1)[/code] or [code]range(5, 5, 1)[/code]).\n" +"Examples:\n" "[codeblock]\n" -"[0, 1, 2, 3]\n" -"[2, 3, 4]\n" -"[0, 2, 4]\n" +"print(range(4)) # Prints [0, 1, 2, 3]\n" +"print(range(2, 5)) # Prints [2, 3, 4]\n" +"print(range(0, 6, 2)) # Prints [0, 2, 4]\n" +"print(range(4, 1, -1)) # Prints [4, 3, 2]\n" "[/codeblock]\n" "To iterate over an [Array] backwards, use:\n" "[codeblock]\n" "var array = [3, 6, 9]\n" -"var i := array.size() - 1\n" -"while i >= 0:\n" -" print(array[i])\n" -" i -= 1\n" +"for i in range(array.size(), 0, -1):\n" +" print(array[i - 1])\n" "[/codeblock]\n" "Output:\n" "[codeblock]\n" @@ -4115,17 +4115,24 @@ msgid "Maximum value for the mode enum." msgstr "" #: doc/classes/AnimatedSprite.xml -msgid "Sprite node that can use multiple textures for animation." +msgid "" +"Sprite node that contains multiple textures as frames to play for animation." msgstr "" #: doc/classes/AnimatedSprite.xml msgid "" -"Animations are created using a [SpriteFrames] resource, which can be " -"configured in the editor via the SpriteFrames panel.\n" -"[b]Note:[/b] You can associate a set of normal maps by creating additional " -"[SpriteFrames] resources with a [code]_normal[/code] suffix. For example, " -"having 2 [SpriteFrames] resources [code]run[/code] and [code]run_normal[/" -"code] will make it so the [code]run[/code] animation uses the normal map." +"[AnimatedSprite] is similar to the [Sprite] node, except it carries multiple " +"textures as animation frames. Animations are created using a [SpriteFrames] " +"resource, which allows you to import image files (or a folder containing " +"said files) to provide the animation frames for the sprite. The " +"[SpriteFrames] resource can be configured in the editor via the SpriteFrames " +"bottom panel.\n" +"[b]Note:[/b] You can associate a set of normal or specular maps by creating " +"additional [SpriteFrames] resources with a [code]_normal[/code] or " +"[code]_specular[/code] suffix. For example, having 3 [SpriteFrames] " +"resources [code]run[/code], [code]run_normal[/code], and [code]run_specular[/" +"code] will make it so the [code]run[/code] animation uses normal and " +"specular maps." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml @@ -4153,9 +4160,9 @@ msgstr "" msgid "Stops the current animation (does not reset the frame counter)." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml +#: doc/classes/AnimatedSprite.xml msgid "" -"The current animation from the [code]frames[/code] resource. If this value " +"The current animation from the [member frames] resource. If this value " "changes, the [code]frame[/code] counter is reset." msgstr "" @@ -4179,8 +4186,11 @@ msgstr "" msgid "The displayed animation frame's index." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml -msgid "The [SpriteFrames] resource containing the animation(s)." +#: doc/classes/AnimatedSprite.xml +msgid "" +"The [SpriteFrames] resource containing the animation(s). Allows you the " +"option to load, edit, clear, make unique and save the states of the " +"[SpriteFrames] resource." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/Sprite.xml @@ -4232,6 +4242,16 @@ msgid "" "provided, the current animation is played." msgstr "" +#: doc/classes/AnimatedSprite3D.xml +msgid "" +"The current animation from the [code]frames[/code] resource. If this value " +"changes, the [code]frame[/code] counter is reset." +msgstr "" + +#: doc/classes/AnimatedSprite3D.xml +msgid "The [SpriteFrames] resource containing the animation(s)." +msgstr "" + #: doc/classes/AnimatedTexture.xml msgid "Proxy texture for simple frame-based animations." msgstr "" @@ -4748,11 +4768,11 @@ msgstr "" msgid "No interpolation (nearest value)." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Linear interpolation." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Cubic interpolation." msgstr "" @@ -5788,7 +5808,10 @@ msgid "" "Seeks the animation to the [code]seconds[/code] point in time (in seconds). " "If [code]update[/code] is [code]true[/code], the animation updates too, " "otherwise it updates at process time. Events between the current frame and " -"[code]seconds[/code] are skipped." +"[code]seconds[/code] are skipped.\n" +"[b]Note:[/b] Seeking to the end of the animation doesn't emit [signal " +"animation_finished]. If you want to skip animation and emit the signal, use " +"[method advance]." msgstr "" #: doc/classes/AnimationPlayer.xml @@ -6978,7 +7001,10 @@ msgid "" "[code]0[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "Returns the number of times an element is in the array." msgstr "" @@ -7023,10 +7049,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array for a value and returns its index or [code]-1[/code] if " -"not found. Optionally, the initial search index can be passed." +"not found. Optionally, the initial search index can be passed. Returns " +"[code]-1[/code] if [code]from[/code] is out of bounds." msgstr "" #: doc/classes/Array.xml @@ -7164,11 +7194,15 @@ msgid "" "[code]null[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array in reverse order. Optionally, a start search index can be " "passed. If negative, the start index is considered relative to the end of " -"the array." +"the array. If the adjusted start index is out of bounds, this method " +"searches from the end of the array." msgstr "" #: doc/classes/Array.xml @@ -8303,7 +8337,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -8525,7 +8559,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -11639,17 +11673,17 @@ msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a normal vector in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a 3D position in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml @@ -13902,7 +13936,9 @@ msgstr "" #: doc/classes/CollisionPolygon2D.xml msgid "" "If [code]true[/code], only edges that face up, relative to " -"[CollisionPolygon2D]'s rotation, will collide with other objects." +"[CollisionPolygon2D]'s rotation, will collide with other objects.\n" +"[b]Note:[/b] This property has no effect if this [CollisionPolygon2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionPolygon2D.xml @@ -13998,7 +14034,9 @@ msgstr "" #: doc/classes/CollisionShape2D.xml msgid "" "Sets whether this collision shape should only detect collision on one side " -"(top or bottom)." +"(top or bottom).\n" +"[b]Note:[/b] This property has no effect if this [CollisionShape2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionShape2D.xml @@ -22414,6 +22452,11 @@ msgid "" "same behavior." msgstr "" +#: doc/classes/EditorSpinSlider.xml +#, fuzzy +msgid "If [code]true[/code], the slider is hidden." +msgstr "ΕπιστÏÎφει το συνημίτονο της παÏαμÎÏ„Ïου." + #: doc/classes/EditorVCSInterface.xml msgid "" "Version Control System (VCS) interface, which reads and writes to the local " @@ -26001,9 +26044,22 @@ msgid "Gradient's colors returned as a [PoolColorArray]." msgstr "" #: doc/classes/Gradient.xml +msgid "" +"Defines how the colors between points of the gradient are interpolated. See " +"[enum InterpolationMode] for available modes." +msgstr "" + +#: doc/classes/Gradient.xml msgid "Gradient's offsets returned as a [PoolRealArray]." msgstr "" +#: doc/classes/Gradient.xml +msgid "" +"Constant interpolation, color changes abruptly at each point and stays " +"uniform between. This might cause visible aliasing when used for a gradient " +"texture in some cases." +msgstr "" + #: doc/classes/GradientTexture.xml msgid "Gradient-filled texture." msgstr "" @@ -34533,13 +34589,13 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used easing from [enum Tween.EaseType]. If not set, the " "default easing is used from the [SceneTreeTween] that contains this Tweener." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used transition from [enum Tween.TransitionType]. If not " "set, the default transition is used from the [SceneTreeTween] that contains " @@ -35245,6 +35301,12 @@ msgid "Creates the agent." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]agent[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" @@ -35314,6 +35376,12 @@ msgid "Create a new map." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation agents [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns the map cell size." msgstr "ΕπιστÏÎφει το τόξο ημιτόνου της παÏαμÎÏ„Ïου." @@ -35341,6 +35409,12 @@ msgid "Returns the navigation path to reach the destination from the origin." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation regions [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns [code]true[/code] if the map is active." msgstr "ΕπιστÏÎφει το συνημίτονο της παÏαμÎÏ„Ïου." @@ -35364,6 +35438,12 @@ msgid "Creates a new region." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]region[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Sets the map for the region." msgstr "ΕπιστÏÎφει το ημίτονο της παÏαμÎÏ„Ïου." @@ -35842,19 +35922,60 @@ msgid "Represents the size of the [enum SourceGeometryMode] enum." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "This class is responsible for creating and clearing navigation meshes." +msgid "Helper class for creating and clearing navigation meshes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml msgid "" -"Bakes the navigation mesh. This will allow you to use pathfinding with the " -"navigation system." +"This class is responsible for creating and clearing 3D navigation meshes " +"used as [NavigationMesh] resources inside [NavigationMeshInstance]. The " +"[NavigationMeshGenerator] has very limited to no use for 2D as the " +"navigation mesh baking process expects 3D node types and 3D source geometry " +"to parse.\n" +"The entire navigation mesh baking is best done in a separate thread as the " +"voxelization, collision tests and mesh optimization steps involved are very " +"performance and time hungry operations.\n" +"Navigation mesh baking happens in multiple steps and the result depends on " +"3D source geometry and properties of the [NavigationMesh] resource. In the " +"first step, starting from a root node and depending on [NavigationMesh] " +"properties all valid 3D source geometry nodes are collected from the " +"[SceneTree]. Second, all collected nodes are parsed for their relevant 3D " +"geometry data and a combined 3D mesh is build. Due to the many different " +"types of parsable objects, from normal [MeshInstance]s to [CSGShape]s or " +"various [CollisionObject]s, some operations to collect geometry data can " +"trigger [VisualServer] and [PhysicsServer] synchronizations. Server " +"synchronization can have a negative effect on baking time or framerate as it " +"often involves [Mutex] locking for thread security. Many parsable objects " +"and the continuous synchronization with other threaded Servers can increase " +"the baking time significantly. On the other hand only a few but very large " +"and complex objects will take some time to prepare for the Servers which can " +"noticeably stall the next frame render. As a general rule the total amount " +"of parsable objects and their individual size and complexity should be " +"balanced to avoid framerate issues or very long baking times. The combined " +"mesh is then passed to the Recast Navigation Object to test the source " +"geometry for walkable terrain suitable to [NavigationMesh] agent properties " +"by creating a voxel world around the meshes bounding area.\n" +"The finalized navigation mesh is then returned and stored inside the " +"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "Clears the navigation mesh." +msgid "" +"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " +"nodes under the provided [code]root_node[/code] or a specific group of nodes " +"for potential source geometry. The parse behavior can be controlled with the " +"[member NavigationMesh.geometry/parsed_geometry_type] and [member " +"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[NavigationMesh] resource." msgstr "" +#: doc/classes/NavigationMeshGenerator.xml +#, fuzzy +msgid "" +"Removes all polygons and vertices from the provided [code]nav_mesh[/code] " +"resource." +msgstr "ΕπιστÏÎφει το ημίτονο της παÏαμÎÏ„Ïου." + #: doc/classes/NavigationMeshInstance.xml msgid "An instance of a [NavigationMesh]." msgstr "" @@ -35873,7 +35994,10 @@ msgid "" "thread is useful because navigation baking is not a cheap operation. When it " "is completed, it automatically sets the new [NavigationMesh]. Please note " "that baking on separate thread may be very slow if geometry is parsed from " -"meshes as async access to each mesh involves heavy synchronization." +"meshes as async access to each mesh involves heavy synchronization. Also, " +"please note that baking on a separate thread is automatically disabled on " +"operating systems that cannot use threads (such as HTML5 with threads " +"disabled)." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -35919,6 +36043,11 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle.xml +#, fuzzy +msgid "Returns the [RID] of this obstacle on the [NavigationServer]." +msgstr "ΕπιστÏÎφει το ημίτονο της παÏαμÎÏ„Ïου." + +#: doc/classes/NavigationObstacle.xml msgid "" "Sets the [Navigation] node used by the obstacle. Useful when you don't want " "to make the obstacle a child of a [Navigation] node." @@ -35955,6 +36084,11 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle2D.xml +#, fuzzy +msgid "Returns the [RID] of this obstacle on the [Navigation2DServer]." +msgstr "ΕπιστÏÎφει το ημίτονο της παÏαμÎÏ„Ïου." + +#: doc/classes/NavigationObstacle2D.xml msgid "" "Sets the [Navigation2D] node used by the obstacle. Useful when you don't " "want to make the obstacle a child of a [Navigation2D] node." @@ -37143,7 +37277,7 @@ msgstr "" #: doc/classes/Node.xml msgid "" "Returns [code]true[/code] if the physics interpolated flag is set for this " -"Node (see [method set_physics_interpolated]).\n" +"Node (see [member physics_interpolation_mode]).\n" "[b]Note:[/b] Interpolation will only be active is both the flag is set " "[b]and[/b] physics interpolation is enabled within the [SceneTree]. This can " "be tested using [method is_physics_interpolated_and_enabled]." @@ -37151,8 +37285,8 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Returns [code]true[/code] if physics interpolation is enabled (see [method " -"set_physics_interpolated]) [b]and[/b] enabled in the [SceneTree].\n" +"Returns [code]true[/code] if physics interpolation is enabled (see [member " +"physics_interpolation_mode]) [b]and[/b] enabled in the [SceneTree].\n" "This is a convenience version of [method is_physics_interpolated] that also " "checks whether physics interpolation is enabled globally.\n" "See [member SceneTree.physics_interpolation] and [member ProjectSettings." @@ -37446,14 +37580,6 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Enables or disables physics interpolation per node, offering a finer grain " -"of control than turning physics interpolation on and off globally.\n" -"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " -"interpolation can sometimes give superior results." -msgstr "" - -#: doc/classes/Node.xml -msgid "" "Enables or disables physics (i.e. fixed framerate) processing. When a node " "is being processed, it will receive a [constant " "NOTIFICATION_PHYSICS_PROCESS] at a fixed (usually 60 FPS, see [member Engine." @@ -37586,6 +37712,15 @@ msgstr "" #: doc/classes/Node.xml msgid "" +"Allows enabling or disabling physics interpolation per node, offering a " +"finer grain of control than turning physics interpolation on and off " +"globally.\n" +"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " +"interpolation can sometimes give superior results." +msgstr "" + +#: doc/classes/Node.xml +msgid "" "The node's priority in the execution order of the enabled processing " "callbacks (i.e. [constant NOTIFICATION_PROCESS], [constant " "NOTIFICATION_PHYSICS_PROCESS] and their internal counterparts). Nodes whose " @@ -37747,6 +37882,24 @@ msgid "Continue to process regardless of the [SceneTree] pause state." msgstr "" #: doc/classes/Node.xml +msgid "" +"Inherits physics interpolation mode from the node's parent. For the root " +"node, it is equivalent to [constant PHYSICS_INTERPOLATION_MODE_ON]. Default." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn off physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn on physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml msgid "Duplicate the node's signals." msgstr "" @@ -38988,7 +39141,7 @@ msgstr "ΕπιστÏÎφει το ημίτονο της παÏαμÎÏ„Ïου." #: doc/classes/OptionButton.xml msgid "" -"Returns the ID of the selected item, or [code]0[/code] if no item is " +"Returns the ID of the selected item, or [code]-1[/code] if no item is " "selected." msgstr "" @@ -39010,7 +39163,8 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" "Selects an item by index and makes it the current item. This will work even " -"if the item is disabled." +"if the item is disabled.\n" +"Passing [code]-1[/code] as the index deselects any currently selected item." msgstr "" #: doc/classes/OptionButton.xml @@ -44350,6 +44504,15 @@ msgid "" "should always be preferred." msgstr "" +#: doc/classes/PoolByteArray.xml doc/classes/PoolColorArray.xml +#: doc/classes/PoolIntArray.xml doc/classes/PoolRealArray.xml +#: doc/classes/PoolStringArray.xml doc/classes/PoolVector2Array.xml +#: doc/classes/PoolVector3Array.xml +msgid "" +"Returns [code]true[/code] if the array contains the given value.\n" +"[b]Note:[/b] This is equivalent to using the [code]in[/code] operator." +msgstr "" + #: doc/classes/PoolByteArray.xml msgid "" "Returns a hexadecimal representation of this array as a [String].\n" @@ -45144,6 +45307,10 @@ msgid "[Font] used for the menu items." msgstr "" #: doc/classes/PopupMenu.xml +msgid "[Font] used for the labeled separator." +msgstr "" + +#: doc/classes/PopupMenu.xml msgid "[Texture] icon for the checked checkbox items." msgstr "" @@ -48590,19 +48757,6 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used easing from [enum Tween.EaseType]. If not set, the " -"default easing is used from the [Tween] that contains this Tweener." -msgstr "" - -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used transition from [enum Tween.TransitionType]. If not " -"set, the default transition is used from the [Tween] that contains this " -"Tweener." -msgstr "" - #: doc/classes/ProximityGroup.xml msgid "General-purpose 3D proximity detection node." msgstr "" @@ -53434,8 +53588,15 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape touches another. If there are " -"no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape touches another.\n" +"If there are no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the shape to check collisions with " "([code]with_shape[/code]), and the transformation matrix of that shape " @@ -53456,8 +53617,16 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape would touch another, if a " -"given movement was applied. If there are no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape would touch another, " +"if a given movement was applied.\n" +"If there would be no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the movement to test on this shape " "([code]local_motion[/code]), the shape to check collisions with " diff --git a/doc/translations/es.po b/doc/translations/es.po index caef4dfcef..6980dbaa70 100644 --- a/doc/translations/es.po +++ b/doc/translations/es.po @@ -1517,12 +1517,14 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml +#, fuzzy msgid "" -"Random range, any floating point value between [code]from[/code] and " -"[code]to[/code].\n" +"Returns a random floating point value between [code]from[/code] and " +"[code]to[/code] (both endpoints inclusive).\n" "[codeblock]\n" "prints(rand_range(0, 1), rand_range(0, 1)) # Prints e.g. 0.135591 0.405263\n" -"[/codeblock]" +"[/codeblock]\n" +"[b]Note:[/b] This is equivalent to [code]randf() * (to - from) + from[/code]." msgstr "" "Rango aleatorio de cualquier numero real entre [code]from[/code] y [code]to[/" "code].\n" @@ -1595,37 +1597,36 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Returns an array with the given range. Range can be 1 argument [code]N[/" -"code] (0 to [code]N[/code] - 1), two arguments ([code]initial[/code], " -"[code]final - 1[/code]) or three arguments ([code]initial[/code], " -"[code]final - 1[/code], [code]increment[/code]). Returns an empty array if " -"the range isn't valid (e.g. [code]range(2, 5, -1)[/code] or [code]range(5, " -"5, 1)[/code]).\n" -"Returns an array with the given range. [code]range()[/code] can have 1 " -"argument N ([code]0[/code] to [code]N - 1[/code]), two arguments " -"([code]initial[/code], [code]final - 1[/code]) or three arguments " -"([code]initial[/code], [code]final - 1[/code], [code]increment[/code]). " -"[code]increment[/code] can be negative. If [code]increment[/code] is " -"negative, [code]final - 1[/code] will become [code]final + 1[/code]. Also, " -"the initial value must be greater than the final value for the loop to run.\n" -"[codeblock]\n" -"print(range(4))\n" -"print(range(2, 5))\n" -"print(range(0, 6, 2))\n" -"[/codeblock]\n" -"Output:\n" +"Returns an array with the given range. [method range] can be called in three " +"ways:\n" +"[code]range(n: int)[/code]: Starts from 0, increases by steps of 1, and " +"stops [i]before[/i] [code]n[/code]. The argument [code]n[/code] is " +"[b]exclusive[/b].\n" +"[code]range(b: int, n: int)[/code]: Starts from [code]b[/code], increases by " +"steps of 1, and stops [i]before[/i] [code]n[/code]. The arguments [code]b[/" +"code] and [code]n[/code] are [b]inclusive[/b] and [b]exclusive[/b], " +"respectively.\n" +"[code]range(b: int, n: int, s: int)[/code]: Starts from [code]b[/code], " +"increases/decreases by steps of [code]s[/code], and stops [i]before[/i] " +"[code]n[/code]. The arguments [code]b[/code] and [code]n[/code] are " +"[b]inclusive[/b] and [b]exclusive[/b], respectively. The argument [code]s[/" +"code] [b]can[/b] be negative, but not [code]0[/code]. If [code]s[/code] is " +"[code]0[/code], an error message is printed.\n" +"[method range] converts all arguments to [int] before processing.\n" +"[b]Note:[/b] Returns an empty array if no value meets the value constraint " +"(e.g. [code]range(2, 5, -1)[/code] or [code]range(5, 5, 1)[/code]).\n" +"Examples:\n" "[codeblock]\n" -"[0, 1, 2, 3]\n" -"[2, 3, 4]\n" -"[0, 2, 4]\n" +"print(range(4)) # Prints [0, 1, 2, 3]\n" +"print(range(2, 5)) # Prints [2, 3, 4]\n" +"print(range(0, 6, 2)) # Prints [0, 2, 4]\n" +"print(range(4, 1, -1)) # Prints [4, 3, 2]\n" "[/codeblock]\n" "To iterate over an [Array] backwards, use:\n" "[codeblock]\n" "var array = [3, 6, 9]\n" -"var i := array.size() - 1\n" -"while i >= 0:\n" -" print(array[i])\n" -" i -= 1\n" +"for i in range(array.size(), 0, -1):\n" +" print(array[i - 1])\n" "[/codeblock]\n" "Output:\n" "[codeblock]\n" @@ -1634,40 +1635,6 @@ msgid "" "3\n" "[/codeblock]" msgstr "" -"Devuelve una formación con el rango dado. El método [code]range()[/code] " -"puede tener un argumento [code]N[/code] (0 a [code]N[/code] - 1), dos " -"argumentos ([code]initial[/code], [code]final - 1[/code]) o tres argumentos " -"([code]initial[/code], [code]final - 1[/code], [code]increment[/code]). " -"[code]increment[/code] puede ser negativo, y en tal caso, [code]final - 1[/" -"code] llega a ser [code]final + 1[/code]. También, el valor incial debe ser " -"mayor que el valor final para que se ejecute la iteración.\n" -"Devuelve una formación vacÃa si el rango no es válido (por ejemplo, " -"[code]range(2, 5, -1)[/code] o [code]range(5, 5, 1)[/code]).\n" -"[codeblock]\n" -"print(range(4))\n" -"print(range(2, 5))\n" -"print(range(0, 6, 2))\n" -"[/codeblock]\n" -"Salida:\n" -"[codeblock]\n" -"[0, 1, 2, 3]\n" -"[2, 3, 4]\n" -"[0, 2, 4]\n" -"[/codeblock]\n" -"Para iterar sobre un [Array] al revés, utilice:\n" -"[codeblock]\n" -"var array = [3, 6, 9]\n" -"var i := array.size() - 1\n" -"while i >= 0:\n" -" print(array[i])\n" -" i -= 1\n" -"[/codeblock]\n" -"Salida:\n" -"[codeblock]\n" -"9\n" -"6\n" -"3\n" -"[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" @@ -5376,17 +5343,25 @@ msgid "Maximum value for the mode enum." msgstr "Valor máximo para el modo enum." #: doc/classes/AnimatedSprite.xml -msgid "Sprite node that can use multiple textures for animation." +#, fuzzy +msgid "" +"Sprite node that contains multiple textures as frames to play for animation." msgstr "Nodo Sprite que puede usar múltiples texturas para la animación." #: doc/classes/AnimatedSprite.xml msgid "" -"Animations are created using a [SpriteFrames] resource, which can be " -"configured in the editor via the SpriteFrames panel.\n" -"[b]Note:[/b] You can associate a set of normal maps by creating additional " -"[SpriteFrames] resources with a [code]_normal[/code] suffix. For example, " -"having 2 [SpriteFrames] resources [code]run[/code] and [code]run_normal[/" -"code] will make it so the [code]run[/code] animation uses the normal map." +"[AnimatedSprite] is similar to the [Sprite] node, except it carries multiple " +"textures as animation frames. Animations are created using a [SpriteFrames] " +"resource, which allows you to import image files (or a folder containing " +"said files) to provide the animation frames for the sprite. The " +"[SpriteFrames] resource can be configured in the editor via the SpriteFrames " +"bottom panel.\n" +"[b]Note:[/b] You can associate a set of normal or specular maps by creating " +"additional [SpriteFrames] resources with a [code]_normal[/code] or " +"[code]_specular[/code] suffix. For example, having 3 [SpriteFrames] " +"resources [code]run[/code], [code]run_normal[/code], and [code]run_specular[/" +"code] will make it so the [code]run[/code] animation uses normal and " +"specular maps." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml @@ -5417,9 +5392,10 @@ msgstr "" msgid "Stops the current animation (does not reset the frame counter)." msgstr "Detiene la animación actual (no reinicia el contador de fotogramas)." -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml +#: doc/classes/AnimatedSprite.xml +#, fuzzy msgid "" -"The current animation from the [code]frames[/code] resource. If this value " +"The current animation from the [member frames] resource. If this value " "changes, the [code]frame[/code] counter is reset." msgstr "" "La animación actual del recurso [code]frames[/code]. Si este valor cambia, " @@ -5445,9 +5421,12 @@ msgstr "Si [code]true[/code], la textura se voltea verticalmente." msgid "The displayed animation frame's index." msgstr "El Ãndice del cuadro de animación mostrado." -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml -msgid "The [SpriteFrames] resource containing the animation(s)." -msgstr "El recurso [SpriteFrames] que contiene la(s) animación(es)." +#: doc/classes/AnimatedSprite.xml +msgid "" +"The [SpriteFrames] resource containing the animation(s). Allows you the " +"option to load, edit, clear, make unique and save the states of the " +"[SpriteFrames] resource." +msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/Sprite.xml #: doc/classes/SpriteBase3D.xml @@ -5509,6 +5488,18 @@ msgstr "" "Reproduce la animación llamada [code]anim[/code]. Si no se proporciona " "[code]anim[/code], se reproduce la animación actual." +#: doc/classes/AnimatedSprite3D.xml +msgid "" +"The current animation from the [code]frames[/code] resource. If this value " +"changes, the [code]frame[/code] counter is reset." +msgstr "" +"La animación actual del recurso [code]frames[/code]. Si este valor cambia, " +"el contador [code]frame[/code] se reinicia." + +#: doc/classes/AnimatedSprite3D.xml +msgid "The [SpriteFrames] resource containing the animation(s)." +msgstr "El recurso [SpriteFrames] que contiene la(s) animación(es)." + #: doc/classes/AnimatedTexture.xml msgid "Proxy texture for simple frame-based animations." msgstr "Textura de conexión para animaciones simples basadas en fotogramas." @@ -6235,11 +6226,11 @@ msgstr "" msgid "No interpolation (nearest value)." msgstr "No hay interpolación (valor más cercano)." -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Linear interpolation." msgstr "Interpolación lineal." -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Cubic interpolation." msgstr "Interpolación cúbica." @@ -7593,11 +7584,15 @@ msgstr "" "[code]newname[/code]." #: doc/classes/AnimationPlayer.xml +#, fuzzy msgid "" "Seeks the animation to the [code]seconds[/code] point in time (in seconds). " "If [code]update[/code] is [code]true[/code], the animation updates too, " "otherwise it updates at process time. Events between the current frame and " -"[code]seconds[/code] are skipped." +"[code]seconds[/code] are skipped.\n" +"[b]Note:[/b] Seeking to the end of the animation doesn't emit [signal " +"animation_finished]. If you want to skip animation and emit the signal, use " +"[method advance]." msgstr "" "Busca la animación hasta el punto en el tiempo de [code]seconds[/code]. Si " "[code]update[/code] es [code]true[/code], la animación se actualiza también, " @@ -9114,7 +9109,10 @@ msgstr "" "Limpia el array. Esto es equivalente a usar [method resize] con un tamaño de " "[code]0[/code]." -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "Returns the number of times an element is in the array." msgstr "Devuelve el numer de veces que un elemento es encuentra en el array." @@ -9174,10 +9172,15 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml +#, fuzzy msgid "" "Searches the array for a value and returns its index or [code]-1[/code] if " -"not found. Optionally, the initial search index can be passed." +"not found. Optionally, the initial search index can be passed. Returns " +"[code]-1[/code] if [code]from[/code] is out of bounds." msgstr "" "Busca el array por un valor y devuelve su indice o [code]-1[/code] sino se " "encuentra. Opcionalmente, el indice de busqueda inicial puede ser pasado." @@ -9354,11 +9357,16 @@ msgstr "" "Si el array es menor, los elementos so limipiados, si mayor, los nuevos " "elementos son [code]null[/code]." -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml +#, fuzzy msgid "" "Searches the array in reverse order. Optionally, a start search index can be " "passed. If negative, the start index is considered relative to the end of " -"the array." +"the array. If the adjusted start index is out of bounds, this method " +"searches from the end of the array." msgstr "" "Busca el array en orden inverso. Opcionalmente, un indice de comienzo de " "busqueda puede ser pasado. Si negacion, el indice de comienzo es considerado " @@ -10992,7 +11000,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -11320,7 +11328,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -15234,9 +15242,9 @@ msgstr "" #, fuzzy msgid "" "Returns a normal vector in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" "Devuelve un vector normal en el espacio del mundo, que es el resultado de " "proyectar un punto en el rectángulo [Viewport] por la proyección de la " @@ -15247,9 +15255,9 @@ msgstr "" #, fuzzy msgid "" "Returns a 3D position in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" "Devuelve una posición 3D en el espacio mundo, que es el resultado de " "proyectar un punto en el rectángulo [Viewport] por la proyección de la " @@ -18239,9 +18247,12 @@ msgid "If [code]true[/code], no collisions will be detected." msgstr "Si [code]true[/code], no se detectarán colisiones." #: doc/classes/CollisionPolygon2D.xml +#, fuzzy msgid "" "If [code]true[/code], only edges that face up, relative to " -"[CollisionPolygon2D]'s rotation, will collide with other objects." +"[CollisionPolygon2D]'s rotation, will collide with other objects.\n" +"[b]Note:[/b] This property has no effect if this [CollisionPolygon2D] is a " +"child of an [Area2D] node." msgstr "" "Si [code]true[/code], sólo los bordes que están boca arriba, en relación con " "la rotación de [CollisionPolygon2D], colisionarán con otros objetos." @@ -18365,9 +18376,12 @@ msgid "" msgstr "Una forma de colisión desactivada no tiene ningún efecto en el mundo." #: doc/classes/CollisionShape2D.xml +#, fuzzy msgid "" "Sets whether this collision shape should only detect collision on one side " -"(top or bottom)." +"(top or bottom).\n" +"[b]Note:[/b] This property has no effect if this [CollisionShape2D] is a " +"child of an [Area2D] node." msgstr "" "Establece si esta forma de colisión sólo debe detectar la colisión en un " "lado (superior o inferior)." @@ -29700,6 +29714,11 @@ msgid "" "same behavior." msgstr "" +#: doc/classes/EditorSpinSlider.xml +#, fuzzy +msgid "If [code]true[/code], the slider is hidden." +msgstr "Si [code]true[/code], la flecha de plegado está oculta." + #: doc/classes/EditorVCSInterface.xml #, fuzzy msgid "" @@ -34406,11 +34425,24 @@ msgid "Gradient's colors returned as a [PoolColorArray]." msgstr "Los colores de gradiente devueltos como un [PackedColorArray]." #: doc/classes/Gradient.xml +msgid "" +"Defines how the colors between points of the gradient are interpolated. See " +"[enum InterpolationMode] for available modes." +msgstr "" + +#: doc/classes/Gradient.xml #, fuzzy msgid "Gradient's offsets returned as a [PoolRealArray]." msgstr "" "Los desplazamientos de gradiente devueltos como un [PackedFloat32Array]." +#: doc/classes/Gradient.xml +msgid "" +"Constant interpolation, color changes abruptly at each point and stays " +"uniform between. This might cause visible aliasing when used for a gradient " +"texture in some cases." +msgstr "" + #: doc/classes/GradientTexture.xml msgid "Gradient-filled texture." msgstr "Textura llena de gradientes." @@ -45720,13 +45752,13 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used easing from [enum Tween.EaseType]. If not set, the " "default easing is used from the [SceneTreeTween] that contains this Tweener." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used transition from [enum Tween.TransitionType]. If not " "set, the default transition is used from the [SceneTreeTween] that contains " @@ -46669,6 +46701,15 @@ msgstr "Crea un [HingeJoint]." #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy +msgid "" +"Returns the navigation map [RID] the requested [code]agent[/code] is " +"currently assigned to." +msgstr "" +"Devuelve la [Animation] con clave [code]name[/code] or [code]null[/code] si " +"no se encuentra." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "Devuelve [code]true[/code] si el script puede ser instanciado." @@ -46740,6 +46781,12 @@ msgid "Create a new map." msgstr "Crea un [Area2D]." #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation agents [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns the map cell size." msgstr "Devuelve el tamaño del array." @@ -46774,6 +46821,12 @@ msgid "Returns the navigation path to reach the destination from the origin." msgstr "Devuelve el polÃgono de navegación del tile." #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation regions [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns [code]true[/code] if the map is active." msgstr "Devuelve [code]true[/code] si la selección está activa." @@ -46799,6 +46852,12 @@ msgid "Creates a new region." msgstr "Crea un [Area2D]." #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]region[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Sets the map for the region." msgstr "Establece los metadatos del borde dado." @@ -47320,19 +47379,59 @@ msgid "Represents the size of the [enum SourceGeometryMode] enum." msgstr "Representa el tamaño del enum [enum ShaderMode]." #: doc/classes/NavigationMeshGenerator.xml -msgid "This class is responsible for creating and clearing navigation meshes." +msgid "Helper class for creating and clearing navigation meshes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml msgid "" -"Bakes the navigation mesh. This will allow you to use pathfinding with the " -"navigation system." +"This class is responsible for creating and clearing 3D navigation meshes " +"used as [NavigationMesh] resources inside [NavigationMeshInstance]. The " +"[NavigationMeshGenerator] has very limited to no use for 2D as the " +"navigation mesh baking process expects 3D node types and 3D source geometry " +"to parse.\n" +"The entire navigation mesh baking is best done in a separate thread as the " +"voxelization, collision tests and mesh optimization steps involved are very " +"performance and time hungry operations.\n" +"Navigation mesh baking happens in multiple steps and the result depends on " +"3D source geometry and properties of the [NavigationMesh] resource. In the " +"first step, starting from a root node and depending on [NavigationMesh] " +"properties all valid 3D source geometry nodes are collected from the " +"[SceneTree]. Second, all collected nodes are parsed for their relevant 3D " +"geometry data and a combined 3D mesh is build. Due to the many different " +"types of parsable objects, from normal [MeshInstance]s to [CSGShape]s or " +"various [CollisionObject]s, some operations to collect geometry data can " +"trigger [VisualServer] and [PhysicsServer] synchronizations. Server " +"synchronization can have a negative effect on baking time or framerate as it " +"often involves [Mutex] locking for thread security. Many parsable objects " +"and the continuous synchronization with other threaded Servers can increase " +"the baking time significantly. On the other hand only a few but very large " +"and complex objects will take some time to prepare for the Servers which can " +"noticeably stall the next frame render. As a general rule the total amount " +"of parsable objects and their individual size and complexity should be " +"balanced to avoid framerate issues or very long baking times. The combined " +"mesh is then passed to the Recast Navigation Object to test the source " +"geometry for walkable terrain suitable to [NavigationMesh] agent properties " +"by creating a voxel world around the meshes bounding area.\n" +"The finalized navigation mesh is then returned and stored inside the " +"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes." +msgstr "" + +#: doc/classes/NavigationMeshGenerator.xml +msgid "" +"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " +"nodes under the provided [code]root_node[/code] or a specific group of nodes " +"for potential source geometry. The parse behavior can be controlled with the " +"[member NavigationMesh.geometry/parsed_geometry_type] and [member " +"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[NavigationMesh] resource." msgstr "" #: doc/classes/NavigationMeshGenerator.xml #, fuzzy -msgid "Clears the navigation mesh." -msgstr "Establece la malla de navegación del objeto." +msgid "" +"Removes all polygons and vertices from the provided [code]nav_mesh[/code] " +"resource." +msgstr "Elimina la animación con la clave [code]name[/code]." #: doc/classes/NavigationMeshInstance.xml #, fuzzy @@ -47353,7 +47452,10 @@ msgid "" "thread is useful because navigation baking is not a cheap operation. When it " "is completed, it automatically sets the new [NavigationMesh]. Please note " "that baking on separate thread may be very slow if geometry is parsed from " -"meshes as async access to each mesh involves heavy synchronization." +"meshes as async access to each mesh involves heavy synchronization. Also, " +"please note that baking on a separate thread is automatically disabled on " +"operating systems that cannot use threads (such as HTML5 with threads " +"disabled)." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -47403,6 +47505,11 @@ msgid "" msgstr "Devuelve el nodo animacion con el nombre dado." #: doc/classes/NavigationObstacle.xml +#, fuzzy +msgid "Returns the [RID] of this obstacle on the [NavigationServer]." +msgstr "Devuelve el [RID] de la forma enésima de un área." + +#: doc/classes/NavigationObstacle.xml msgid "" "Sets the [Navigation] node used by the obstacle. Useful when you don't want " "to make the obstacle a child of a [Navigation] node." @@ -47442,6 +47549,11 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle2D.xml +#, fuzzy +msgid "Returns the [RID] of this obstacle on the [Navigation2DServer]." +msgstr "Devuelve el [RID] de la forma enésima de un área." + +#: doc/classes/NavigationObstacle2D.xml msgid "" "Sets the [Navigation2D] node used by the obstacle. Useful when you don't " "want to make the obstacle a child of a [Navigation2D] node." @@ -49210,7 +49322,7 @@ msgstr "" #: doc/classes/Node.xml msgid "" "Returns [code]true[/code] if the physics interpolated flag is set for this " -"Node (see [method set_physics_interpolated]).\n" +"Node (see [member physics_interpolation_mode]).\n" "[b]Note:[/b] Interpolation will only be active is both the flag is set " "[b]and[/b] physics interpolation is enabled within the [SceneTree]. This can " "be tested using [method is_physics_interpolated_and_enabled]." @@ -49218,8 +49330,8 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Returns [code]true[/code] if physics interpolation is enabled (see [method " -"set_physics_interpolated]) [b]and[/b] enabled in the [SceneTree].\n" +"Returns [code]true[/code] if physics interpolation is enabled (see [member " +"physics_interpolation_mode]) [b]and[/b] enabled in the [SceneTree].\n" "This is a convenience version of [method is_physics_interpolated] that also " "checks whether physics interpolation is enabled globally.\n" "See [member SceneTree.physics_interpolation] and [member ProjectSettings." @@ -49645,14 +49757,6 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Enables or disables physics interpolation per node, offering a finer grain " -"of control than turning physics interpolation on and off globally.\n" -"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " -"interpolation can sometimes give superior results." -msgstr "" - -#: doc/classes/Node.xml -msgid "" "Enables or disables physics (i.e. fixed framerate) processing. When a node " "is being processed, it will receive a [constant " "NOTIFICATION_PHYSICS_PROCESS] at a fixed (usually 60 FPS, see [member Engine." @@ -49866,6 +49970,15 @@ msgstr "" #: doc/classes/Node.xml msgid "" +"Allows enabling or disabling physics interpolation per node, offering a " +"finer grain of control than turning physics interpolation on and off " +"globally.\n" +"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " +"interpolation can sometimes give superior results." +msgstr "" + +#: doc/classes/Node.xml +msgid "" "The node's priority in the execution order of the enabled processing " "callbacks (i.e. [constant NOTIFICATION_PROCESS], [constant " "NOTIFICATION_PHYSICS_PROCESS] and their internal counterparts). Nodes whose " @@ -50052,6 +50165,27 @@ msgid "Continue to process regardless of the [SceneTree] pause state." msgstr "Continúe el proceso sin importar el estado de pausa de [SceneTree]." #: doc/classes/Node.xml +#, fuzzy +msgid "" +"Inherits physics interpolation mode from the node's parent. For the root " +"node, it is equivalent to [constant PHYSICS_INTERPOLATION_MODE_ON]. Default." +msgstr "" +"Heredó el modo de pausa del padre del nodo. Para el nodo raÃz, es " +"equivalente a [constant PAUSE_MODE_STOP]. Por defecto." + +#: doc/classes/Node.xml +msgid "" +"Turn off physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn on physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml msgid "Duplicate the node's signals." msgstr "Duplica las señales del nodo." @@ -51808,8 +51942,9 @@ msgid "Returns the tooltip of the item at index [code]idx[/code]." msgstr "Devuelve el texto del artÃculo en el Ãndice [code]idx[/code]." #: doc/classes/OptionButton.xml +#, fuzzy msgid "" -"Returns the ID of the selected item, or [code]0[/code] if no item is " +"Returns the ID of the selected item, or [code]-1[/code] if no item is " "selected." msgstr "" "Devuelve el ID del elemento seleccionado, o [code]0[/code] si no hay ningún " @@ -51835,9 +51970,11 @@ msgid "Removes the item at index [code]idx[/code]." msgstr "Elimina el elemento en el Ãndice [code]idx[/code]." #: doc/classes/OptionButton.xml +#, fuzzy msgid "" "Selects an item by index and makes it the current item. This will work even " -"if the item is disabled." +"if the item is disabled.\n" +"Passing [code]-1[/code] as the index deselects any currently selected item." msgstr "" "Selecciona un elemento por Ãndice y lo convierte en el elemento actual. Esto " "funcionará incluso si el elemento está desactivado." @@ -58935,6 +59072,17 @@ msgstr "" "Utiliza esta función si no estás seguro de la fuente de los datos. Para la " "entrada del usuario esta función siempre debe ser preferida." +#: doc/classes/PoolByteArray.xml doc/classes/PoolColorArray.xml +#: doc/classes/PoolIntArray.xml doc/classes/PoolRealArray.xml +#: doc/classes/PoolStringArray.xml doc/classes/PoolVector2Array.xml +#: doc/classes/PoolVector3Array.xml +#, fuzzy +msgid "" +"Returns [code]true[/code] if the array contains the given value.\n" +"[b]Note:[/b] This is equivalent to using the [code]in[/code] operator." +msgstr "" +"Devuelve [code]true[/code] si el objeto contiene el [code]method[/code] dado." + #: doc/classes/PoolByteArray.xml #, fuzzy msgid "" @@ -60037,6 +60185,11 @@ msgstr "[Font] usada para los elementos del menú." #: doc/classes/PopupMenu.xml #, fuzzy +msgid "[Font] used for the labeled separator." +msgstr "[Font] que se usa para el texto de las [Label]." + +#: doc/classes/PopupMenu.xml +#, fuzzy msgid "[Texture] icon for the checked checkbox items." msgstr "Icono [Texture2D] para las casillas marcadas." @@ -64306,19 +64459,6 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used easing from [enum Tween.EaseType]. If not set, the " -"default easing is used from the [Tween] that contains this Tweener." -msgstr "" - -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used transition from [enum Tween.TransitionType]. If not " -"set, the default transition is used from the [Tween] that contains this " -"Tweener." -msgstr "" - #: doc/classes/ProximityGroup.xml #, fuzzy msgid "General-purpose 3D proximity detection node." @@ -70533,19 +70673,20 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape touches another. If there are " -"no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape touches another.\n" +"If there are no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the shape to check collisions with " "([code]with_shape[/code]), and the transformation matrix of that shape " "([code]shape_xform[/code])." msgstr "" -"Devuelve una lista de los puntos donde esta forma toca a otra. Si no hay " -"colisiones la lista está vacÃa.\n" -"Este método necesita la matriz de transformación de esta forma " -"([code]local_xform[/code]), la forma para comprobar las colisiones con " -"([code]with_shape[/code]), y la matriz de transformación de esa forma " -"([code]shape_xform[/code])." #: doc/classes/Shape2D.xml msgid "" @@ -70568,9 +70709,18 @@ msgstr "" "([code]shape_motion[/code])." #: doc/classes/Shape2D.xml +#, fuzzy msgid "" -"Returns a list of the points where this shape would touch another, if a " -"given movement was applied. If there are no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape would touch another, " +"if a given movement was applied.\n" +"If there would be no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the movement to test on this shape " "([code]local_motion[/code]), the shape to check collisions with " diff --git a/doc/translations/fa.po b/doc/translations/fa.po index fb0b7d196f..0851199fe8 100644 --- a/doc/translations/fa.po +++ b/doc/translations/fa.po @@ -1360,11 +1360,12 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Random range, any floating point value between [code]from[/code] and " -"[code]to[/code].\n" +"Returns a random floating point value between [code]from[/code] and " +"[code]to[/code] (both endpoints inclusive).\n" "[codeblock]\n" "prints(rand_range(0, 1), rand_range(0, 1)) # Prints e.g. 0.135591 0.405263\n" -"[/codeblock]" +"[/codeblock]\n" +"[b]Note:[/b] This is equivalent to [code]randf() * (to - from) + from[/code]." msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml @@ -1408,37 +1409,36 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Returns an array with the given range. Range can be 1 argument [code]N[/" -"code] (0 to [code]N[/code] - 1), two arguments ([code]initial[/code], " -"[code]final - 1[/code]) or three arguments ([code]initial[/code], " -"[code]final - 1[/code], [code]increment[/code]). Returns an empty array if " -"the range isn't valid (e.g. [code]range(2, 5, -1)[/code] or [code]range(5, " -"5, 1)[/code]).\n" -"Returns an array with the given range. [code]range()[/code] can have 1 " -"argument N ([code]0[/code] to [code]N - 1[/code]), two arguments " -"([code]initial[/code], [code]final - 1[/code]) or three arguments " -"([code]initial[/code], [code]final - 1[/code], [code]increment[/code]). " -"[code]increment[/code] can be negative. If [code]increment[/code] is " -"negative, [code]final - 1[/code] will become [code]final + 1[/code]. Also, " -"the initial value must be greater than the final value for the loop to run.\n" -"[codeblock]\n" -"print(range(4))\n" -"print(range(2, 5))\n" -"print(range(0, 6, 2))\n" -"[/codeblock]\n" -"Output:\n" +"Returns an array with the given range. [method range] can be called in three " +"ways:\n" +"[code]range(n: int)[/code]: Starts from 0, increases by steps of 1, and " +"stops [i]before[/i] [code]n[/code]. The argument [code]n[/code] is " +"[b]exclusive[/b].\n" +"[code]range(b: int, n: int)[/code]: Starts from [code]b[/code], increases by " +"steps of 1, and stops [i]before[/i] [code]n[/code]. The arguments [code]b[/" +"code] and [code]n[/code] are [b]inclusive[/b] and [b]exclusive[/b], " +"respectively.\n" +"[code]range(b: int, n: int, s: int)[/code]: Starts from [code]b[/code], " +"increases/decreases by steps of [code]s[/code], and stops [i]before[/i] " +"[code]n[/code]. The arguments [code]b[/code] and [code]n[/code] are " +"[b]inclusive[/b] and [b]exclusive[/b], respectively. The argument [code]s[/" +"code] [b]can[/b] be negative, but not [code]0[/code]. If [code]s[/code] is " +"[code]0[/code], an error message is printed.\n" +"[method range] converts all arguments to [int] before processing.\n" +"[b]Note:[/b] Returns an empty array if no value meets the value constraint " +"(e.g. [code]range(2, 5, -1)[/code] or [code]range(5, 5, 1)[/code]).\n" +"Examples:\n" "[codeblock]\n" -"[0, 1, 2, 3]\n" -"[2, 3, 4]\n" -"[0, 2, 4]\n" +"print(range(4)) # Prints [0, 1, 2, 3]\n" +"print(range(2, 5)) # Prints [2, 3, 4]\n" +"print(range(0, 6, 2)) # Prints [0, 2, 4]\n" +"print(range(4, 1, -1)) # Prints [4, 3, 2]\n" "[/codeblock]\n" "To iterate over an [Array] backwards, use:\n" "[codeblock]\n" "var array = [3, 6, 9]\n" -"var i := array.size() - 1\n" -"while i >= 0:\n" -" print(array[i])\n" -" i -= 1\n" +"for i in range(array.size(), 0, -1):\n" +" print(array[i - 1])\n" "[/codeblock]\n" "Output:\n" "[codeblock]\n" @@ -4539,17 +4539,24 @@ msgid "Maximum value for the mode enum." msgstr "" #: doc/classes/AnimatedSprite.xml -msgid "Sprite node that can use multiple textures for animation." +msgid "" +"Sprite node that contains multiple textures as frames to play for animation." msgstr "" #: doc/classes/AnimatedSprite.xml msgid "" -"Animations are created using a [SpriteFrames] resource, which can be " -"configured in the editor via the SpriteFrames panel.\n" -"[b]Note:[/b] You can associate a set of normal maps by creating additional " -"[SpriteFrames] resources with a [code]_normal[/code] suffix. For example, " -"having 2 [SpriteFrames] resources [code]run[/code] and [code]run_normal[/" -"code] will make it so the [code]run[/code] animation uses the normal map." +"[AnimatedSprite] is similar to the [Sprite] node, except it carries multiple " +"textures as animation frames. Animations are created using a [SpriteFrames] " +"resource, which allows you to import image files (or a folder containing " +"said files) to provide the animation frames for the sprite. The " +"[SpriteFrames] resource can be configured in the editor via the SpriteFrames " +"bottom panel.\n" +"[b]Note:[/b] You can associate a set of normal or specular maps by creating " +"additional [SpriteFrames] resources with a [code]_normal[/code] or " +"[code]_specular[/code] suffix. For example, having 3 [SpriteFrames] " +"resources [code]run[/code], [code]run_normal[/code], and [code]run_specular[/" +"code] will make it so the [code]run[/code] animation uses normal and " +"specular maps." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml @@ -4577,9 +4584,9 @@ msgstr "" msgid "Stops the current animation (does not reset the frame counter)." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml +#: doc/classes/AnimatedSprite.xml msgid "" -"The current animation from the [code]frames[/code] resource. If this value " +"The current animation from the [member frames] resource. If this value " "changes, the [code]frame[/code] counter is reset." msgstr "" @@ -4603,8 +4610,11 @@ msgstr "" msgid "The displayed animation frame's index." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml -msgid "The [SpriteFrames] resource containing the animation(s)." +#: doc/classes/AnimatedSprite.xml +msgid "" +"The [SpriteFrames] resource containing the animation(s). Allows you the " +"option to load, edit, clear, make unique and save the states of the " +"[SpriteFrames] resource." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/Sprite.xml @@ -4656,6 +4666,16 @@ msgid "" "provided, the current animation is played." msgstr "" +#: doc/classes/AnimatedSprite3D.xml +msgid "" +"The current animation from the [code]frames[/code] resource. If this value " +"changes, the [code]frame[/code] counter is reset." +msgstr "" + +#: doc/classes/AnimatedSprite3D.xml +msgid "The [SpriteFrames] resource containing the animation(s)." +msgstr "" + #: doc/classes/AnimatedTexture.xml msgid "Proxy texture for simple frame-based animations." msgstr "" @@ -5171,11 +5191,11 @@ msgstr "" msgid "No interpolation (nearest value)." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Linear interpolation." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Cubic interpolation." msgstr "" @@ -6210,7 +6230,10 @@ msgid "" "Seeks the animation to the [code]seconds[/code] point in time (in seconds). " "If [code]update[/code] is [code]true[/code], the animation updates too, " "otherwise it updates at process time. Events between the current frame and " -"[code]seconds[/code] are skipped." +"[code]seconds[/code] are skipped.\n" +"[b]Note:[/b] Seeking to the end of the animation doesn't emit [signal " +"animation_finished]. If you want to skip animation and emit the signal, use " +"[method advance]." msgstr "" #: doc/classes/AnimationPlayer.xml @@ -7400,7 +7423,10 @@ msgid "" "[code]0[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "Returns the number of times an element is in the array." msgstr "" @@ -7445,10 +7471,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array for a value and returns its index or [code]-1[/code] if " -"not found. Optionally, the initial search index can be passed." +"not found. Optionally, the initial search index can be passed. Returns " +"[code]-1[/code] if [code]from[/code] is out of bounds." msgstr "" #: doc/classes/Array.xml @@ -7586,11 +7616,15 @@ msgid "" "[code]null[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array in reverse order. Optionally, a start search index can be " "passed. If negative, the start index is considered relative to the end of " -"the array." +"the array. If the adjusted start index is out of bounds, this method " +"searches from the end of the array." msgstr "" #: doc/classes/Array.xml @@ -8725,7 +8759,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -8947,7 +8981,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -12058,17 +12092,17 @@ msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a normal vector in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a 3D position in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml @@ -14317,7 +14351,9 @@ msgstr "" #: doc/classes/CollisionPolygon2D.xml msgid "" "If [code]true[/code], only edges that face up, relative to " -"[CollisionPolygon2D]'s rotation, will collide with other objects." +"[CollisionPolygon2D]'s rotation, will collide with other objects.\n" +"[b]Note:[/b] This property has no effect if this [CollisionPolygon2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionPolygon2D.xml @@ -14413,7 +14449,9 @@ msgstr "" #: doc/classes/CollisionShape2D.xml msgid "" "Sets whether this collision shape should only detect collision on one side " -"(top or bottom)." +"(top or bottom).\n" +"[b]Note:[/b] This property has no effect if this [CollisionShape2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionShape2D.xml @@ -22819,6 +22857,10 @@ msgid "" "same behavior." msgstr "" +#: doc/classes/EditorSpinSlider.xml +msgid "If [code]true[/code], the slider is hidden." +msgstr "" + #: doc/classes/EditorVCSInterface.xml msgid "" "Version Control System (VCS) interface, which reads and writes to the local " @@ -26403,9 +26445,22 @@ msgid "Gradient's colors returned as a [PoolColorArray]." msgstr "" #: doc/classes/Gradient.xml +msgid "" +"Defines how the colors between points of the gradient are interpolated. See " +"[enum InterpolationMode] for available modes." +msgstr "" + +#: doc/classes/Gradient.xml msgid "Gradient's offsets returned as a [PoolRealArray]." msgstr "" +#: doc/classes/Gradient.xml +msgid "" +"Constant interpolation, color changes abruptly at each point and stays " +"uniform between. This might cause visible aliasing when used for a gradient " +"texture in some cases." +msgstr "" + #: doc/classes/GradientTexture.xml msgid "Gradient-filled texture." msgstr "" @@ -34927,13 +34982,13 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used easing from [enum Tween.EaseType]. If not set, the " "default easing is used from the [SceneTreeTween] that contains this Tweener." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used transition from [enum Tween.TransitionType]. If not " "set, the default transition is used from the [SceneTreeTween] that contains " @@ -35645,6 +35700,12 @@ msgid "Creates the agent." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]agent[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" @@ -35708,6 +35769,12 @@ msgid "Create a new map." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation agents [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns the map cell size." msgstr "" @@ -35734,6 +35801,12 @@ msgid "Returns the navigation path to reach the destination from the origin." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation regions [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns [code]true[/code] if the map is active." msgstr "" @@ -35755,6 +35828,12 @@ msgid "Creates a new region." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]region[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the map for the region." msgstr "" @@ -36227,17 +36306,57 @@ msgid "Represents the size of the [enum SourceGeometryMode] enum." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "This class is responsible for creating and clearing navigation meshes." +msgid "Helper class for creating and clearing navigation meshes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml msgid "" -"Bakes the navigation mesh. This will allow you to use pathfinding with the " -"navigation system." +"This class is responsible for creating and clearing 3D navigation meshes " +"used as [NavigationMesh] resources inside [NavigationMeshInstance]. The " +"[NavigationMeshGenerator] has very limited to no use for 2D as the " +"navigation mesh baking process expects 3D node types and 3D source geometry " +"to parse.\n" +"The entire navigation mesh baking is best done in a separate thread as the " +"voxelization, collision tests and mesh optimization steps involved are very " +"performance and time hungry operations.\n" +"Navigation mesh baking happens in multiple steps and the result depends on " +"3D source geometry and properties of the [NavigationMesh] resource. In the " +"first step, starting from a root node and depending on [NavigationMesh] " +"properties all valid 3D source geometry nodes are collected from the " +"[SceneTree]. Second, all collected nodes are parsed for their relevant 3D " +"geometry data and a combined 3D mesh is build. Due to the many different " +"types of parsable objects, from normal [MeshInstance]s to [CSGShape]s or " +"various [CollisionObject]s, some operations to collect geometry data can " +"trigger [VisualServer] and [PhysicsServer] synchronizations. Server " +"synchronization can have a negative effect on baking time or framerate as it " +"often involves [Mutex] locking for thread security. Many parsable objects " +"and the continuous synchronization with other threaded Servers can increase " +"the baking time significantly. On the other hand only a few but very large " +"and complex objects will take some time to prepare for the Servers which can " +"noticeably stall the next frame render. As a general rule the total amount " +"of parsable objects and their individual size and complexity should be " +"balanced to avoid framerate issues or very long baking times. The combined " +"mesh is then passed to the Recast Navigation Object to test the source " +"geometry for walkable terrain suitable to [NavigationMesh] agent properties " +"by creating a voxel world around the meshes bounding area.\n" +"The finalized navigation mesh is then returned and stored inside the " +"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes." +msgstr "" + +#: doc/classes/NavigationMeshGenerator.xml +msgid "" +"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " +"nodes under the provided [code]root_node[/code] or a specific group of nodes " +"for potential source geometry. The parse behavior can be controlled with the " +"[member NavigationMesh.geometry/parsed_geometry_type] and [member " +"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[NavigationMesh] resource." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "Clears the navigation mesh." +msgid "" +"Removes all polygons and vertices from the provided [code]nav_mesh[/code] " +"resource." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -36258,7 +36377,10 @@ msgid "" "thread is useful because navigation baking is not a cheap operation. When it " "is completed, it automatically sets the new [NavigationMesh]. Please note " "that baking on separate thread may be very slow if geometry is parsed from " -"meshes as async access to each mesh involves heavy synchronization." +"meshes as async access to each mesh involves heavy synchronization. Also, " +"please note that baking on a separate thread is automatically disabled on " +"operating systems that cannot use threads (such as HTML5 with threads " +"disabled)." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -36304,6 +36426,10 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle.xml +msgid "Returns the [RID] of this obstacle on the [NavigationServer]." +msgstr "" + +#: doc/classes/NavigationObstacle.xml msgid "" "Sets the [Navigation] node used by the obstacle. Useful when you don't want " "to make the obstacle a child of a [Navigation] node." @@ -36340,6 +36466,10 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle2D.xml +msgid "Returns the [RID] of this obstacle on the [Navigation2DServer]." +msgstr "" + +#: doc/classes/NavigationObstacle2D.xml msgid "" "Sets the [Navigation2D] node used by the obstacle. Useful when you don't " "want to make the obstacle a child of a [Navigation2D] node." @@ -37524,7 +37654,7 @@ msgstr "" #: doc/classes/Node.xml msgid "" "Returns [code]true[/code] if the physics interpolated flag is set for this " -"Node (see [method set_physics_interpolated]).\n" +"Node (see [member physics_interpolation_mode]).\n" "[b]Note:[/b] Interpolation will only be active is both the flag is set " "[b]and[/b] physics interpolation is enabled within the [SceneTree]. This can " "be tested using [method is_physics_interpolated_and_enabled]." @@ -37532,8 +37662,8 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Returns [code]true[/code] if physics interpolation is enabled (see [method " -"set_physics_interpolated]) [b]and[/b] enabled in the [SceneTree].\n" +"Returns [code]true[/code] if physics interpolation is enabled (see [member " +"physics_interpolation_mode]) [b]and[/b] enabled in the [SceneTree].\n" "This is a convenience version of [method is_physics_interpolated] that also " "checks whether physics interpolation is enabled globally.\n" "See [member SceneTree.physics_interpolation] and [member ProjectSettings." @@ -37827,14 +37957,6 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Enables or disables physics interpolation per node, offering a finer grain " -"of control than turning physics interpolation on and off globally.\n" -"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " -"interpolation can sometimes give superior results." -msgstr "" - -#: doc/classes/Node.xml -msgid "" "Enables or disables physics (i.e. fixed framerate) processing. When a node " "is being processed, it will receive a [constant " "NOTIFICATION_PHYSICS_PROCESS] at a fixed (usually 60 FPS, see [member Engine." @@ -37967,6 +38089,15 @@ msgstr "" #: doc/classes/Node.xml msgid "" +"Allows enabling or disabling physics interpolation per node, offering a " +"finer grain of control than turning physics interpolation on and off " +"globally.\n" +"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " +"interpolation can sometimes give superior results." +msgstr "" + +#: doc/classes/Node.xml +msgid "" "The node's priority in the execution order of the enabled processing " "callbacks (i.e. [constant NOTIFICATION_PROCESS], [constant " "NOTIFICATION_PHYSICS_PROCESS] and their internal counterparts). Nodes whose " @@ -38128,6 +38259,24 @@ msgid "Continue to process regardless of the [SceneTree] pause state." msgstr "" #: doc/classes/Node.xml +msgid "" +"Inherits physics interpolation mode from the node's parent. For the root " +"node, it is equivalent to [constant PHYSICS_INTERPOLATION_MODE_ON]. Default." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn off physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn on physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml msgid "Duplicate the node's signals." msgstr "" @@ -39368,7 +39517,7 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" -"Returns the ID of the selected item, or [code]0[/code] if no item is " +"Returns the ID of the selected item, or [code]-1[/code] if no item is " "selected." msgstr "" @@ -39390,7 +39539,8 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" "Selects an item by index and makes it the current item. This will work even " -"if the item is disabled." +"if the item is disabled.\n" +"Passing [code]-1[/code] as the index deselects any currently selected item." msgstr "" #: doc/classes/OptionButton.xml @@ -44729,6 +44879,15 @@ msgid "" "should always be preferred." msgstr "" +#: doc/classes/PoolByteArray.xml doc/classes/PoolColorArray.xml +#: doc/classes/PoolIntArray.xml doc/classes/PoolRealArray.xml +#: doc/classes/PoolStringArray.xml doc/classes/PoolVector2Array.xml +#: doc/classes/PoolVector3Array.xml +msgid "" +"Returns [code]true[/code] if the array contains the given value.\n" +"[b]Note:[/b] This is equivalent to using the [code]in[/code] operator." +msgstr "" + #: doc/classes/PoolByteArray.xml msgid "" "Returns a hexadecimal representation of this array as a [String].\n" @@ -45522,6 +45681,10 @@ msgid "[Font] used for the menu items." msgstr "" #: doc/classes/PopupMenu.xml +msgid "[Font] used for the labeled separator." +msgstr "" + +#: doc/classes/PopupMenu.xml msgid "[Texture] icon for the checked checkbox items." msgstr "" @@ -48967,19 +49130,6 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used easing from [enum Tween.EaseType]. If not set, the " -"default easing is used from the [Tween] that contains this Tweener." -msgstr "" - -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used transition from [enum Tween.TransitionType]. If not " -"set, the default transition is used from the [Tween] that contains this " -"Tweener." -msgstr "" - #: doc/classes/ProximityGroup.xml msgid "General-purpose 3D proximity detection node." msgstr "" @@ -53813,8 +53963,15 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape touches another. If there are " -"no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape touches another.\n" +"If there are no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the shape to check collisions with " "([code]with_shape[/code]), and the transformation matrix of that shape " @@ -53835,8 +53992,16 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape would touch another, if a " -"given movement was applied. If there are no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape would touch another, " +"if a given movement was applied.\n" +"If there would be no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the movement to test on this shape " "([code]local_motion[/code]), the shape to check collisions with " diff --git a/doc/translations/fi.po b/doc/translations/fi.po index 4a23377588..ce19aaf1de 100644 --- a/doc/translations/fi.po +++ b/doc/translations/fi.po @@ -1009,11 +1009,12 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Random range, any floating point value between [code]from[/code] and " -"[code]to[/code].\n" +"Returns a random floating point value between [code]from[/code] and " +"[code]to[/code] (both endpoints inclusive).\n" "[codeblock]\n" "prints(rand_range(0, 1), rand_range(0, 1)) # Prints e.g. 0.135591 0.405263\n" -"[/codeblock]" +"[/codeblock]\n" +"[b]Note:[/b] This is equivalent to [code]randf() * (to - from) + from[/code]." msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml @@ -1057,37 +1058,36 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Returns an array with the given range. Range can be 1 argument [code]N[/" -"code] (0 to [code]N[/code] - 1), two arguments ([code]initial[/code], " -"[code]final - 1[/code]) or three arguments ([code]initial[/code], " -"[code]final - 1[/code], [code]increment[/code]). Returns an empty array if " -"the range isn't valid (e.g. [code]range(2, 5, -1)[/code] or [code]range(5, " -"5, 1)[/code]).\n" -"Returns an array with the given range. [code]range()[/code] can have 1 " -"argument N ([code]0[/code] to [code]N - 1[/code]), two arguments " -"([code]initial[/code], [code]final - 1[/code]) or three arguments " -"([code]initial[/code], [code]final - 1[/code], [code]increment[/code]). " -"[code]increment[/code] can be negative. If [code]increment[/code] is " -"negative, [code]final - 1[/code] will become [code]final + 1[/code]. Also, " -"the initial value must be greater than the final value for the loop to run.\n" -"[codeblock]\n" -"print(range(4))\n" -"print(range(2, 5))\n" -"print(range(0, 6, 2))\n" -"[/codeblock]\n" -"Output:\n" +"Returns an array with the given range. [method range] can be called in three " +"ways:\n" +"[code]range(n: int)[/code]: Starts from 0, increases by steps of 1, and " +"stops [i]before[/i] [code]n[/code]. The argument [code]n[/code] is " +"[b]exclusive[/b].\n" +"[code]range(b: int, n: int)[/code]: Starts from [code]b[/code], increases by " +"steps of 1, and stops [i]before[/i] [code]n[/code]. The arguments [code]b[/" +"code] and [code]n[/code] are [b]inclusive[/b] and [b]exclusive[/b], " +"respectively.\n" +"[code]range(b: int, n: int, s: int)[/code]: Starts from [code]b[/code], " +"increases/decreases by steps of [code]s[/code], and stops [i]before[/i] " +"[code]n[/code]. The arguments [code]b[/code] and [code]n[/code] are " +"[b]inclusive[/b] and [b]exclusive[/b], respectively. The argument [code]s[/" +"code] [b]can[/b] be negative, but not [code]0[/code]. If [code]s[/code] is " +"[code]0[/code], an error message is printed.\n" +"[method range] converts all arguments to [int] before processing.\n" +"[b]Note:[/b] Returns an empty array if no value meets the value constraint " +"(e.g. [code]range(2, 5, -1)[/code] or [code]range(5, 5, 1)[/code]).\n" +"Examples:\n" "[codeblock]\n" -"[0, 1, 2, 3]\n" -"[2, 3, 4]\n" -"[0, 2, 4]\n" +"print(range(4)) # Prints [0, 1, 2, 3]\n" +"print(range(2, 5)) # Prints [2, 3, 4]\n" +"print(range(0, 6, 2)) # Prints [0, 2, 4]\n" +"print(range(4, 1, -1)) # Prints [4, 3, 2]\n" "[/codeblock]\n" "To iterate over an [Array] backwards, use:\n" "[codeblock]\n" "var array = [3, 6, 9]\n" -"var i := array.size() - 1\n" -"while i >= 0:\n" -" print(array[i])\n" -" i -= 1\n" +"for i in range(array.size(), 0, -1):\n" +" print(array[i - 1])\n" "[/codeblock]\n" "Output:\n" "[codeblock]\n" @@ -4182,17 +4182,24 @@ msgid "Maximum value for the mode enum." msgstr "" #: doc/classes/AnimatedSprite.xml -msgid "Sprite node that can use multiple textures for animation." +msgid "" +"Sprite node that contains multiple textures as frames to play for animation." msgstr "" #: doc/classes/AnimatedSprite.xml msgid "" -"Animations are created using a [SpriteFrames] resource, which can be " -"configured in the editor via the SpriteFrames panel.\n" -"[b]Note:[/b] You can associate a set of normal maps by creating additional " -"[SpriteFrames] resources with a [code]_normal[/code] suffix. For example, " -"having 2 [SpriteFrames] resources [code]run[/code] and [code]run_normal[/" -"code] will make it so the [code]run[/code] animation uses the normal map." +"[AnimatedSprite] is similar to the [Sprite] node, except it carries multiple " +"textures as animation frames. Animations are created using a [SpriteFrames] " +"resource, which allows you to import image files (or a folder containing " +"said files) to provide the animation frames for the sprite. The " +"[SpriteFrames] resource can be configured in the editor via the SpriteFrames " +"bottom panel.\n" +"[b]Note:[/b] You can associate a set of normal or specular maps by creating " +"additional [SpriteFrames] resources with a [code]_normal[/code] or " +"[code]_specular[/code] suffix. For example, having 3 [SpriteFrames] " +"resources [code]run[/code], [code]run_normal[/code], and [code]run_specular[/" +"code] will make it so the [code]run[/code] animation uses normal and " +"specular maps." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml @@ -4220,9 +4227,9 @@ msgstr "" msgid "Stops the current animation (does not reset the frame counter)." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml +#: doc/classes/AnimatedSprite.xml msgid "" -"The current animation from the [code]frames[/code] resource. If this value " +"The current animation from the [member frames] resource. If this value " "changes, the [code]frame[/code] counter is reset." msgstr "" @@ -4246,8 +4253,11 @@ msgstr "" msgid "The displayed animation frame's index." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml -msgid "The [SpriteFrames] resource containing the animation(s)." +#: doc/classes/AnimatedSprite.xml +msgid "" +"The [SpriteFrames] resource containing the animation(s). Allows you the " +"option to load, edit, clear, make unique and save the states of the " +"[SpriteFrames] resource." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/Sprite.xml @@ -4299,6 +4309,16 @@ msgid "" "provided, the current animation is played." msgstr "" +#: doc/classes/AnimatedSprite3D.xml +msgid "" +"The current animation from the [code]frames[/code] resource. If this value " +"changes, the [code]frame[/code] counter is reset." +msgstr "" + +#: doc/classes/AnimatedSprite3D.xml +msgid "The [SpriteFrames] resource containing the animation(s)." +msgstr "" + #: doc/classes/AnimatedTexture.xml msgid "Proxy texture for simple frame-based animations." msgstr "" @@ -4815,11 +4835,11 @@ msgstr "" msgid "No interpolation (nearest value)." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Linear interpolation." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Cubic interpolation." msgstr "" @@ -5855,7 +5875,10 @@ msgid "" "Seeks the animation to the [code]seconds[/code] point in time (in seconds). " "If [code]update[/code] is [code]true[/code], the animation updates too, " "otherwise it updates at process time. Events between the current frame and " -"[code]seconds[/code] are skipped." +"[code]seconds[/code] are skipped.\n" +"[b]Note:[/b] Seeking to the end of the animation doesn't emit [signal " +"animation_finished]. If you want to skip animation and emit the signal, use " +"[method advance]." msgstr "" #: doc/classes/AnimationPlayer.xml @@ -7051,7 +7074,10 @@ msgid "" "[code]0[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "Returns the number of times an element is in the array." msgstr "" @@ -7096,10 +7122,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array for a value and returns its index or [code]-1[/code] if " -"not found. Optionally, the initial search index can be passed." +"not found. Optionally, the initial search index can be passed. Returns " +"[code]-1[/code] if [code]from[/code] is out of bounds." msgstr "" #: doc/classes/Array.xml @@ -7237,11 +7267,15 @@ msgid "" "[code]null[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array in reverse order. Optionally, a start search index can be " "passed. If negative, the start index is considered relative to the end of " -"the array." +"the array. If the adjusted start index is out of bounds, this method " +"searches from the end of the array." msgstr "" #: doc/classes/Array.xml @@ -8376,7 +8410,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -8598,7 +8632,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -11713,17 +11747,17 @@ msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a normal vector in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a 3D position in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml @@ -13978,7 +14012,9 @@ msgstr "" #: doc/classes/CollisionPolygon2D.xml msgid "" "If [code]true[/code], only edges that face up, relative to " -"[CollisionPolygon2D]'s rotation, will collide with other objects." +"[CollisionPolygon2D]'s rotation, will collide with other objects.\n" +"[b]Note:[/b] This property has no effect if this [CollisionPolygon2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionPolygon2D.xml @@ -14074,7 +14110,9 @@ msgstr "" #: doc/classes/CollisionShape2D.xml msgid "" "Sets whether this collision shape should only detect collision on one side " -"(top or bottom)." +"(top or bottom).\n" +"[b]Note:[/b] This property has no effect if this [CollisionShape2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionShape2D.xml @@ -22490,6 +22528,11 @@ msgid "" "same behavior." msgstr "" +#: doc/classes/EditorSpinSlider.xml +#, fuzzy +msgid "If [code]true[/code], the slider is hidden." +msgstr "Palauttaa parametrin kosinin." + #: doc/classes/EditorVCSInterface.xml msgid "" "Version Control System (VCS) interface, which reads and writes to the local " @@ -26078,9 +26121,22 @@ msgid "Gradient's colors returned as a [PoolColorArray]." msgstr "" #: doc/classes/Gradient.xml +msgid "" +"Defines how the colors between points of the gradient are interpolated. See " +"[enum InterpolationMode] for available modes." +msgstr "" + +#: doc/classes/Gradient.xml msgid "Gradient's offsets returned as a [PoolRealArray]." msgstr "" +#: doc/classes/Gradient.xml +msgid "" +"Constant interpolation, color changes abruptly at each point and stays " +"uniform between. This might cause visible aliasing when used for a gradient " +"texture in some cases." +msgstr "" + #: doc/classes/GradientTexture.xml msgid "Gradient-filled texture." msgstr "" @@ -34617,13 +34673,13 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used easing from [enum Tween.EaseType]. If not set, the " "default easing is used from the [SceneTreeTween] that contains this Tweener." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used transition from [enum Tween.TransitionType]. If not " "set, the default transition is used from the [SceneTreeTween] that contains " @@ -35329,6 +35385,12 @@ msgid "Creates the agent." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]agent[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" @@ -35398,6 +35460,12 @@ msgid "Create a new map." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation agents [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns the map cell size." msgstr "Palauttaa parametrin arkussinin." @@ -35425,6 +35493,12 @@ msgid "Returns the navigation path to reach the destination from the origin." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation regions [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns [code]true[/code] if the map is active." msgstr "Palauttaa parametrin kosinin." @@ -35448,6 +35522,12 @@ msgid "Creates a new region." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]region[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Sets the map for the region." msgstr "Palauttaa parametrin sinin." @@ -35927,19 +36007,60 @@ msgid "Represents the size of the [enum SourceGeometryMode] enum." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "This class is responsible for creating and clearing navigation meshes." +msgid "Helper class for creating and clearing navigation meshes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml msgid "" -"Bakes the navigation mesh. This will allow you to use pathfinding with the " -"navigation system." +"This class is responsible for creating and clearing 3D navigation meshes " +"used as [NavigationMesh] resources inside [NavigationMeshInstance]. The " +"[NavigationMeshGenerator] has very limited to no use for 2D as the " +"navigation mesh baking process expects 3D node types and 3D source geometry " +"to parse.\n" +"The entire navigation mesh baking is best done in a separate thread as the " +"voxelization, collision tests and mesh optimization steps involved are very " +"performance and time hungry operations.\n" +"Navigation mesh baking happens in multiple steps and the result depends on " +"3D source geometry and properties of the [NavigationMesh] resource. In the " +"first step, starting from a root node and depending on [NavigationMesh] " +"properties all valid 3D source geometry nodes are collected from the " +"[SceneTree]. Second, all collected nodes are parsed for their relevant 3D " +"geometry data and a combined 3D mesh is build. Due to the many different " +"types of parsable objects, from normal [MeshInstance]s to [CSGShape]s or " +"various [CollisionObject]s, some operations to collect geometry data can " +"trigger [VisualServer] and [PhysicsServer] synchronizations. Server " +"synchronization can have a negative effect on baking time or framerate as it " +"often involves [Mutex] locking for thread security. Many parsable objects " +"and the continuous synchronization with other threaded Servers can increase " +"the baking time significantly. On the other hand only a few but very large " +"and complex objects will take some time to prepare for the Servers which can " +"noticeably stall the next frame render. As a general rule the total amount " +"of parsable objects and their individual size and complexity should be " +"balanced to avoid framerate issues or very long baking times. The combined " +"mesh is then passed to the Recast Navigation Object to test the source " +"geometry for walkable terrain suitable to [NavigationMesh] agent properties " +"by creating a voxel world around the meshes bounding area.\n" +"The finalized navigation mesh is then returned and stored inside the " +"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "Clears the navigation mesh." +msgid "" +"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " +"nodes under the provided [code]root_node[/code] or a specific group of nodes " +"for potential source geometry. The parse behavior can be controlled with the " +"[member NavigationMesh.geometry/parsed_geometry_type] and [member " +"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[NavigationMesh] resource." msgstr "" +#: doc/classes/NavigationMeshGenerator.xml +#, fuzzy +msgid "" +"Removes all polygons and vertices from the provided [code]nav_mesh[/code] " +"resource." +msgstr "Laskee kahden vektorin ristitulon." + #: doc/classes/NavigationMeshInstance.xml msgid "An instance of a [NavigationMesh]." msgstr "" @@ -35958,7 +36079,10 @@ msgid "" "thread is useful because navigation baking is not a cheap operation. When it " "is completed, it automatically sets the new [NavigationMesh]. Please note " "that baking on separate thread may be very slow if geometry is parsed from " -"meshes as async access to each mesh involves heavy synchronization." +"meshes as async access to each mesh involves heavy synchronization. Also, " +"please note that baking on a separate thread is automatically disabled on " +"operating systems that cannot use threads (such as HTML5 with threads " +"disabled)." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -36004,6 +36128,11 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle.xml +#, fuzzy +msgid "Returns the [RID] of this obstacle on the [NavigationServer]." +msgstr "Palauttaa parametrin sinin." + +#: doc/classes/NavigationObstacle.xml msgid "" "Sets the [Navigation] node used by the obstacle. Useful when you don't want " "to make the obstacle a child of a [Navigation] node." @@ -36040,6 +36169,11 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle2D.xml +#, fuzzy +msgid "Returns the [RID] of this obstacle on the [Navigation2DServer]." +msgstr "Palauttaa parametrin sinin." + +#: doc/classes/NavigationObstacle2D.xml msgid "" "Sets the [Navigation2D] node used by the obstacle. Useful when you don't " "want to make the obstacle a child of a [Navigation2D] node." @@ -37228,7 +37362,7 @@ msgstr "" #: doc/classes/Node.xml msgid "" "Returns [code]true[/code] if the physics interpolated flag is set for this " -"Node (see [method set_physics_interpolated]).\n" +"Node (see [member physics_interpolation_mode]).\n" "[b]Note:[/b] Interpolation will only be active is both the flag is set " "[b]and[/b] physics interpolation is enabled within the [SceneTree]. This can " "be tested using [method is_physics_interpolated_and_enabled]." @@ -37236,8 +37370,8 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Returns [code]true[/code] if physics interpolation is enabled (see [method " -"set_physics_interpolated]) [b]and[/b] enabled in the [SceneTree].\n" +"Returns [code]true[/code] if physics interpolation is enabled (see [member " +"physics_interpolation_mode]) [b]and[/b] enabled in the [SceneTree].\n" "This is a convenience version of [method is_physics_interpolated] that also " "checks whether physics interpolation is enabled globally.\n" "See [member SceneTree.physics_interpolation] and [member ProjectSettings." @@ -37531,14 +37665,6 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Enables or disables physics interpolation per node, offering a finer grain " -"of control than turning physics interpolation on and off globally.\n" -"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " -"interpolation can sometimes give superior results." -msgstr "" - -#: doc/classes/Node.xml -msgid "" "Enables or disables physics (i.e. fixed framerate) processing. When a node " "is being processed, it will receive a [constant " "NOTIFICATION_PHYSICS_PROCESS] at a fixed (usually 60 FPS, see [member Engine." @@ -37671,6 +37797,15 @@ msgstr "" #: doc/classes/Node.xml msgid "" +"Allows enabling or disabling physics interpolation per node, offering a " +"finer grain of control than turning physics interpolation on and off " +"globally.\n" +"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " +"interpolation can sometimes give superior results." +msgstr "" + +#: doc/classes/Node.xml +msgid "" "The node's priority in the execution order of the enabled processing " "callbacks (i.e. [constant NOTIFICATION_PROCESS], [constant " "NOTIFICATION_PHYSICS_PROCESS] and their internal counterparts). Nodes whose " @@ -37832,6 +37967,24 @@ msgid "Continue to process regardless of the [SceneTree] pause state." msgstr "" #: doc/classes/Node.xml +msgid "" +"Inherits physics interpolation mode from the node's parent. For the root " +"node, it is equivalent to [constant PHYSICS_INTERPOLATION_MODE_ON]. Default." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn off physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn on physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml msgid "Duplicate the node's signals." msgstr "" @@ -39073,7 +39226,7 @@ msgstr "Laskee kahden vektorin ristitulon." #: doc/classes/OptionButton.xml msgid "" -"Returns the ID of the selected item, or [code]0[/code] if no item is " +"Returns the ID of the selected item, or [code]-1[/code] if no item is " "selected." msgstr "" @@ -39095,7 +39248,8 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" "Selects an item by index and makes it the current item. This will work even " -"if the item is disabled." +"if the item is disabled.\n" +"Passing [code]-1[/code] as the index deselects any currently selected item." msgstr "" #: doc/classes/OptionButton.xml @@ -44435,6 +44589,15 @@ msgid "" "should always be preferred." msgstr "" +#: doc/classes/PoolByteArray.xml doc/classes/PoolColorArray.xml +#: doc/classes/PoolIntArray.xml doc/classes/PoolRealArray.xml +#: doc/classes/PoolStringArray.xml doc/classes/PoolVector2Array.xml +#: doc/classes/PoolVector3Array.xml +msgid "" +"Returns [code]true[/code] if the array contains the given value.\n" +"[b]Note:[/b] This is equivalent to using the [code]in[/code] operator." +msgstr "" + #: doc/classes/PoolByteArray.xml msgid "" "Returns a hexadecimal representation of this array as a [String].\n" @@ -45229,6 +45392,10 @@ msgid "[Font] used for the menu items." msgstr "" #: doc/classes/PopupMenu.xml +msgid "[Font] used for the labeled separator." +msgstr "" + +#: doc/classes/PopupMenu.xml msgid "[Texture] icon for the checked checkbox items." msgstr "" @@ -48675,19 +48842,6 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used easing from [enum Tween.EaseType]. If not set, the " -"default easing is used from the [Tween] that contains this Tweener." -msgstr "" - -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used transition from [enum Tween.TransitionType]. If not " -"set, the default transition is used from the [Tween] that contains this " -"Tweener." -msgstr "" - #: doc/classes/ProximityGroup.xml msgid "General-purpose 3D proximity detection node." msgstr "" @@ -53519,8 +53673,15 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape touches another. If there are " -"no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape touches another.\n" +"If there are no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the shape to check collisions with " "([code]with_shape[/code]), and the transformation matrix of that shape " @@ -53541,8 +53702,16 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape would touch another, if a " -"given movement was applied. If there are no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape would touch another, " +"if a given movement was applied.\n" +"If there would be no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the movement to test on this shape " "([code]local_motion[/code]), the shape to check collisions with " diff --git a/doc/translations/fil.po b/doc/translations/fil.po index d5533cf3b8..d0e5d18650 100644 --- a/doc/translations/fil.po +++ b/doc/translations/fil.po @@ -5,12 +5,13 @@ # # Jethro Parker <lionbearjet@hotmail.com>, 2020. # Pierre Stempin <pierre.stempin@gmail.com>, 2020. +# Marco Santos <enum.scima@gmail.com>, 2022. msgid "" msgstr "" "Project-Id-Version: Godot Engine class reference\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" -"PO-Revision-Date: 2020-10-07 06:10+0000\n" -"Last-Translator: Pierre Stempin <pierre.stempin@gmail.com>\n" +"PO-Revision-Date: 2022-05-15 09:39+0000\n" +"Last-Translator: Marco Santos <enum.scima@gmail.com>\n" "Language-Team: Filipino <https://hosted.weblate.org/projects/godot-engine/" "godot-class-reference/fil/>\n" "Language: fil\n" @@ -19,7 +20,7 @@ msgstr "" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=2; plural=n != 1 && n != 2 && n != 3 && (n % 10 == 4 " "|| n % 10 == 6 || n % 10 == 9);\n" -"X-Generator: Weblate 4.3-dev\n" +"X-Generator: Weblate 4.13-dev\n" #: doc/tools/make_rst.py msgid "Description" @@ -27,107 +28,115 @@ msgstr "Paglalarawan" #: doc/tools/make_rst.py msgid "Tutorials" -msgstr "Mga tutorial" +msgstr "Mga Tutorial" #: doc/tools/make_rst.py msgid "Properties" -msgstr "" +msgstr "Mga Property" #: doc/tools/make_rst.py msgid "Methods" -msgstr "" +msgstr "Mga Method" #: doc/tools/make_rst.py msgid "Theme Properties" -msgstr "" +msgstr "Mga Property ng Tema" #: doc/tools/make_rst.py msgid "Signals" -msgstr "" +msgstr "Mga Signal" #: doc/tools/make_rst.py msgid "Enumerations" -msgstr "" +msgstr "Mga Enumeration" #: doc/tools/make_rst.py msgid "Constants" -msgstr "" +msgstr "Mga Constant" #: doc/tools/make_rst.py msgid "Property Descriptions" -msgstr "" +msgstr "Mga Paglalarawan sa Property" #: doc/tools/make_rst.py msgid "Method Descriptions" -msgstr "" +msgstr "Mga Paglalarawan sa Method" #: doc/tools/make_rst.py msgid "Theme Property Descriptions" -msgstr "" +msgstr "Mga Paglalarawan sa Property ng Tema" #: doc/tools/make_rst.py msgid "Inherits:" -msgstr "" +msgstr "Minamana ang:" #: doc/tools/make_rst.py msgid "Inherited By:" -msgstr "" +msgstr "Minamana ng:" #: doc/tools/make_rst.py msgid "(overrides %s)" -msgstr "" +msgstr "(ino-override ang %s)" #: doc/tools/make_rst.py msgid "Default" -msgstr "" +msgstr "Default" #: doc/tools/make_rst.py msgid "Setter" -msgstr "" +msgstr "Setter" #: doc/tools/make_rst.py msgid "value" -msgstr "" +msgstr "value" #: doc/tools/make_rst.py msgid "Getter" -msgstr "" +msgstr "Getter" #: doc/tools/make_rst.py msgid "" "This method should typically be overridden by the user to have any effect." -msgstr "" +msgstr "Dapat tipikal na ino-override ang method na ito ng user para umepekto." #: doc/tools/make_rst.py msgid "" "This method has no side effects. It doesn't modify any of the instance's " "member variables." msgstr "" +"Walang mga side effect ang method na ito. Wala itong binabago na kahit anong " +"mga kasaping variable ng instance." #: doc/tools/make_rst.py msgid "" "This method accepts any number of arguments after the ones described here." msgstr "" +"Tumatanggap ang method na ito ng kahit ilang bilang ng argumento pagkatapos " +"ng mga nailarawan rito." #: doc/tools/make_rst.py msgid "This method is used to construct a type." -msgstr "" +msgstr "Ginagamit para mag-construct ng type ang method na ito." #: doc/tools/make_rst.py msgid "" "This method doesn't need an instance to be called, so it can be called " "directly using the class name." msgstr "" +"Di kailangan ng method na ito na magtawag ng isang instance, kaya pwede " +"itong direktang tawagin gamit ang pangalan ng class." #: doc/tools/make_rst.py msgid "" "This method describes a valid operator to use with this type as left-hand " "operand." msgstr "" +"Inilalarawan ng method na ito ang isang valid na operator na gagamitin para " +"sa type na ito bilang isang operand sa kaliwa." #: modules/gdscript/doc_classes/@GDScript.xml msgid "Built-in GDScript functions." -msgstr "" +msgstr "Mga built-in na GDScript function." #: modules/gdscript/doc_classes/@GDScript.xml msgid "" @@ -934,11 +943,12 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Random range, any floating point value between [code]from[/code] and " -"[code]to[/code].\n" +"Returns a random floating point value between [code]from[/code] and " +"[code]to[/code] (both endpoints inclusive).\n" "[codeblock]\n" "prints(rand_range(0, 1), rand_range(0, 1)) # Prints e.g. 0.135591 0.405263\n" -"[/codeblock]" +"[/codeblock]\n" +"[b]Note:[/b] This is equivalent to [code]randf() * (to - from) + from[/code]." msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml @@ -982,37 +992,36 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Returns an array with the given range. Range can be 1 argument [code]N[/" -"code] (0 to [code]N[/code] - 1), two arguments ([code]initial[/code], " -"[code]final - 1[/code]) or three arguments ([code]initial[/code], " -"[code]final - 1[/code], [code]increment[/code]). Returns an empty array if " -"the range isn't valid (e.g. [code]range(2, 5, -1)[/code] or [code]range(5, " -"5, 1)[/code]).\n" -"Returns an array with the given range. [code]range()[/code] can have 1 " -"argument N ([code]0[/code] to [code]N - 1[/code]), two arguments " -"([code]initial[/code], [code]final - 1[/code]) or three arguments " -"([code]initial[/code], [code]final - 1[/code], [code]increment[/code]). " -"[code]increment[/code] can be negative. If [code]increment[/code] is " -"negative, [code]final - 1[/code] will become [code]final + 1[/code]. Also, " -"the initial value must be greater than the final value for the loop to run.\n" -"[codeblock]\n" -"print(range(4))\n" -"print(range(2, 5))\n" -"print(range(0, 6, 2))\n" -"[/codeblock]\n" -"Output:\n" +"Returns an array with the given range. [method range] can be called in three " +"ways:\n" +"[code]range(n: int)[/code]: Starts from 0, increases by steps of 1, and " +"stops [i]before[/i] [code]n[/code]. The argument [code]n[/code] is " +"[b]exclusive[/b].\n" +"[code]range(b: int, n: int)[/code]: Starts from [code]b[/code], increases by " +"steps of 1, and stops [i]before[/i] [code]n[/code]. The arguments [code]b[/" +"code] and [code]n[/code] are [b]inclusive[/b] and [b]exclusive[/b], " +"respectively.\n" +"[code]range(b: int, n: int, s: int)[/code]: Starts from [code]b[/code], " +"increases/decreases by steps of [code]s[/code], and stops [i]before[/i] " +"[code]n[/code]. The arguments [code]b[/code] and [code]n[/code] are " +"[b]inclusive[/b] and [b]exclusive[/b], respectively. The argument [code]s[/" +"code] [b]can[/b] be negative, but not [code]0[/code]. If [code]s[/code] is " +"[code]0[/code], an error message is printed.\n" +"[method range] converts all arguments to [int] before processing.\n" +"[b]Note:[/b] Returns an empty array if no value meets the value constraint " +"(e.g. [code]range(2, 5, -1)[/code] or [code]range(5, 5, 1)[/code]).\n" +"Examples:\n" "[codeblock]\n" -"[0, 1, 2, 3]\n" -"[2, 3, 4]\n" -"[0, 2, 4]\n" +"print(range(4)) # Prints [0, 1, 2, 3]\n" +"print(range(2, 5)) # Prints [2, 3, 4]\n" +"print(range(0, 6, 2)) # Prints [0, 2, 4]\n" +"print(range(4, 1, -1)) # Prints [4, 3, 2]\n" "[/codeblock]\n" "To iterate over an [Array] backwards, use:\n" "[codeblock]\n" "var array = [3, 6, 9]\n" -"var i := array.size() - 1\n" -"while i >= 0:\n" -" print(array[i])\n" -" i -= 1\n" +"for i in range(array.size(), 0, -1):\n" +" print(array[i - 1])\n" "[/codeblock]\n" "Output:\n" "[codeblock]\n" @@ -4107,17 +4116,24 @@ msgid "Maximum value for the mode enum." msgstr "" #: doc/classes/AnimatedSprite.xml -msgid "Sprite node that can use multiple textures for animation." +msgid "" +"Sprite node that contains multiple textures as frames to play for animation." msgstr "" #: doc/classes/AnimatedSprite.xml msgid "" -"Animations are created using a [SpriteFrames] resource, which can be " -"configured in the editor via the SpriteFrames panel.\n" -"[b]Note:[/b] You can associate a set of normal maps by creating additional " -"[SpriteFrames] resources with a [code]_normal[/code] suffix. For example, " -"having 2 [SpriteFrames] resources [code]run[/code] and [code]run_normal[/" -"code] will make it so the [code]run[/code] animation uses the normal map." +"[AnimatedSprite] is similar to the [Sprite] node, except it carries multiple " +"textures as animation frames. Animations are created using a [SpriteFrames] " +"resource, which allows you to import image files (or a folder containing " +"said files) to provide the animation frames for the sprite. The " +"[SpriteFrames] resource can be configured in the editor via the SpriteFrames " +"bottom panel.\n" +"[b]Note:[/b] You can associate a set of normal or specular maps by creating " +"additional [SpriteFrames] resources with a [code]_normal[/code] or " +"[code]_specular[/code] suffix. For example, having 3 [SpriteFrames] " +"resources [code]run[/code], [code]run_normal[/code], and [code]run_specular[/" +"code] will make it so the [code]run[/code] animation uses normal and " +"specular maps." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml @@ -4145,9 +4161,9 @@ msgstr "" msgid "Stops the current animation (does not reset the frame counter)." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml +#: doc/classes/AnimatedSprite.xml msgid "" -"The current animation from the [code]frames[/code] resource. If this value " +"The current animation from the [member frames] resource. If this value " "changes, the [code]frame[/code] counter is reset." msgstr "" @@ -4171,8 +4187,11 @@ msgstr "" msgid "The displayed animation frame's index." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml -msgid "The [SpriteFrames] resource containing the animation(s)." +#: doc/classes/AnimatedSprite.xml +msgid "" +"The [SpriteFrames] resource containing the animation(s). Allows you the " +"option to load, edit, clear, make unique and save the states of the " +"[SpriteFrames] resource." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/Sprite.xml @@ -4224,6 +4243,16 @@ msgid "" "provided, the current animation is played." msgstr "" +#: doc/classes/AnimatedSprite3D.xml +msgid "" +"The current animation from the [code]frames[/code] resource. If this value " +"changes, the [code]frame[/code] counter is reset." +msgstr "" + +#: doc/classes/AnimatedSprite3D.xml +msgid "The [SpriteFrames] resource containing the animation(s)." +msgstr "" + #: doc/classes/AnimatedTexture.xml msgid "Proxy texture for simple frame-based animations." msgstr "" @@ -4739,11 +4768,11 @@ msgstr "" msgid "No interpolation (nearest value)." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Linear interpolation." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Cubic interpolation." msgstr "" @@ -5778,7 +5807,10 @@ msgid "" "Seeks the animation to the [code]seconds[/code] point in time (in seconds). " "If [code]update[/code] is [code]true[/code], the animation updates too, " "otherwise it updates at process time. Events between the current frame and " -"[code]seconds[/code] are skipped." +"[code]seconds[/code] are skipped.\n" +"[b]Note:[/b] Seeking to the end of the animation doesn't emit [signal " +"animation_finished]. If you want to skip animation and emit the signal, use " +"[method advance]." msgstr "" #: doc/classes/AnimationPlayer.xml @@ -6968,7 +7000,10 @@ msgid "" "[code]0[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "Returns the number of times an element is in the array." msgstr "" @@ -7013,10 +7048,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array for a value and returns its index or [code]-1[/code] if " -"not found. Optionally, the initial search index can be passed." +"not found. Optionally, the initial search index can be passed. Returns " +"[code]-1[/code] if [code]from[/code] is out of bounds." msgstr "" #: doc/classes/Array.xml @@ -7154,11 +7193,15 @@ msgid "" "[code]null[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array in reverse order. Optionally, a start search index can be " "passed. If negative, the start index is considered relative to the end of " -"the array." +"the array. If the adjusted start index is out of bounds, this method " +"searches from the end of the array." msgstr "" #: doc/classes/Array.xml @@ -8293,7 +8336,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -8515,7 +8558,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -11626,17 +11669,17 @@ msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a normal vector in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a 3D position in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml @@ -13885,7 +13928,9 @@ msgstr "" #: doc/classes/CollisionPolygon2D.xml msgid "" "If [code]true[/code], only edges that face up, relative to " -"[CollisionPolygon2D]'s rotation, will collide with other objects." +"[CollisionPolygon2D]'s rotation, will collide with other objects.\n" +"[b]Note:[/b] This property has no effect if this [CollisionPolygon2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionPolygon2D.xml @@ -13981,7 +14026,9 @@ msgstr "" #: doc/classes/CollisionShape2D.xml msgid "" "Sets whether this collision shape should only detect collision on one side " -"(top or bottom)." +"(top or bottom).\n" +"[b]Note:[/b] This property has no effect if this [CollisionShape2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionShape2D.xml @@ -22387,6 +22434,10 @@ msgid "" "same behavior." msgstr "" +#: doc/classes/EditorSpinSlider.xml +msgid "If [code]true[/code], the slider is hidden." +msgstr "" + #: doc/classes/EditorVCSInterface.xml msgid "" "Version Control System (VCS) interface, which reads and writes to the local " @@ -25971,9 +26022,22 @@ msgid "Gradient's colors returned as a [PoolColorArray]." msgstr "" #: doc/classes/Gradient.xml +msgid "" +"Defines how the colors between points of the gradient are interpolated. See " +"[enum InterpolationMode] for available modes." +msgstr "" + +#: doc/classes/Gradient.xml msgid "Gradient's offsets returned as a [PoolRealArray]." msgstr "" +#: doc/classes/Gradient.xml +msgid "" +"Constant interpolation, color changes abruptly at each point and stays " +"uniform between. This might cause visible aliasing when used for a gradient " +"texture in some cases." +msgstr "" + #: doc/classes/GradientTexture.xml msgid "Gradient-filled texture." msgstr "" @@ -34495,13 +34559,13 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used easing from [enum Tween.EaseType]. If not set, the " "default easing is used from the [SceneTreeTween] that contains this Tweener." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used transition from [enum Tween.TransitionType]. If not " "set, the default transition is used from the [SceneTreeTween] that contains " @@ -35207,6 +35271,12 @@ msgid "Creates the agent." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]agent[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" @@ -35270,6 +35340,12 @@ msgid "Create a new map." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation agents [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns the map cell size." msgstr "" @@ -35296,6 +35372,12 @@ msgid "Returns the navigation path to reach the destination from the origin." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation regions [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns [code]true[/code] if the map is active." msgstr "" @@ -35317,6 +35399,12 @@ msgid "Creates a new region." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]region[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the map for the region." msgstr "" @@ -35789,17 +35877,57 @@ msgid "Represents the size of the [enum SourceGeometryMode] enum." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "This class is responsible for creating and clearing navigation meshes." +msgid "Helper class for creating and clearing navigation meshes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml msgid "" -"Bakes the navigation mesh. This will allow you to use pathfinding with the " -"navigation system." +"This class is responsible for creating and clearing 3D navigation meshes " +"used as [NavigationMesh] resources inside [NavigationMeshInstance]. The " +"[NavigationMeshGenerator] has very limited to no use for 2D as the " +"navigation mesh baking process expects 3D node types and 3D source geometry " +"to parse.\n" +"The entire navigation mesh baking is best done in a separate thread as the " +"voxelization, collision tests and mesh optimization steps involved are very " +"performance and time hungry operations.\n" +"Navigation mesh baking happens in multiple steps and the result depends on " +"3D source geometry and properties of the [NavigationMesh] resource. In the " +"first step, starting from a root node and depending on [NavigationMesh] " +"properties all valid 3D source geometry nodes are collected from the " +"[SceneTree]. Second, all collected nodes are parsed for their relevant 3D " +"geometry data and a combined 3D mesh is build. Due to the many different " +"types of parsable objects, from normal [MeshInstance]s to [CSGShape]s or " +"various [CollisionObject]s, some operations to collect geometry data can " +"trigger [VisualServer] and [PhysicsServer] synchronizations. Server " +"synchronization can have a negative effect on baking time or framerate as it " +"often involves [Mutex] locking for thread security. Many parsable objects " +"and the continuous synchronization with other threaded Servers can increase " +"the baking time significantly. On the other hand only a few but very large " +"and complex objects will take some time to prepare for the Servers which can " +"noticeably stall the next frame render. As a general rule the total amount " +"of parsable objects and their individual size and complexity should be " +"balanced to avoid framerate issues or very long baking times. The combined " +"mesh is then passed to the Recast Navigation Object to test the source " +"geometry for walkable terrain suitable to [NavigationMesh] agent properties " +"by creating a voxel world around the meshes bounding area.\n" +"The finalized navigation mesh is then returned and stored inside the " +"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "Clears the navigation mesh." +msgid "" +"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " +"nodes under the provided [code]root_node[/code] or a specific group of nodes " +"for potential source geometry. The parse behavior can be controlled with the " +"[member NavigationMesh.geometry/parsed_geometry_type] and [member " +"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[NavigationMesh] resource." +msgstr "" + +#: doc/classes/NavigationMeshGenerator.xml +msgid "" +"Removes all polygons and vertices from the provided [code]nav_mesh[/code] " +"resource." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -35820,7 +35948,10 @@ msgid "" "thread is useful because navigation baking is not a cheap operation. When it " "is completed, it automatically sets the new [NavigationMesh]. Please note " "that baking on separate thread may be very slow if geometry is parsed from " -"meshes as async access to each mesh involves heavy synchronization." +"meshes as async access to each mesh involves heavy synchronization. Also, " +"please note that baking on a separate thread is automatically disabled on " +"operating systems that cannot use threads (such as HTML5 with threads " +"disabled)." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -35866,6 +35997,10 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle.xml +msgid "Returns the [RID] of this obstacle on the [NavigationServer]." +msgstr "" + +#: doc/classes/NavigationObstacle.xml msgid "" "Sets the [Navigation] node used by the obstacle. Useful when you don't want " "to make the obstacle a child of a [Navigation] node." @@ -35902,6 +36037,10 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle2D.xml +msgid "Returns the [RID] of this obstacle on the [Navigation2DServer]." +msgstr "" + +#: doc/classes/NavigationObstacle2D.xml msgid "" "Sets the [Navigation2D] node used by the obstacle. Useful when you don't " "want to make the obstacle a child of a [Navigation2D] node." @@ -37086,7 +37225,7 @@ msgstr "" #: doc/classes/Node.xml msgid "" "Returns [code]true[/code] if the physics interpolated flag is set for this " -"Node (see [method set_physics_interpolated]).\n" +"Node (see [member physics_interpolation_mode]).\n" "[b]Note:[/b] Interpolation will only be active is both the flag is set " "[b]and[/b] physics interpolation is enabled within the [SceneTree]. This can " "be tested using [method is_physics_interpolated_and_enabled]." @@ -37094,8 +37233,8 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Returns [code]true[/code] if physics interpolation is enabled (see [method " -"set_physics_interpolated]) [b]and[/b] enabled in the [SceneTree].\n" +"Returns [code]true[/code] if physics interpolation is enabled (see [member " +"physics_interpolation_mode]) [b]and[/b] enabled in the [SceneTree].\n" "This is a convenience version of [method is_physics_interpolated] that also " "checks whether physics interpolation is enabled globally.\n" "See [member SceneTree.physics_interpolation] and [member ProjectSettings." @@ -37389,14 +37528,6 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Enables or disables physics interpolation per node, offering a finer grain " -"of control than turning physics interpolation on and off globally.\n" -"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " -"interpolation can sometimes give superior results." -msgstr "" - -#: doc/classes/Node.xml -msgid "" "Enables or disables physics (i.e. fixed framerate) processing. When a node " "is being processed, it will receive a [constant " "NOTIFICATION_PHYSICS_PROCESS] at a fixed (usually 60 FPS, see [member Engine." @@ -37529,6 +37660,15 @@ msgstr "" #: doc/classes/Node.xml msgid "" +"Allows enabling or disabling physics interpolation per node, offering a " +"finer grain of control than turning physics interpolation on and off " +"globally.\n" +"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " +"interpolation can sometimes give superior results." +msgstr "" + +#: doc/classes/Node.xml +msgid "" "The node's priority in the execution order of the enabled processing " "callbacks (i.e. [constant NOTIFICATION_PROCESS], [constant " "NOTIFICATION_PHYSICS_PROCESS] and their internal counterparts). Nodes whose " @@ -37690,6 +37830,24 @@ msgid "Continue to process regardless of the [SceneTree] pause state." msgstr "" #: doc/classes/Node.xml +msgid "" +"Inherits physics interpolation mode from the node's parent. For the root " +"node, it is equivalent to [constant PHYSICS_INTERPOLATION_MODE_ON]. Default." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn off physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn on physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml msgid "Duplicate the node's signals." msgstr "" @@ -38930,7 +39088,7 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" -"Returns the ID of the selected item, or [code]0[/code] if no item is " +"Returns the ID of the selected item, or [code]-1[/code] if no item is " "selected." msgstr "" @@ -38952,7 +39110,8 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" "Selects an item by index and makes it the current item. This will work even " -"if the item is disabled." +"if the item is disabled.\n" +"Passing [code]-1[/code] as the index deselects any currently selected item." msgstr "" #: doc/classes/OptionButton.xml @@ -44279,6 +44438,15 @@ msgid "" "should always be preferred." msgstr "" +#: doc/classes/PoolByteArray.xml doc/classes/PoolColorArray.xml +#: doc/classes/PoolIntArray.xml doc/classes/PoolRealArray.xml +#: doc/classes/PoolStringArray.xml doc/classes/PoolVector2Array.xml +#: doc/classes/PoolVector3Array.xml +msgid "" +"Returns [code]true[/code] if the array contains the given value.\n" +"[b]Note:[/b] This is equivalent to using the [code]in[/code] operator." +msgstr "" + #: doc/classes/PoolByteArray.xml msgid "" "Returns a hexadecimal representation of this array as a [String].\n" @@ -45072,6 +45240,10 @@ msgid "[Font] used for the menu items." msgstr "" #: doc/classes/PopupMenu.xml +msgid "[Font] used for the labeled separator." +msgstr "" + +#: doc/classes/PopupMenu.xml msgid "[Texture] icon for the checked checkbox items." msgstr "" @@ -48517,19 +48689,6 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used easing from [enum Tween.EaseType]. If not set, the " -"default easing is used from the [Tween] that contains this Tweener." -msgstr "" - -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used transition from [enum Tween.TransitionType]. If not " -"set, the default transition is used from the [Tween] that contains this " -"Tweener." -msgstr "" - #: doc/classes/ProximityGroup.xml msgid "General-purpose 3D proximity detection node." msgstr "" @@ -53359,8 +53518,15 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape touches another. If there are " -"no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape touches another.\n" +"If there are no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the shape to check collisions with " "([code]with_shape[/code]), and the transformation matrix of that shape " @@ -53381,8 +53547,16 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape would touch another, if a " -"given movement was applied. If there are no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape would touch another, " +"if a given movement was applied.\n" +"If there would be no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the movement to test on this shape " "([code]local_motion[/code]), the shape to check collisions with " diff --git a/doc/translations/fr.po b/doc/translations/fr.po index bf6bfa6135..192cd0933e 100644 --- a/doc/translations/fr.po +++ b/doc/translations/fr.po @@ -61,7 +61,7 @@ msgstr "" "Project-Id-Version: Godot Engine class reference\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2022-05-05 13:38+0000\n" +"PO-Revision-Date: 2022-05-17 21:38+0000\n" "Last-Translator: Maxime Leroy <lisacintosh@gmail.com>\n" "Language-Team: French <https://hosted.weblate.org/projects/godot-engine/" "godot-class-reference/fr/>\n" @@ -70,7 +70,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.12.1\n" +"X-Generator: Weblate 4.13-dev\n" #: doc/tools/make_rst.py msgid "Description" @@ -894,6 +894,24 @@ msgid "" "[/codeblock]\n" "See also [method lerp] which performs the reverse of this operation." msgstr "" +"Retourne le facteur d'interpolation ou d'extrapolation suivant l'intervalle " +"spécifié dans [code]from[/code] et [code]to[/code], et la valeur interpolée " +"spécifiée par [code]weight[/code]. La valeur retournée sera entre [code]0.0[/" +"code] et [code]1.0[/code] si [code]weight[/code] est entre [code]from[/code] " +"et [code]to[/code] (inclus). Si [code]weight[/code] est en dehors de cet " +"intervalle, un facteur d'extrapolation sera retourné (une valeur inférieure " +"à [code]0.0[/code] ou supérieure à [code]1.0[/code]).\n" +"[codeblock]\n" +"# Le facteur d'interpolation de cet appel à `lerp()` ci-dessous est le " +"0.75.\n" +"var middle = lerp(20, 30, 0.75)\n" +"# `middle` est maintenant 27.5.\n" +"# Maintenant, on fait comme si on avait oublié le facteur d'interpolation " +"original et qu'on veut le calculer.\n" +"var ratio = inverse_lerp(20, 30, 27.5)\n" +"# `ratio` est maintenant 0.75.\n" +"[/codeblock]\n" +"Voir aussi [method lerp] qui fait l'opération inverse." #: modules/gdscript/doc_classes/@GDScript.xml msgid "" @@ -965,7 +983,6 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml -#, fuzzy msgid "" "Linearly interpolates between two values by the factor defined in " "[code]weight[/code]. To perform interpolation, [code]weight[/code] should be " @@ -993,9 +1010,12 @@ msgstr "" "la valeur de retour sera du même type ([code]lerp[/code] appelle alors la " "méthode du type de vecteur [code]linear_interpolate[/code]).\n" "[codeblock]\n" -"lerp(0, 4, 0.75) # Renvoie 3.0\n" -"lerp(Vector2(1, 5), Vector2(3, 2), 0.5) # Renvoie Vector2(2, 3.5)\n" -"[/codeblock]" +"lerp(0, 4, 0.75) # Retourne 3.0\n" +"lerp(Vector2(1, 5), Vector2(3, 2), 0.5) # Retourne Vector2(2, 3.5)\n" +"[/codeblock]\n" +"Voir aussi [method inverse_lerp] qui fait l'opération inverse. Pour fait une " +"interpolation plus douce avec [method lerp], combinez l'appel avec [method " +"ease] ou [method smoothstep]." #: modules/gdscript/doc_classes/@GDScript.xml #, fuzzy @@ -1527,12 +1547,14 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml +#, fuzzy msgid "" -"Random range, any floating point value between [code]from[/code] and " -"[code]to[/code].\n" +"Returns a random floating point value between [code]from[/code] and " +"[code]to[/code] (both endpoints inclusive).\n" "[codeblock]\n" "prints(rand_range(0, 1), rand_range(0, 1)) # Prints e.g. 0.135591 0.405263\n" -"[/codeblock]" +"[/codeblock]\n" +"[b]Note:[/b] This is equivalent to [code]randf() * (to - from) + from[/code]." msgstr "" "Plage aléatoire, toute valeur à virgule flottante comprise entre [code]from[/" "code] et [code]to[/code].\n" @@ -1606,39 +1628,37 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml -#, fuzzy msgid "" -"Returns an array with the given range. Range can be 1 argument [code]N[/" -"code] (0 to [code]N[/code] - 1), two arguments ([code]initial[/code], " -"[code]final - 1[/code]) or three arguments ([code]initial[/code], " -"[code]final - 1[/code], [code]increment[/code]). Returns an empty array if " -"the range isn't valid (e.g. [code]range(2, 5, -1)[/code] or [code]range(5, " -"5, 1)[/code]).\n" -"Returns an array with the given range. [code]range()[/code] can have 1 " -"argument N ([code]0[/code] to [code]N - 1[/code]), two arguments " -"([code]initial[/code], [code]final - 1[/code]) or three arguments " -"([code]initial[/code], [code]final - 1[/code], [code]increment[/code]). " -"[code]increment[/code] can be negative. If [code]increment[/code] is " -"negative, [code]final - 1[/code] will become [code]final + 1[/code]. Also, " -"the initial value must be greater than the final value for the loop to run.\n" -"[codeblock]\n" -"print(range(4))\n" -"print(range(2, 5))\n" -"print(range(0, 6, 2))\n" -"[/codeblock]\n" -"Output:\n" +"Returns an array with the given range. [method range] can be called in three " +"ways:\n" +"[code]range(n: int)[/code]: Starts from 0, increases by steps of 1, and " +"stops [i]before[/i] [code]n[/code]. The argument [code]n[/code] is " +"[b]exclusive[/b].\n" +"[code]range(b: int, n: int)[/code]: Starts from [code]b[/code], increases by " +"steps of 1, and stops [i]before[/i] [code]n[/code]. The arguments [code]b[/" +"code] and [code]n[/code] are [b]inclusive[/b] and [b]exclusive[/b], " +"respectively.\n" +"[code]range(b: int, n: int, s: int)[/code]: Starts from [code]b[/code], " +"increases/decreases by steps of [code]s[/code], and stops [i]before[/i] " +"[code]n[/code]. The arguments [code]b[/code] and [code]n[/code] are " +"[b]inclusive[/b] and [b]exclusive[/b], respectively. The argument [code]s[/" +"code] [b]can[/b] be negative, but not [code]0[/code]. If [code]s[/code] is " +"[code]0[/code], an error message is printed.\n" +"[method range] converts all arguments to [int] before processing.\n" +"[b]Note:[/b] Returns an empty array if no value meets the value constraint " +"(e.g. [code]range(2, 5, -1)[/code] or [code]range(5, 5, 1)[/code]).\n" +"Examples:\n" "[codeblock]\n" -"[0, 1, 2, 3]\n" -"[2, 3, 4]\n" -"[0, 2, 4]\n" +"print(range(4)) # Prints [0, 1, 2, 3]\n" +"print(range(2, 5)) # Prints [2, 3, 4]\n" +"print(range(0, 6, 2)) # Prints [0, 2, 4]\n" +"print(range(4, 1, -1)) # Prints [4, 3, 2]\n" "[/codeblock]\n" "To iterate over an [Array] backwards, use:\n" "[codeblock]\n" "var array = [3, 6, 9]\n" -"var i := array.size() - 1\n" -"while i >= 0:\n" -" print(array[i])\n" -" i -= 1\n" +"for i in range(array.size(), 0, -1):\n" +" print(array[i - 1])\n" "[/codeblock]\n" "Output:\n" "[codeblock]\n" @@ -1647,45 +1667,6 @@ msgid "" "3\n" "[/codeblock]" msgstr "" -"Renvoie un tableau avec la plage donnée reçu. La plage peut être un argument " -"[code]N[/code] (0 à [code]N[/code] - 1), deux arguments ([code]initial[/" -"code], [code]final - 1[/code]) ou trois arguments ([code]initial[/code], " -"[code]final - 1[/code], [code]increment[/code]). Renvoie un tableau vide si " -"la plage n'est pas valide (par exemple [code]plage(2, 5, -1)[/code] ou " -"[code]plage(5, 5, 1)[/code]).[/code]\n" -"Renvoie un tableau avec la plage donnée. [code]range()[/code] peut avoir 1 " -"argument N ([code]0[/code] à [code]N - 1[/code]), deux arguments " -"([code]initial[/code], [code]final - 1[/code]) ou trois arguments " -"([code]initial[/code], [code]final - 1[/code], [code]increment[/code]). " -"[code]increment[/code] peut être négatif. Si [code]increment[/code] est " -"négatif, [code]final - 1[/code] deviendra [code]final + 1[/code]. De plus, " -"la valeur initiale doit être supérieure à la valeur finale pour que la " -"boucle s'exécute.\n" -"[bloc de code]\n" -"print(range(4))\n" -"print(range(2, 5))\n" -"print(range(0, 6, 2))\n" -"[codeblock]\n" -"Sortie :\n" -"[codeblock]\n" -"[0, 1, 2, 3]\n" -"[2, 3, 4]\n" -"[0, 2, 4]\n" -"[codeblock]\n" -"Pour itérer sur un tableau en arrière, utilisez :\n" -"[codeblock]\n" -"var array = [3, 6, 9]\n" -"var i := array.size() - 1\n" -"while i >= 0 :\n" -" print(array[i])\n" -" i -= 1\n" -"[/codeblock]\n" -"Sortie :\n" -"[codeblock]\n" -"9\n" -"6\n" -"3\n" -"[codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" @@ -4088,6 +4069,8 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "MIDI continue message. Continue at the point the sequence was stopped." msgstr "" +"Le message de continuation en MIDI. Reprend la séquence où elle a été " +"arrêtée." #: doc/classes/@GlobalScope.xml msgid "MIDI stop message. Stop the current sequence." @@ -5290,7 +5273,6 @@ msgstr "" "MODE_CBC_ENCRYPT] ou [constant MODE_CBC_DECRYPT]." #: doc/classes/AESContext.xml -#, fuzzy msgid "" "Run the desired operation for this AES context. Will return a " "[PoolByteArray] containing the result of encrypting (or decrypting) the " @@ -5298,12 +5280,11 @@ msgid "" "[b]Note:[/b] The size of [code]src[/code] must be a multiple of 16. Apply " "some padding if needed." msgstr "" -"Exécute l'opération désirée pour ce contexte AES. Cette méthode retournerait " -"un [PackedByteArray] qui contiendra le résultat du cryptage (ou décryptage) " -"de l'[code]src[/code] donnée. Voyez [method start] pour le mode " -"d'opération.\n" -"Note : La taille de [code]src[/code] doit être une multiple de 16. Applique " -"du rembourrage si nécessaire." +"Exécute l'opération désirée pour ce contexte AES. Cette méthode retournera " +"un [PoolByteArray] qui contiendra le résultat du cryptage (ou décryptage) de " +"la [code]src[/code] donnée. Voyez [method start] pour le mode d'opération.\n" +"[b]Note :[/b] La taille de [code]src[/code] doit être un multiple de 16. " +"Applique du rembourrage si nécessaire." #: doc/classes/AESContext.xml msgid "AES electronic codebook encryption mode." @@ -5326,17 +5307,25 @@ msgid "Maximum value for the mode enum." msgstr "Valeur maximale pour le mode énumeration." #: doc/classes/AnimatedSprite.xml -msgid "Sprite node that can use multiple textures for animation." +#, fuzzy +msgid "" +"Sprite node that contains multiple textures as frames to play for animation." msgstr "NÅ“ud de sprite qui peut utiliser plusieurs textures pour l'animation." #: doc/classes/AnimatedSprite.xml msgid "" -"Animations are created using a [SpriteFrames] resource, which can be " -"configured in the editor via the SpriteFrames panel.\n" -"[b]Note:[/b] You can associate a set of normal maps by creating additional " -"[SpriteFrames] resources with a [code]_normal[/code] suffix. For example, " -"having 2 [SpriteFrames] resources [code]run[/code] and [code]run_normal[/" -"code] will make it so the [code]run[/code] animation uses the normal map." +"[AnimatedSprite] is similar to the [Sprite] node, except it carries multiple " +"textures as animation frames. Animations are created using a [SpriteFrames] " +"resource, which allows you to import image files (or a folder containing " +"said files) to provide the animation frames for the sprite. The " +"[SpriteFrames] resource can be configured in the editor via the SpriteFrames " +"bottom panel.\n" +"[b]Note:[/b] You can associate a set of normal or specular maps by creating " +"additional [SpriteFrames] resources with a [code]_normal[/code] or " +"[code]_specular[/code] suffix. For example, having 3 [SpriteFrames] " +"resources [code]run[/code], [code]run_normal[/code], and [code]run_specular[/" +"code] will make it so the [code]run[/code] animation uses normal and " +"specular maps." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml @@ -5368,9 +5357,10 @@ msgid "Stops the current animation (does not reset the frame counter)." msgstr "" "Arrête l'animation actuelle (ne remit pas à zéro le compteur de trames)." -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml +#: doc/classes/AnimatedSprite.xml +#, fuzzy msgid "" -"The current animation from the [code]frames[/code] resource. If this value " +"The current animation from the [member frames] resource. If this value " "changes, the [code]frame[/code] counter is reset." msgstr "" "L'animation actuelle de la ressource [code]frames[/code]. S'il y a un " @@ -5396,9 +5386,12 @@ msgstr "Si [code]vrai[/code], la texture est inversée verticalement." msgid "The displayed animation frame's index." msgstr "L'index de l'image d'animation affichée." -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml -msgid "The [SpriteFrames] resource containing the animation(s)." -msgstr "La ressource [SpriteFrames] qui contient l'animation." +#: doc/classes/AnimatedSprite.xml +msgid "" +"The [SpriteFrames] resource containing the animation(s). Allows you the " +"option to load, edit, clear, make unique and save the states of the " +"[SpriteFrames] resource." +msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/Sprite.xml #: doc/classes/SpriteBase3D.xml @@ -5458,6 +5451,18 @@ msgstr "" "Joue l'animation intitulée [code]anim[/code]. Si aucun [code]anim[/code] est " "fourni, l'animation actuelle est joué." +#: doc/classes/AnimatedSprite3D.xml +msgid "" +"The current animation from the [code]frames[/code] resource. If this value " +"changes, the [code]frame[/code] counter is reset." +msgstr "" +"L'animation actuelle de la ressource [code]frames[/code]. S'il y a un " +"changement dans la valeur, le compteur [code]frame[/code] est remis à zéro." + +#: doc/classes/AnimatedSprite3D.xml +msgid "The [SpriteFrames] resource containing the animation(s)." +msgstr "La ressource [SpriteFrames] qui contient l'animation." + #: doc/classes/AnimatedTexture.xml msgid "Proxy texture for simple frame-based animations." msgstr "Texture procuration pour des animations simples basés sur les trames." @@ -6180,11 +6185,11 @@ msgstr "" msgid "No interpolation (nearest value)." msgstr "Pas d'interpolation (valeur la plus proche)." -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Linear interpolation." msgstr "Interpolation linéaire." -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Cubic interpolation." msgstr "Interpolation cubique." @@ -7107,6 +7112,14 @@ msgid "" "state_machine.travel(\"some_state\")\n" "[/codeblock]" msgstr "" +"Autorise le contrôle de la machine à états du [AnimationTree] créée avec " +"[AnimationNodeStateMachine]. À récupérer grâce à [code]$AnimationTree." +"get(\"parameters/playback\")[/code].\n" +"[b]Exemple :[/b]\n" +"[codeblock]\n" +"var state_machine = $AnimationTree.get(\"parameters/playback\")\n" +"state_machine.travel(\"some_state\")\n" +"[/codeblock]" #: doc/classes/AnimationNodeStateMachinePlayback.xml msgid "Returns the currently playing animation state." @@ -7140,6 +7153,8 @@ msgid "" "Transitions from the current state to another one, following the shortest " "path." msgstr "" +"Les transitions de l'état actuel vers un autre, en suivant le chemin le plus " +"court." #: doc/classes/AnimationNodeStateMachineTransition.xml msgid "" @@ -7311,6 +7326,8 @@ msgid "" "Triggers the [code]anim_to[/code] animation when the [code]anim_from[/code] " "animation completes." msgstr "" +"Le déclencheur de l'animation [code]anim_to[/code] quand l'animation " +"[code]anim_from[/code] se termine." #: doc/classes/AnimationPlayer.xml msgid "" @@ -7326,6 +7343,7 @@ msgstr "Efface toutes les animations en file d’attente et non joués." msgid "" "Returns the name of [code]animation[/code] or an empty string if not found." msgstr "" +"Retourne le nom de [code]animation[/code] ou un chaine vide si n'existe pas." #: doc/classes/AnimationPlayer.xml msgid "" @@ -7420,7 +7438,10 @@ msgid "" "Seeks the animation to the [code]seconds[/code] point in time (in seconds). " "If [code]update[/code] is [code]true[/code], the animation updates too, " "otherwise it updates at process time. Events between the current frame and " -"[code]seconds[/code] are skipped." +"[code]seconds[/code] are skipped.\n" +"[b]Note:[/b] Seeking to the end of the animation doesn't emit [signal " +"animation_finished]. If you want to skip animation and emit the signal, use " +"[method advance]." msgstr "" #: doc/classes/AnimationPlayer.xml @@ -7448,6 +7469,9 @@ msgid "" "When set, would change the animation, but would not play it unless currently " "playing. See also [member current_animation]." msgstr "" +"Si en lecture, l'animation actuelle ; sinon, la dernière animation jouée. " +"Quand définit, l'animation change, mais n'est jouée que si en lecture. Voir " +"aussi [member current_animation]." #: doc/classes/AnimationPlayer.xml msgid "The name of the animation to play when the scene loads." @@ -7573,6 +7597,8 @@ msgstr "" msgid "" "A node to be used for advanced animation transitions in an [AnimationPlayer]." msgstr "" +"Un nÅ“ud utilisé pour les transitions avancées entre les animations d'un " +"[AnimationPlayer]." #: doc/classes/AnimationTree.xml msgid "" @@ -7830,9 +7856,8 @@ msgstr "" "différents nombres d'entrées." #: doc/classes/AnimationTreePlayer.xml -#, fuzzy msgid "Returns the input source for a given node input." -msgstr "Retourne le sommet à l’index donné." +msgstr "Retourne la source entrante pour l'entrée spécifiée du nÅ“ud." #: doc/classes/AnimationTreePlayer.xml #, fuzzy @@ -8206,12 +8231,16 @@ msgstr "" #: doc/classes/Area.xml doc/classes/Area2D.xml msgid "If [code]true[/code], other monitoring areas can detect this area." msgstr "" +"Si [code]true[/code], les autres aires surveillantes peut détecter cette " +"aire." #: doc/classes/Area.xml doc/classes/Area2D.xml msgid "" "If [code]true[/code], the area detects bodies or areas entering and exiting " "it." msgstr "" +"Si [code]true[/code], l'aire détecte les corps et aires lui entrants dedans " +"ou sortants d'elle." #: doc/classes/Area.xml doc/classes/Area2D.xml msgid "The area's priority. Higher priority areas are processed first." @@ -8561,6 +8590,38 @@ msgid "" "pushing/removing elements. Using [code]const[/code] will only prevent " "assigning the constant with another value after it was initialized." msgstr "" +"Un tableau générique qui peut contenir différents types d'éléments de tout " +"type, accessible par un indice numérique commençant à 0. Les indices " +"négatifs peuvent être utilisés pour utiliser une position à partir de la fin " +"du tableau, comme en Python (-1 pour le dernier élément, -2 l'avant-dernier, " +"etc.).\n" +"[b]Exemple :[/b]\n" +"[codeblock]\n" +"var array = [\"Un\", 2, 3, \"Quatre\"]\n" +"print(array[0]) # \"Un\"\n" +"print(array[2]) # 3\n" +"print(array[-1]) # \"Quatre\"\n" +"array[2] = \"Trois\"\n" +"print(array[-2]) # \"Trois\"\n" +"[/codeblock]\n" +"Les tableaux peuvent être concaténés (mis à la suite l'un de l'autre) avec " +"l'opérateur [code]+[/code] :\n" +"[codeblock]\n" +"var array1 = [\"Un\", 2]\n" +"var array2 = [3, \"Quatre\"]\n" +"print(array1 + array2) # [\"Un, 2, 3, \"Quatre\"]\n" +"[/codeblock]\n" +"[b]Note :[/b] Concaténer avec l'opérateur [code]+=[/code] créera un nouveau " +"tableau, ce qui a un coût. Si vous voulez ajouter un autre tableau à la " +"suite d'un tableau existant, [method append_array] est plus efficace.\n" +"[b]Note :[/b] Les tableaux sont toujours passés par référence. Pour obtenir " +"une copie d'un tableau qui peut être modifié indépendamment de l'original, " +"utilisez [method duplicate].\n" +"[b]Note :[/b] Lors de la déclaration d'un tableau avec [code]const[/code], " +"le tableau peut toujours être modifié en assignant des valeurs à l'aide " +"d'indices ou en ajoutant/retirant des éléments. Avec [code]const[/code], il " +"est seulement impossible assigner cette constante avec un autre tableau une " +"fois qu'elle a été initialisée." #: doc/classes/Array.xml msgid "Constructs an array from a [PoolColorArray]." @@ -8676,7 +8737,10 @@ msgid "" "[code]0[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "Returns the number of times an element is in the array." msgstr "" @@ -8721,10 +8785,15 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml +#, fuzzy msgid "" "Searches the array for a value and returns its index or [code]-1[/code] if " -"not found. Optionally, the initial search index can be passed." +"not found. Optionally, the initial search index can be passed. Returns " +"[code]-1[/code] if [code]from[/code] is out of bounds." msgstr "" "Trouve la première occurrence d'une sous-chaîne de caractères. Retourne le " "position de départ de la sous-chaîne de caractères ou [code]-1[/code] si non " @@ -8838,7 +8907,7 @@ msgstr "" #: doc/classes/Array.xml msgid "" "Appends an element at the end of the array. See also [method push_front]." -msgstr "" +msgstr "Ajout un élément à la fin du tableau. Voir aussi [method push_front]." #: doc/classes/Array.xml msgid "" @@ -8866,12 +8935,20 @@ msgid "" "[code]null[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml +#, fuzzy msgid "" "Searches the array in reverse order. Optionally, a start search index can be " "passed. If negative, the start index is considered relative to the end of " -"the array." +"the array. If the adjusted start index is out of bounds, this method " +"searches from the end of the array." msgstr "" +"Recherche dans le tableau dans l'ordre inversé. En option, la position de " +"début de la recherche peut être spécifiée. Si négative, la position de début " +"est considérée comme partant de la fin du tableau." #: doc/classes/Array.xml msgid "" @@ -9056,6 +9133,8 @@ msgid "" "Removes a surface at position [code]surf_idx[/code], shifting greater " "surfaces one [code]surf_idx[/code] slot down." msgstr "" +"Retire une surface à la position [code]surf_idx[/code], et décale toutes les " +"surfaces après [code]surf_idx[/code] d'une position." #: doc/classes/ArrayMesh.xml msgid "Sets a name for a given surface." @@ -9082,6 +9161,7 @@ msgstr "" #: doc/classes/ArrayMesh.xml msgid "Default value used for index_array_len when no indices are present." msgstr "" +"La valeur par défaut utilisée pour index_array_len quand il n'y pas d'indice." #: doc/classes/ArrayMesh.xml msgid "Amount of weights/bone indices per vertex (always 4)." @@ -9121,10 +9201,14 @@ msgid "" "[PoolRealArray] or [PoolIntArray] of bone indices. Each element in groups of " "4 floats." msgstr "" +"Un [PoolRealArray] ou [PoolIntArray] d'indices d'os. Il est composé de 4 " +"flottants consécutifs pour chaque indice." #: doc/classes/ArrayMesh.xml msgid "[PoolRealArray] of bone weights. Each element in groups of 4 floats." msgstr "" +"Un [PoolRealArray] de poids d'os. Il est composé de 4 flottants consécutifs " +"pour chaque poids." #: doc/classes/ArrayMesh.xml msgid "" @@ -10007,9 +10091,8 @@ msgid "" msgstr "Aligne les enfants avec le début du conteneur." #: doc/classes/AspectRatioContainer.xml -#, fuzzy msgid "Aligns child controls with the center of the container." -msgstr "Aligne les enfants avec le centre du conteneur." +msgstr "Aligne les contrôles enfants au centre du conteneur." #: doc/classes/AspectRatioContainer.xml #, fuzzy @@ -10074,6 +10157,9 @@ msgid "" "Called when computing the cost between two connected points.\n" "Note that this function is hidden in the default [code]AStar[/code] class." msgstr "" +"Appelé lors du calcul du coût entre deux points connectés.\n" +"À noter que cette fonction est masqué dans la classe [code]AStar[/code] par " +"défaut." #: doc/classes/AStar.xml msgid "" @@ -10081,12 +10167,15 @@ msgid "" "point.\n" "Note that this function is hidden in the default [code]AStar[/code] class." msgstr "" +"Appelé lors du calcul du coût entre un point et le dernier du chemin.\n" +"À noter que cette fonction est masqué dans la classe [code]AStar[/code] par " +"défaut." #: doc/classes/AStar.xml msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -10124,6 +10213,15 @@ msgid "" "astar.connect_points(1, 2, false)\n" "[/codeblock]" msgstr "" +"Crée un segment entre les points donnés. Si [code]bidirectional[/code] est " +"[code]false[/code], seuls les mouvements de [code]id[/code] vers " +"[code]to_id[/code] sera autorisés, et non dans le sens inverse.\n" +"[codeblock]\n" +"var astar = AStar.new()\n" +"astar.add_point(1, Vector3(1, 1, 0))\n" +"astar.add_point(2, Vector3(0, 5, 0))\n" +"astar.connect_points(1, 2, false)\n" +"[/codeblock]" #: doc/classes/AStar.xml msgid "" @@ -10135,6 +10233,8 @@ msgstr "" #: doc/classes/AStar.xml doc/classes/AStar2D.xml msgid "Returns the next available point ID with no point associated to it." msgstr "" +"Retourne l'identifiant du point disponible suivant avec aucun point lui " +"étant associé." #: doc/classes/AStar.xml doc/classes/AStar2D.xml msgid "" @@ -10161,6 +10261,18 @@ msgid "" "The result is in the segment that goes from [code]y = 0[/code] to [code]y = " "5[/code]. It's the closest position in the segment to the given point." msgstr "" +"Retourne la position la plus proche de [code]to_position[/code] qui est dans " +"un segment entre deux points connectés.\n" +"[codeblock]\n" +"var astar = AStar.new()\n" +"astar.add_point(1, Vector3(0, 0, 0))\n" +"astar.add_point(2, Vector3(0, 5, 0))\n" +"astar.connect_points(1, 2)\n" +"var res = astar.get_closest_position_in_segment(Vector3(3, 3, 0)) # Retourne " +"(0, 3, 0)\n" +"[/codeblock]\n" +"Le résultat est dans le segment qui va de [code]y = 0[/code] à [code]y = 5[/" +"code]. C'est la position la plus proche dans le segment du point donné." #: doc/classes/AStar.xml msgid "" @@ -10185,6 +10297,26 @@ msgid "" "4, 3][/code] instead, because now even though the distance is longer, it's " "\"easier\" to get through point 4 than through point 2." msgstr "" +"Retourne un tableau avec les identifiants des points qui forment le chemin " +"trouvé par AStar entre les points donnés. Le tableau est dans l'ordre du " +"point de départ de celui de l'arrivée.\n" +"[codeblock]\n" +"var astar = AStar.new()\n" +"astar.add_point(1, Vector3(0, 0, 0))\n" +"astar.add_point(2, Vector3(0, 1, 0), 1) # Le poids par défaut est 1\n" +"astar.add_point(3, Vector3(1, 1, 0))\n" +"astar.add_point(4, Vector3(2, 0, 0))\n" +"\n" +"astar.connect_points(1, 2, false)\n" +"astar.connect_points(2, 3, false)\n" +"astar.connect_points(4, 3, false)\n" +"astar.connect_points(1, 4, false)\n" +"\n" +"var res = astar.get_id_path(1, 3) # Retourne [1, 2, 3]\n" +"[/codeblock]\n" +"Si vous changez le poids du deuxième point à 3, alors le résultat sera " +"plutôt [code][1, 4, 3][/code], parce que même si la distance est plus " +"grande, c'est plus \"facile\" d'aller au point 4 qu'au point 2." #: doc/classes/AStar.xml doc/classes/AStar2D.xml msgid "" @@ -10209,10 +10341,24 @@ msgid "" "var neighbors = astar.get_point_connections(1) # Returns [2, 3]\n" "[/codeblock]" msgstr "" +"Retourne un tableau d'identifiants des points qui forment une connexion avec " +"le point spécifié.\n" +"[codeblock]\n" +"var astar = AStar.new()\n" +"astar.add_point(1, Vector3(0, 0, 0))\n" +"astar.add_point(2, Vector3(0, 1, 0))\n" +"astar.add_point(3, Vector3(1, 1, 0))\n" +"astar.add_point(4, Vector3(2, 0, 0))\n" +"\n" +"astar.connect_points(1, 2, true)\n" +"astar.connect_points(1, 3, true)\n" +"\n" +"var neighbors = astar.get_point_connections(1) # Retourne [2, 3]\n" +"[/codeblock]" #: doc/classes/AStar.xml doc/classes/AStar2D.xml msgid "Returns the number of points currently in the points pool." -msgstr "" +msgstr "Retourne le nombre de points actuellement dans le tas de points." #: doc/classes/AStar.xml msgid "" @@ -10222,11 +10368,17 @@ msgid "" "[b]Note:[/b] This method is not thread-safe. If called from a [Thread], it " "will return an empty [PoolVector3Array] and will print an error message." msgstr "" +"Retourne un tableau avec les points qui sont dans le chemin trouvé par AStar " +"entre les points données. Le tableau est dans l'ordre du point de départ " +"jusqu'au bout d'arrivée.\n" +"[b]Note :[/b] Cette méthode n'est pas thread-safe. Si appelé depuis un " +"[Thread], elle retournera un [PoolVector3Array] vide et affichera un message " +"d'erreur." #: doc/classes/AStar.xml doc/classes/AStar2D.xml msgid "" "Returns the position of the point associated with the given [code]id[/code]." -msgstr "" +msgstr "Retourne la position du point associé au [code]id[/code] spécifié." #: doc/classes/AStar.xml doc/classes/AStar2D.xml msgid "" @@ -10299,6 +10451,9 @@ msgid "" "Called when computing the cost between two connected points.\n" "Note that this function is hidden in the default [code]AStar2D[/code] class." msgstr "" +"Appelé lors du calcul du coût entre deux points connectés.\n" +"À noter que cette fonction est masqué dans la classe [code]AStar2D[/code] " +"par défaut." #: doc/classes/AStar2D.xml msgid "" @@ -10306,12 +10461,15 @@ msgid "" "point.\n" "Note that this function is hidden in the default [code]AStar2D[/code] class." msgstr "" +"Appelé lors du calcul du coût entre un point et le dernier du chemin.\n" +"À noter que cette fonction est masqué dans la classe [code]AStar2D[/code] " +"par défaut." #: doc/classes/AStar2D.xml msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -10328,7 +10486,7 @@ msgstr "" #: doc/classes/AStar2D.xml msgid "Returns whether there is a connection/segment between the given points." -msgstr "" +msgstr "Retourne s'il y a une connexion/segment entre les points spécifiés." #: doc/classes/AStar2D.xml msgid "" @@ -10342,6 +10500,15 @@ msgid "" "astar.connect_points(1, 2, false)\n" "[/codeblock]" msgstr "" +"Crée un segment entre les points donnés. Si [code]bidirectional[/code] est " +"[code]false[/code], seuls les mouvements de [code]id[/code] vers " +"[code]to_id[/code] sera autorisés, et non dans le sens inverse.\n" +"[codeblock]\n" +"var astar = AStar2D.new()\n" +"astar.add_point(1, Vector2(1, 1))\n" +"astar.add_point(2, Vector2(0, 5))\n" +"astar.connect_points(1, 2, false)\n" +"[/codeblock]" #: doc/classes/AStar2D.xml msgid "Deletes the segment between the given points." @@ -10413,6 +10580,12 @@ msgid "" "[b]Note:[/b] This method is not thread-safe. If called from a [Thread], it " "will return an empty [PoolVector2Array] and will print an error message." msgstr "" +"Retourne un tableau avec les points qui sont dans le chemin trouvé par " +"AStar2D entre les points données. Le tableau est dans l'ordre du point de " +"départ jusqu'au bout d'arrivée.\n" +"[b]Note :[/b] Cette méthode n'est pas thread-safe. Si appelé depuis un " +"[Thread], elle retournera un [PoolVector3Array] vide et affichera un message " +"d'erreur." #: doc/classes/AtlasTexture.xml msgid "" @@ -11194,6 +11367,7 @@ msgstr "Représente la taille de l'énumération [enum FFT_Size]." #: doc/classes/AudioEffectRecord.xml msgid "Audio effect used for recording the sound from an audio bus." msgstr "" +"L'effet audio utilisé pour l'enregistrement des sons venants d'un bus audio." #: doc/classes/AudioEffectRecord.xml msgid "" @@ -11345,6 +11519,9 @@ msgid "" "charge of creating sample data (playable audio) as well as its playback via " "a voice interface." msgstr "" +"[AudioServer] est une interface bas-niveau du serveur pour l'accès audio. Il " +"est chargé de créer des données échantillonnées (audio jouable) mais aussi " +"la lecture par une interface orale." #: doc/classes/AudioServer.xml doc/classes/AudioStreamPlayer.xml msgid "Audio Device Changer Demo" @@ -11365,10 +11542,11 @@ msgstr "" #: doc/classes/AudioServer.xml msgid "Returns the names of all audio input devices detected on the system." msgstr "" +"Retourne le nom de tous les appareils d'entrée audio détectés par le système." #: doc/classes/AudioServer.xml msgid "Generates an [AudioBusLayout] using the available buses and effects." -msgstr "" +msgstr "Génère un [AudioBusLayout] en utilisant les bus et effets disponibles." #: doc/classes/AudioServer.xml msgid "" @@ -11428,8 +11606,9 @@ msgid "Returns the names of all audio devices detected on the system." msgstr "" #: doc/classes/AudioServer.xml +#, fuzzy msgid "Returns the sample rate at the output of the [AudioServer]." -msgstr "" +msgstr "Retourne le débit de sortie du [AudioServer]." #: doc/classes/AudioServer.xml msgid "Returns the audio driver's output latency." @@ -11452,6 +11631,8 @@ msgid "" "If [code]true[/code], the bus at index [code]bus_idx[/code] is bypassing " "effects." msgstr "" +"Si [code]true[/code], le bus à l'index [code]bus_idx[/code] ignore les " +"effets." #: doc/classes/AudioServer.xml msgid "" @@ -11490,6 +11671,8 @@ msgid "" "Removes the effect at index [code]effect_idx[/code] from the bus at index " "[code]bus_idx[/code]." msgstr "" +"Retire l'effet à la position [code]effect_idx[/code] du bus à la position " +"[code]bus_idx[/code]." #: doc/classes/AudioServer.xml msgid "Overwrites the currently used [AudioBusLayout]." @@ -11703,6 +11886,8 @@ msgid "" "If [code]true[/code], the stream will automatically loop when it reaches the " "end." msgstr "" +"Si [code]true[/code], le flux se répètera automatiquement quand il aura " +"atteint la fin." #: modules/minimp3/doc_classes/AudioStreamMP3.xml #: modules/stb_vorbis/doc_classes/AudioStreamOGGVorbis.xml @@ -12343,6 +12528,8 @@ msgid "" "The environment color when [member environment_mode] is set to [constant " "ENVIRONMENT_MODE_CUSTOM_COLOR]." msgstr "" +"La couleur de l'environnement quand [member environment_mode] est à " +"[constant ENVIRONMENT_MODE_CUSTOM_COLOR]." #: doc/classes/BakedLightmap.xml msgid "" @@ -12356,6 +12543,8 @@ msgid "" "The [Sky] resource to use when [member environment_mode] is set o [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" +"La ressource [Sky] à utiliser quand [member environment_mode] est à " +"[constant ENVIRONMENT_MODE_CUSTOM_SKY]." #: doc/classes/BakedLightmap.xml #, fuzzy @@ -12689,6 +12878,8 @@ msgid "" "Require a press and a subsequent release before considering the button " "clicked." msgstr "" +"Requiert un appui suivi d'un relâchement avant de considérer le bouton comme " +"cliqué." #: doc/classes/Basis.xml msgid "3×3 matrix datatype." @@ -12853,15 +13044,15 @@ msgstr "" #: doc/classes/Basis.xml msgid "Transposed dot product with the X axis of the matrix." -msgstr "" +msgstr "Le produit scalaire de la matrice transposée avec l'axe X." #: doc/classes/Basis.xml msgid "Transposed dot product with the Y axis of the matrix." -msgstr "" +msgstr "Le produit scalaire de la matrice transposée avec l'axe Y." #: doc/classes/Basis.xml msgid "Transposed dot product with the Z axis of the matrix." -msgstr "" +msgstr "Le produit scalaire de la matrice transposée avec l'axe Z." #: doc/classes/Basis.xml msgid "Returns the transposed version of the matrix." @@ -12945,6 +13136,8 @@ msgstr "" msgid "" "Creates a bitmap with the specified size, filled with [code]false[/code]." msgstr "" +"Crée un bitmap de la taille spécifiée, rempli avec la valeur [code]false[/" +"code]." #: doc/classes/BitMap.xml msgid "" @@ -12984,6 +13177,7 @@ msgstr "Redimensionne l'image à la nouvelle taille [code]new_size[/code]." msgid "" "Sets the bitmap's element at the specified position, to the specified value." msgstr "" +"Définit l'élément du bitmap à la position donnée, avec la valeur spécifiée." #: doc/classes/BitMap.xml msgid "Sets a rectangular portion of the bitmap to the specified value." @@ -13071,6 +13265,8 @@ msgstr "" #: doc/classes/Bone2D.xml msgid "Joint used with [Skeleton2D] to control and animate other nodes." msgstr "" +"Un joint utilisé avec un [Skeleton2D] pour contrôler et animer les autres " +"nÅ“uds." #: doc/classes/Bone2D.xml msgid "" @@ -13104,12 +13300,16 @@ msgstr "" msgid "" "Length of the bone's representation drawn in the editor's viewport in pixels." msgstr "" +"La longueur en pixel de l'os tel qu'affiché dans la fenêtre d'affichage de " +"l'éditeur." #: doc/classes/Bone2D.xml msgid "" "Rest transform of the bone. You can reset the node's transforms to this " "value using [method apply_rest]." msgstr "" +"Le transformation de repos de l'os. Vous pouvez rétablir la transformation " +"du nÅ“ud à cette valeur avec [method apply_rest]." #: doc/classes/BoneAttachment.xml msgid "A node that will attach to a bone." @@ -13179,6 +13379,53 @@ msgid "" " can_shoot = true\n" "[/codeblock]" msgstr "" +"Le type intégré booléen. Il y a deux valeurs booléennes : [code]true[/code] " +"(vrai) et [code]false[/code] (faux). Vous pouvez penser à un interrupteur " +"avec les deux positions allumé ou éteins (1 ou 0). Les booléens sont " +"utilisés en programmation pour la logique dans les instructions de " +"conditions, comme [code]if[/code].\n" +"Les booléens peuvent être directement utilisés dans les instructions " +"[code]if[/code]. Le code en-dessous montre ça dans la ligne [code]if " +"can_shoot:[/code]. Vous n'avez pas besoin d'utiliser [code]== true[/code], " +"mais [code]if can_shoot:[/code] suffit. De même, utilisez [code]if not " +"can_shoot:[/code] plutôt que [code]== false[/code].\n" +"[codeblock]\n" +"var can_shoot = true\n" +"\n" +"func shoot():\n" +" if can_shoot:\n" +" pass # Faire les actions de tirs ici.\n" +"[/codeblock]\n" +"Le code suivant ne créera une balle que si les deux conditions sont " +"correctes : l'action \"shoot\" est pressée et si [code]can_shoot[/code] est " +"[code]true[/code].\n" +"[b]Note :[/b] [code]Input.is_action_pressed(\"shoot\")[/code] est aussi un " +"booléen qui est [code]true[/code] quand \"shoot\" est appuyé et [code]false[/" +"code] quand \"shoot\" n'est pas appuyé.\n" +"[codeblock]\n" +"var can_shoot = true\n" +"\n" +"func shoot():\n" +" if can_shoot and Input.is_action_pressed(\"shoot\"):\n" +" create_bullet()\n" +"[/codeblock]\n" +"Le code suivant définira [code]can_shoot[/code] à [code]false[/code] et " +"lancera un minuteur. Ça empêchera le joueur de tirer tant que le minuteur " +"n'est pas fini. Puis [code]can_shoot[/code] sera mis à [code]true[/code] à " +"nouveau et permettra au joueur de tirer une fois à nouveau.\n" +"[codeblock]\n" +"var can_shoot = true\n" +"onready var cool_down = $CoolDownTimer\n" +"\n" +"func shoot():\n" +" if can_shoot and Input.is_action_pressed(\"shoot\"):\n" +" create_bullet()\n" +" can_shoot = false\n" +" cool_down.start()\n" +"\n" +"func _on_CoolDownTimer_timeout():\n" +" can_shoot = true\n" +"[/codeblock]" #: doc/classes/bool.xml msgid "" @@ -13186,6 +13433,9 @@ msgid "" "code] if [code]0[/code] is passed in, and [code]true[/code] for all other " "ints." msgstr "" +"Transforme une valeur [int] en booléen, cette méthode retournera " +"[code]false[/code] si [code]0[/code] est donné, et [code]true[/code] pour " +"toute autre valeur entière." #: doc/classes/bool.xml msgid "" @@ -13193,6 +13443,9 @@ msgid "" "[code]false[/code] if [code]0.0[/code] is passed in, and [code]true[/code] " "for all other floats." msgstr "" +"Transforme une valeur [float] en booléen, cette méthode retournera " +"[code]false[/code] si [code]0[/code] est donné, et [code]true[/code] pour " +"tout autre flottant." #: doc/classes/bool.xml msgid "" @@ -13247,6 +13500,7 @@ msgstr "Ressource en forme de boîte." #: doc/classes/BoxShape.xml msgid "3D box shape that can be a child of a [PhysicsBody] or [Area]." msgstr "" +"Un forme de boite en 3D qui peut être un enfant d'un [PhysicsBody] ou [Area]." #: doc/classes/BoxShape.xml doc/classes/CapsuleShape.xml #: doc/classes/ConcavePolygonShape.xml doc/classes/ConvexPolygonShape.xml @@ -13543,17 +13797,17 @@ msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a normal vector in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a 3D position in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml @@ -13864,6 +14118,9 @@ msgid "" "Only one camera can be current, so setting a different camera [code]current[/" "code] will disable this one." msgstr "" +"Si [code]true[/code], cette camera est la caméra active de la scène " +"actuelle. Seule une caméra peut être l'actuelle, donc définir une autre " +"caméra comme [code]current[/code] désactivera celle-ci." #: doc/classes/Camera2D.xml msgid "" @@ -13923,6 +14180,7 @@ msgstr "" msgid "" "If [code]true[/code], draws the camera's screen rectangle in the editor." msgstr "" +"Si [code]true[/code], affiche le rectangle de la caméra dans l'éditeur." #: doc/classes/Camera2D.xml msgid "" @@ -14001,6 +14259,8 @@ msgid "" "If [code]true[/code], the camera smoothly moves towards the target at " "[member smoothing_speed]." msgstr "" +"Si [code]true[/code], la caméra se déplacement doucement vers la cible à la " +"vitesse [member smoothing_speed]." #: doc/classes/Camera2D.xml msgid "" @@ -14027,6 +14287,8 @@ msgid "" "The camera's position takes into account vertical/horizontal offsets and the " "screen size." msgstr "" +"La position de la caméra prend en compte le décalage vertical et horizontal, " +"et la taille de l'écran." #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml msgid "The camera updates with the [code]_physics_process[/code] callback." @@ -14790,6 +15052,7 @@ msgstr "" msgid "" "The manner in which a material's rendering is applied to underlying textures." msgstr "" +"La manière dont le rendu du matériau est appliqué aux textures en-dessous." #: doc/classes/CanvasItemMaterial.xml msgid "The manner in which material reacts to lighting." @@ -15166,6 +15429,8 @@ msgstr "" #: doc/classes/CheckBox.xml msgid "The [CheckBox] text's font color when it's hovered and pressed." msgstr "" +"La couleur de la police du texte du [CheckBox] quand il est survolé ou " +"appuyé." #: doc/classes/CheckBox.xml msgid "The [CheckBox] text's font color when it's pressed." @@ -15220,16 +15485,19 @@ msgstr "Icône à afficher lorsque le [CheckButton] est coché et désactivé." msgid "" "The [StyleBox] to display as a background when the [CheckBox] is disabled." msgstr "" +"La [StyleBox] à afficher en arrière-plan quand la [CheckBox] est cochée." #: doc/classes/CheckBox.xml msgid "" "The [StyleBox] to display as a background when the [CheckBox] is focused." msgstr "" +"La [StyleBox] à afficher en arrière-plan quand la [CheckBox] a le focus." #: doc/classes/CheckBox.xml msgid "" "The [StyleBox] to display as a background when the [CheckBox] is hovered." msgstr "" +"La [StyleBox] à afficher en arrière-plan quand la [CheckBox] est survolée." #: doc/classes/CheckBox.xml msgid "" @@ -15245,6 +15513,7 @@ msgstr "Le [StyleBox] a affiché en arrière-plan." msgid "" "The [StyleBox] to display as a background when the [CheckBox] is pressed." msgstr "" +"La [StyleBox] à afficher en arrière-plan quand la [CheckBox] est appuyée." #: doc/classes/CheckButton.xml msgid "Checkable button. See also [CheckBox]." @@ -15286,6 +15555,8 @@ msgstr "" #: doc/classes/CheckButton.xml msgid "The [CheckButton] text's font color when it's hovered and pressed." msgstr "" +"La couleur de la police du texte du [CheckButton] quand il est survolé ou " +"appuyé." #: doc/classes/CheckButton.xml msgid "The [CheckButton] text's font color when it's pressed." @@ -15324,16 +15595,19 @@ msgstr "Icône à afficher lorsque le [CheckButton] est coché et désactivé." msgid "" "The [StyleBox] to display as a background when the [CheckButton] is disabled." msgstr "" +"La [StyleBox] à afficher en arrière-plan quand la [CheckBox] est désactivée." #: doc/classes/CheckButton.xml msgid "" "The [StyleBox] to display as a background when the [CheckButton] is focused." msgstr "" +"La [StyleBox] à afficher en arrière-plan quand le [CheckButton] a le focus." #: doc/classes/CheckButton.xml msgid "" "The [StyleBox] to display as a background when the [CheckButton] is hovered." msgstr "" +"La [StyleBox] à afficher en arrière-plan quand le [CheckButton] est survolé." #: doc/classes/CheckButton.xml msgid "" @@ -15435,6 +15709,8 @@ msgid "" "Returns the value of [code]property[/code] of [code]class[/code] or its " "ancestry." msgstr "" +"Retourne la valeur de la propriété [code]property[/code] de la classe " +"[code]class[/code] ou de ses parents." #: doc/classes/ClassDB.xml msgid "" @@ -15578,15 +15854,15 @@ msgid "" msgstr "" #: doc/classes/ClippedCamera.xml -#, fuzzy msgid "If [code]true[/code], the camera stops on contact with [Area]s." -msgstr "Si [code]true[/code], le bouton \"add preset\" est activé." +msgstr "" +"Si [code]true[/code], la caméra s'arrête lors des collisions avec les [Area]." #: doc/classes/ClippedCamera.xml -#, fuzzy msgid "If [code]true[/code], the camera stops on contact with [PhysicsBody]s." msgstr "" -"Si [code]true[/code], le mouvement linéaire à travers l’axe Z est limité." +"Si [code]true[/code], la caméra s'arrête lors des collisions avec les " +"[PhysicsBody]." #: doc/classes/ClippedCamera.xml msgid "" @@ -15708,7 +15984,7 @@ msgstr "Retourne le [RID] de la énième forme d'une zone." #: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml msgid "Returns the number of shapes the given shape owner contains." -msgstr "" +msgstr "Retourne le nombre de formes que le propriétaire de forme contient." #: doc/classes/CollisionObject.xml #, fuzzy @@ -15783,6 +16059,7 @@ msgstr "Émis quand le curseur entre dans n'importe quelle forme de l'objet." #: doc/classes/CollisionObject.xml msgid "Emitted when the mouse pointer exits all this object's shapes." msgstr "" +"Émis quand le curseur de la souris quitte toutes les formes de cet objets." #: doc/classes/CollisionObject2D.xml msgid "Base node for 2D collision objects." @@ -15904,6 +16181,7 @@ msgstr "" #: doc/classes/CollisionPolygon.xml msgid "Editor-only class for defining a collision polygon in 3D space." msgstr "" +"Une classe exclusive à l'éditeur pour définir un polygone de collision en 3D." #: doc/classes/CollisionPolygon.xml msgid "" @@ -15960,7 +16238,9 @@ msgstr "Si [code]true[/code], aucune collision ne sera détectée." #: doc/classes/CollisionPolygon2D.xml msgid "" "If [code]true[/code], only edges that face up, relative to " -"[CollisionPolygon2D]'s rotation, will collide with other objects." +"[CollisionPolygon2D]'s rotation, will collide with other objects.\n" +"[b]Note:[/b] This property has no effect if this [CollisionPolygon2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionPolygon2D.xml @@ -16061,9 +16341,12 @@ msgid "" msgstr "Une forme de collision désactivée n’a aucun effet dans le monde." #: doc/classes/CollisionShape2D.xml +#, fuzzy msgid "" "Sets whether this collision shape should only detect collision on one side " -"(top or bottom)." +"(top or bottom).\n" +"[b]Note:[/b] This property has no effect if this [CollisionShape2D] is a " +"child of an [Area2D] node." msgstr "" "Définit si cette forme de collision doit uniquement détecter la collision " "sur un côté (en haut ou en bas)." @@ -16182,6 +16465,14 @@ msgid "" "var blended_color = bg.blend(fg) # Brown with alpha of 75%\n" "[/codeblock]" msgstr "" +"Retourne une nouvelle couleur résultant du mélanger de cette couleur avec " +"une autre. Si la couleur est opaque, le résultat est aussi opaque. La " +"deuxième couleur peut avoir une certaine opacité.\n" +"[codeblock]\n" +"var bg = Color(0.0, 1.0, 0.0, 0.5) # Vert avec 50% d'opacité\n" +"var fg = Color(1.0, 0.0, 0.0, 0.5) # Rouge avec 50% d'opacité\n" +"var blended_color = bg.blend(fg) # Marron avec 75% d'opacité\n" +"[/codeblock]" #: doc/classes/Color.xml msgid "" @@ -17110,6 +17401,7 @@ msgstr "" #: doc/classes/ColorPicker.xml msgid "Returns the list of colors in the presets of the color picker." msgstr "" +"Retourne la liste des couleurs dans la palette du sélectionneur de couleur." #: doc/classes/ColorPicker.xml doc/classes/ColorPickerButton.xml msgid "The currently selected color." @@ -17151,6 +17443,11 @@ msgid "" "tinting without darkening or rendering sprites in HDR).\n" "[b]Note:[/b] Cannot be enabled if HSV mode is on." msgstr "" +"Si [code]true[/code], autorise les composants de couleur R, G, B à dépasser " +"1.0, ce qui peut être utilisé pour certaines opérations spéciales qui le " +"nécessitent (comme changer de teinte sans assombrir ou afficher des images " +"en HDR).\n" +"[b]Note :[/b] Le mode HSV ne peut pas être activé dans ce cas." #: doc/classes/ColorPicker.xml msgid "Emitted when the color is changed." @@ -17187,6 +17484,8 @@ msgstr "L'icône du bouton pour ajouter un préréglage." #: doc/classes/ColorPicker.xml msgid "Custom texture for the hue selection slider on the right." msgstr "" +"La texture personnalisée pour le glisseur de sélection de la teinte sur la " +"droite." #: doc/classes/ColorPicker.xml msgid "" @@ -17236,6 +17535,7 @@ msgid "" "If [code]true[/code], the alpha channel in the displayed [ColorPicker] will " "be visible." msgstr "" +"Si [code]true[/code], le canal alpha sera affiché dans le [ColorPicker]." #: doc/classes/ColorPickerButton.xml msgid "Emitted when the color changes." @@ -17286,7 +17586,7 @@ msgstr "[Font] du texte du [ColorPickerButton]." #: doc/classes/ColorPickerButton.xml msgid "The background of the color preview rect on the button." -msgstr "" +msgstr "L'arrière-plan du rectangle d'aperçu de couleur sur le bouton." #: doc/classes/ColorPickerButton.xml msgid "[StyleBox] used when the [ColorPickerButton] is disabled." @@ -17505,6 +17805,72 @@ msgid "" "standardized, Godot's ConfigFile formatting may differ from files written by " "other programs." msgstr "" +"Cette classe d'aide peut être utilisée pour enregistrer des valeurs de type " +"[Variant] sur le disque au format INI. Les valeurs enregistrées sont " +"identifiées par une section et une clé :\n" +"[codeblock]\n" +"[section]\n" +"some_key=42\n" +"string_example=\"Bonjour le Monde !\"\n" +"a_vector=Vector3( 1, 0, 2 )\n" +"[/codeblock]\n" +"Les données enregistrées peuvent l'être dans un fichier ou chargé depuis un " +"fichier, mais aussi par les objets ConfigFile qui peuvent être gérés en " +"mémoire seulement.\n" +"L'exemple suivant montre comme créer un simple [ConfigFile] et l'enregistrer " +"sur le disque :\n" +"[codeblock]\n" +"# Create new ConfigFile object.\n" +"var config = ConfigFile.new()\n" +"\n" +"# Enregistrer quelques valeurs.\n" +"config.set_value(\"Player1\", \"nom_joueur\", \"Jean\")\n" +"config.set_value(\"Player1\", \"meilleur_score\", 10)\n" +"config.set_value(\"Player2\", \"nom_joueur\", \"V3geta\")\n" +"config.set_value(\"Player2\", \"meilleur_score\", 9001)\n" +"\n" +"# L'enregistrer sur dans un fichier (en écrasant le fichier déjà existant " +"s'il y en a un).\n" +"config.save(\"user://scores.cfg\")\n" +"[/codeblock]\n" +"Cet exemple montre comme le fichier au-dessus peut-être chargé :\n" +"[codeblock]\n" +"var score_data = {}\n" +"var config = ConfigFile.new()\n" +"\n" +"# Charger depuis le fichier.\n" +"var err = config.load(\"user://scores.cfg\")\n" +"\n" +"# Si le fichier n'a pu être chargé, ignorer la suite.\n" +"if err != OK:\n" +" return\n" +"\n" +"# Défiler les sections.\n" +"for player in config.get_sections():\n" +" # Récupérer les données de chaque section.\n" +" var player_name = config.get_value(player, \"nom_joueur\")\n" +" var player_score = config.get_value(player, \"meilleur_score\")\n" +" score_data[player_name] = player_score\n" +"[/codeblock]\n" +"Toutes les opérations qui modifient un ConfigFile comme [method set_value], " +"[method clear], ou [method erase_section], ne changent que les données en " +"mémoire. Si vous voulez aussi modifier le fichier, vous devez appeler " +"[method save], [method save_encrypted], ou [method save_encrypted_pass].\n" +"Notez que les noms des sections et des propriétés ne peuvent contenir des " +"espaces. Tous les caractères après un espace seront ignorés à la sauvegarde " +"et au chargement.\n" +"Les ConfigFile peuvent aussi contenir des commentaires qui doivent commencer " +"par un point-virgule ([code];[/code]). Ces lignes sont ignorées au " +"chargement d'un fichier. À noter que ces commentaires seront perdus à " +"l'enregistrement d'un ConfigFile. Ils peuvent toujours servir pour les " +"fichiers de configuration sur les serveurs, qui ne sont typiquement jamais " +"modifiés sans le faire manuellement.\n" +"[b]Note :[/b] L'extension du nom de fichier donné à un ConfigFile n'a aucun " +"impact sur son format ou son comportement. Par convention, l'extension " +"[code].cfg[/code] est utilisée ici, mais n'importe quelle autre extension " +"comme [code].ini[/code] est aussi valide. Comme ni [code].cfg[/code] ni " +"[code].ini[/code] ne sont des standards, le format des ConfigFile de Godot " +"peuvent différer d'un programme à un autre." #: doc/classes/ConfigFile.xml #, fuzzy @@ -17742,6 +18108,16 @@ msgid "" "[Button], [PanelContainer] etc.). It can only be used with most basic GUI " "nodes, like [Control], [Container], [Panel] etc." msgstr "" +"Une méthode virtuelle à implémenter par l'utilisateur. Retourne la taille " +"minimale de ce contrôle. Cette taille peut aussi être contrôlée avec [member " +"rect_min_size] par le code. L'actuelle taille minimale sera le maximum de " +"ces deux valeurs (sur chaque axe séparément).\n" +"Si n'est pas surchargé, la valeur par défaut est [constant Vector2.ZERO].\n" +"[b]Note :[/b] Cette méthode n'est pas appelée quand le script est attaché à " +"un nÅ“ud [Control] qui définit depuis lui-même sa taille minimale (ex. " +"[Label], [Button], [PanelContainer], etc.). Elle ne peut être utilisée " +"qu'avec les éléments d'interface les plus basiques, comme les [Control], " +"[Container], [Panel], etc." #: doc/classes/Control.xml msgid "" @@ -17799,6 +18175,38 @@ msgid "" " return tooltip\n" "[/codeblock]" msgstr "" +"Une méthode virtuelle à implémenter par l'utilisateur. Retourne un nÅ“ud " +"[Control] qui doit être utilisé pour l'infobulle plutôt que celui par " +"défaut. Le texte [code]for_text[/code] contient le contenu de la propriété " +"[member hint_tooltip].\n" +"Le nÅ“ud retourné doit être du type [Control] ou doit en hériter. Il peut " +"avoir des enfants de n'importe quel type. Il est libéré quand l'infobulle " +"disparait, alors vérifiez que vous fournissez une nouvelle instance à chaque " +"fois (si vous voulez utiliser un nÅ“ud déjà existant dans votre scène, vous " +"pouvez le dupliquer et passer cette instance dupliquée). Quand [code]null[/" +"code] est retourné ou que ça n'est pas un Control, l'infobulle par défaut " +"sera utilisée à la place.\n" +"Le nÅ“ud retourné sera ajouté comme enfant à un [PopupPanel], alors vous ne " +"devriez pas fournir le contenu de ce panneau. Ce [PopupPanel] peut avoir un " +"thème défini par [method Theme.set_stylebox] pour le type " +"[code]\"TooltipPanel\"[/code] (voir [member hint_tooltip] pour un exemple).\n" +"[b]Note :[/b] L'infobulle est réduite à sa taille minimale. Si vous voulez " +"vous assurer qu'elle est visible entièrement, vous devriez définir sa taille " +"minimale [member rect_min_size] à une valeur supérieure à zéro.\n" +"Exemple avec un nÅ“ud construit manuellement :\n" +"[codeblock]\n" +"func _make_custom_tooltip(for_text):\n" +" var label = Label.new()\n" +" label.text = for_text\n" +" return label\n" +"[/codeblock]\n" +"Exemple avec l’instanciation d'une scène personnalisée :\n" +"[codeblock]\n" +"func _make_custom_tooltip(for_text):\n" +" var tooltip = preload(\"res://SomeTooltipScene.tscn\").instance()\n" +" tooltip.get_node(\"Label\").text = for_text\n" +" return tooltip\n" +"[/codeblock]" #: doc/classes/Control.xml msgid "" @@ -17806,6 +18214,9 @@ msgid "" "propagating, even to nodes listening to [method Node._unhandled_input] or " "[method Node._unhandled_key_input]." msgstr "" +"Marque un événement d'entrée comme traité. Une fois l'événement accepté, il " +"arrête de se propager, même aux nÅ“uds surchargeant les méthodes [method Node." +"_unhandled_input] ou [method Node._unhandled_key_input]." #: doc/classes/Control.xml msgid "" @@ -17823,6 +18234,20 @@ msgid "" "\"Label\"))\n" "[/codeblock]" msgstr "" +"Crée un changement local pour la [Color] du thème pour le nom [code]name[/" +"code] spécifié. Les changements locaux sont prioritaires sur les valeurs du " +"thème pour les contrôles.\n" +"Voir aussi [method get_color], [method remove_color_override].\n" +"[b]Un exemple de surcharge de la couleur d'un label puis son rétablissement :" +"[/b]\n" +"[codeblock]\n" +"# Pour le label \"MyLabel\", changer la couleur de sa police avec un valeur " +"personnalisée.\n" +"$MyLabel.add_color_override(\"font_color\", Color(1, 0.5, 0))\n" +"# Rétablir la couleur de la police du label.\n" +"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", " +"\"Label\"))\n" +"[/codeblock]" #: doc/classes/Control.xml #, fuzzy @@ -17925,6 +18350,8 @@ msgstr "" msgid "" "Finds the next (below in the tree) [Control] that can receive the focus." msgstr "" +"Cherche le prochain (en-dessous dans l'arborescence) [Control] qui peut " +"prendre le focus." #: doc/classes/Control.xml #, fuzzy @@ -17988,6 +18415,8 @@ msgid "" "Returns combined minimum size from [member rect_min_size] and [method " "get_minimum_size]." msgstr "" +"Retourne la taille minimal combinée de [member rect_min_size] et [method " +"get_minimum_size]." #: doc/classes/Control.xml msgid "" @@ -18037,6 +18466,7 @@ msgstr "" msgid "" "Returns the control that has the keyboard focus or [code]null[/code] if none." msgstr "" +"Retourne le contrôle qui a le focus du clavier ou [code]null[/code] si aucun." #: doc/classes/Control.xml msgid "" @@ -18175,6 +18605,8 @@ msgid "" "Returns [code]true[/code] if this is the current focused control. See " "[member focus_mode]." msgstr "" +"Retourne [code]true[/code] si c'est le contrôle qui a le focus. Voir [member " +"focus_mode]." #: doc/classes/Control.xml #, fuzzy @@ -18229,14 +18661,14 @@ msgid "" msgstr "" #: doc/classes/Control.xml -#, fuzzy msgid "" "Returns [code]true[/code] if there is a local override for a theme shader " "with the specified [code]name[/code] in this [Control] node.\n" "See [method add_shader_override]." msgstr "" -"Retourne [code]true[/code] si le paramètre spécifié par [code]name[/code] " -"existe, [code]false[/code] autrement." +"Retourne [code]true[/code] s'il y a un écrasement local pour le shader du " +"thème nommé [code]name[/code] pour ce nÅ“ud [Control].\n" +"Voir [method add_shader_override]." #: doc/classes/Control.xml msgid "" @@ -18247,14 +18679,14 @@ msgid "" msgstr "" #: doc/classes/Control.xml -#, fuzzy msgid "" "Returns [code]true[/code] if there is a local override for a theme " "[StyleBox] with the specified [code]name[/code] in this [Control] node.\n" "See [method add_stylebox_override]." msgstr "" -"Retourne [code]true[/code] si le paramètre spécifié par [code]name[/code] " -"existe, [code]false[/code] autrement." +"Retourne [code]true[/code] s'il y a un écrasement local pour la [StyleBox] " +"du thème nommé [code]name[/code] pour ce nÅ“ud [Control].\n" +"Voir [method add_stylebox_override]." #: doc/classes/Control.xml msgid "" @@ -18262,6 +18694,9 @@ msgid "" "[method Viewport.gui_is_drag_successful].\n" "Best used with [constant Node.NOTIFICATION_DRAG_END]." msgstr "" +"Retourne [code]true[/code] si l'opération de déposé-glissé a réussi. C'est " +"une alternative à [method Viewport.gui_is_drag_successful].\n" +"Mieux utilisé avec [constant Node.NOTIFICATION_DRAG_END]." #: doc/classes/Control.xml msgid "" @@ -18384,6 +18819,32 @@ msgid "" " return my_data()\n" "[/codeblock]" msgstr "" +"Donne la gestion du déposé-glissé de ce contrôle au contrôle cible " +"[code]target[/code].\n" +"Cette gestion peut être implémenté dans le contrôle cible de la même manière " +"avec les méthodes [method get_drag_data], [method can_drop_data], et [method " +"drop_data] mais avec deux différences :\n" +"1. Le nom de la fonction doit commencer par [b]_fw[/b]\n" +"2. La fonction doit prendre un argument suplémentaire qui sera le contrôle " +"qui a donné la gestion\n" +"[codeblock]\n" +"# ThisControl.gd\n" +"extends Control\n" +"func _ready():\n" +" set_drag_forwarding(target_control)\n" +"\n" +"# TargetControl.gd\n" +"extends Control\n" +"func can_drop_data_fw(position, data, from_control):\n" +" return true\n" +"\n" +"func drop_data_fw(position, data, from_control):\n" +" my_handle_data(data)\n" +"\n" +"func get_drag_data_fw(position, from_control):\n" +" set_drag_preview(my_preview)\n" +" return my_data()\n" +"[/codeblock]" #: doc/classes/Control.xml msgid "" @@ -18404,6 +18865,23 @@ msgid "" " return color\n" "[/codeblock]" msgstr "" +"Affiche le contrôle donné comme curseur de la souris. Un bon moment pour " +"appeler cette méthode est dans [method get_drag_data]. Le contrôle doit ne " +"pas être dans l'arborescence. Vous ne devriez pas libérer le contrôle, et " +"vous ne devriez pas garder une référence du contrôle en-dehors de la durée " +"du déposé-glissé. Il sera supprimé automatiquement quand le déposé-glissé " +"sera terminé.\n" +"[codeblock]\n" +"export (Color, RGBA) var color = Color(1, 0, 0, 1)\n" +"\n" +"func get_drag_data(position):\n" +" # Utiliser un nÅ“ud qui n'est pas dans l'arborescence\n" +" var cpb = ColorPickerButton.new()\n" +" cpb.color = color\n" +" cpb.rect_size = Vector2(50, 50)\n" +" set_drag_preview(cpb)\n" +" return color\n" +"[/codeblock]" #: doc/classes/Control.xml msgid "Sets [member margin_right] and [member margin_bottom] at the same time." @@ -18416,6 +18894,11 @@ msgid "" "method for [member focus_neighbour_bottom], [member focus_neighbour_left], " "[member focus_neighbour_right] and [member focus_neighbour_top]." msgstr "" +"Définit l'ancre identifiée par la constante [code]margin[/code] depuis " +"l'énumération [enum Margin] du [Control] à l'emplacement du nÅ“ud " +"[code]neighbor[/code]. C'est une méthode pour définir [member " +"focus_neighbour_bottom], [member focus_neighbour_left], [member " +"focus_neighbour_right] et [member focus_neighbour_top]." #: doc/classes/Control.xml msgid "" @@ -18926,6 +19409,7 @@ msgstr "Afficher le curseur de la main qui pointe quand il passe sur ce nÅ“ud." #: doc/classes/Control.xml msgid "Show the system's cross mouse cursor when the user hovers the node." msgstr "" +"Affiche le curseur en croix du système quand l'utilisateur survole ce nÅ“ud." #: doc/classes/Control.xml msgid "" @@ -19248,7 +19732,7 @@ msgstr "Ressource de forme de polygone concave 2D pour la physique." #: doc/classes/ConvexPolygonShape.xml msgid "The list of 3D points forming the convex polygon shape." -msgstr "" +msgstr "La liste des points 3D formant le polygone convexe." #: doc/classes/ConvexPolygonShape2D.xml msgid "Convex polygon shape for 2D physics." @@ -19377,6 +19861,8 @@ msgid "" "Initial angular velocity applied to each particle in [i]degrees[/i] per " "second. Sets the speed of rotation of the particle." msgstr "" +"Le vitesse de rotation appliquée à chaque particule en degrés [i]degrees[/i] " +"par seconde." #: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml msgid "Each particle's angular velocity will vary along this [Curve]." @@ -19664,6 +20150,8 @@ msgid "" "The [Mesh] used for each particle. If [code]null[/code], particles will be " "spheres." msgstr "" +"Le [Mesh] utilisé pour chaque particule. Si [code]null[/code], les " +"particules seront des sphères." #: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml #: doc/classes/Particles2D.xml @@ -19703,6 +20191,8 @@ msgid "" "Radial acceleration applied to each particle. Makes particle accelerate away " "from origin." msgstr "" +"L'accélération radiale appliquée à chaque particule. Fait accélérer les " +"particules en s'éloignant de l'origine." #: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml msgid "Each particle's radial acceleration will vary along this [Curve]." @@ -20797,6 +21287,8 @@ msgid "" "The render flags for the [CubeMap]. See the [enum Flags] constants for " "details." msgstr "" +"Les drapeaux de rendu pour le [CubeMap]. Voir les constantes [enum Flags] " +"pour plus d'informations." #: doc/classes/CubeMap.xml msgid "" @@ -21021,7 +21513,7 @@ msgstr "" #: doc/classes/Curve.xml msgid "Recomputes the baked cache of points for the curve." -msgstr "" +msgstr "Recalcule le cache des points de la courbe." #: doc/classes/Curve.xml msgid "" @@ -21047,6 +21539,8 @@ msgid "" "Returns the left tangent angle (in degrees) for the point at [code]index[/" "code]." msgstr "" +"Retourne l'angle de la tangente gauche (en degrés) pour le point à l'index " +"[code]index[/code]." #: doc/classes/Curve.xml msgid "Returns the curve coordinates for the point at [code]index[/code]." @@ -21062,6 +21556,8 @@ msgid "" "Returns the right tangent angle (in degrees) for the point at [code]index[/" "code]." msgstr "" +"Retourne l'angle de la tangente droite (en degrés) pour le point à l'index " +"[code]index[/code]." #: doc/classes/Curve.xml msgid "" @@ -21085,12 +21581,16 @@ msgid "" "Sets the left [enum TangentMode] for the point at [code]index[/code] to " "[code]mode[/code]." msgstr "" +"Définit le mode de la tangent [enum TangentMode] gauche pour la position à " +"l'index [code]index[/code] à [code]mode[/code]." #: doc/classes/Curve.xml msgid "" "Sets the left tangent angle for the point at [code]index[/code] to " "[code]tangent[/code]." msgstr "" +"Définit l'angle de la tangent gauche pour le point à l'index [code]index[/" +"code] avec [code]tangent[/code]." #: doc/classes/Curve.xml msgid "Sets the offset from [code]0.5[/code]." @@ -21101,12 +21601,16 @@ msgid "" "Sets the right [enum TangentMode] for the point at [code]index[/code] to " "[code]mode[/code]." msgstr "" +"Définit le mode de la tangent [enum TangentMode] droite pour la position à " +"l'index [code]index[/code] à [code]mode[/code]." #: doc/classes/Curve.xml msgid "" "Sets the right tangent angle for the point at [code]index[/code] to " "[code]tangent[/code]." msgstr "" +"Définit l'angle de la tangent droite pour le point à l'index [code]index[/" +"code] avec [code]tangent[/code]." #: doc/classes/Curve.xml msgid "" @@ -21157,6 +21661,11 @@ msgid "" "It keeps a cache of precalculated points along the curve, to speed up " "further calculations." msgstr "" +"Cette classe décrit une courbe de Bézier en 2D. C'est principalement utilisé " +"pour définir un chemin [Path2D], mais ça peut être utilisé manuellement pour " +"d'autres usages.\n" +"Ça garde un cache des points calculés le long de la courbe, pour accélérer " +"les calculs ultérieurs." #: doc/classes/Curve2D.xml msgid "" @@ -21374,6 +21883,9 @@ msgid "" "index is out of bounds, the function sends an error to the console, and " "returns [code]0[/code]." msgstr "" +"Retourne l'inclinaison en radians pour le point à l'index [code]idx[/code]. " +"Si l'index est hors limites, la fonction affiche une erreur dans la console, " +"et retourne [code]0[/code]." #: doc/classes/Curve3D.xml msgid "" @@ -21658,6 +22170,113 @@ msgid "" "keys. Using [code]const[/code] will only prevent assigning the constant with " "another value after it was initialized." msgstr "" +"Le type Dictionary. C'est un conteneur associatif qui contient des valeurs " +"référencées par des clés unqiues. Les dictionnaires sont composés de paires " +"de clés (qui doivent toutes être uniques) et des valeurs. Les dictionnaires " +"préservent l'ordre d'ajout des éléments, même si ça n'apparait pas toujours " +"lors de l'affichage du dictionnaire. Dans d'autres langages de " +"programmation, cette structure de données est souvent appelée table de " +"hachage ou tableau associatif.\n" +"Vous pouvez definir un dictionnaire avec une liste de paires au format " +"[code]clé : valeur[/code] entre accolades [code]{}[/code].\n" +"Supprimer des éléments pendant une itération n'est [b]pas supporté[/b] et " +"causera un comportement indéfini.\n" +"[b]Note :[/b] Les dictionnaires sont toujours passés par références. Pour " +"obtenir une copie d'un dictionnaire qui peut être modifié indépendamment du " +"dictionnaire original, utilisez [method duplicate].\n" +"Créer un dictionnaire :\n" +"[codeblock]\n" +"var my_dict = {} # Crée un dictionnaire vide.\n" +"\n" +"var dict_variable_key = \"Une autre clé\"\n" +"var dict_variable_value = \"valeur2\"\n" +"var another_dict = {\n" +" \"Un clé\": \"valeur1\",\n" +" dict_variable_key: dict_variable_value,\n" +"}\n" +"\n" +"var points_dict = {\"Blanc\": 50, \"Jaune\": 75, \"Orange\": 100}\n" +"\n" +"# Syntaxe alternative façon Lua.\n" +"# Ne nécessite pas de guillemets autour des clés, mais seules les chaines de " +"caractères constantes peuvent être utilisées comme nom pour les clés.\n" +"# De plus, les noms des clés doit commencer par une lettre ou un tiret du " +"bas (\"_\").\n" +"# Ici, `une_cle` est une chaine de caractère, pas une variable !\n" +"another_dict = {\n" +" une_cle = 42,\n" +"}\n" +"[/codeblock]\n" +"Vous pouvez accéder aux valeurs d'un dictionnaire en utilisant la clé " +"associée. Dans l'exemple suivant, [code]points_dict[\"Blanc\"][/code] " +"retournera [code]50[/code]. Vous pouvez aussi écrire [code]points_dict." +"Blanc[/code], qui est équivalent. Par contre, vous devez utiliser la syntaxe " +"avec les accolades si la clé n'est pas une chaine de caractère constante " +"(comme un nombre ou une variable).\n" +"[codeblock]\n" +"export(string, \"Blanc\", \"Jaune\", \"Orange\") var my_color\n" +"var points_dict = {\"Blanc\": 50, \"Jaune\": 75, \"Orange\": 100}\n" +"func _ready():\n" +" # On ne peut pas utiliser la syntaxe en point puisque `my_color` est une " +"variable.\n" +" var points = points_dict[my_color]\n" +"[/codeblock]\n" +"Dans l'exemple au-dessus, [code]points[/code] sera assigné à une valeur " +"associée à la couleur choisie dans [code]my_color[/code].\n" +"Les dictionnaires peuvent contenir des données plus complexes :\n" +"[codeblock]\n" +"my_dict = {\"Premier tableau\": [1, 2, 3, 4]} # Assigne un Array à un clé en " +"String.\n" +"[/codeblock]\n" +"Pour ajouter une clé à un dictionnaire déjà existant, accédez-y comme si " +"c'était une clé existante et associez lui une valeur :\n" +"[codeblock]\n" +"var points_dict = {\"Blanc\": 50, \"Jaune\": 75, \"Orange\": 100}\n" +"points_dict[\"Bleu\"] = 150 # Ajoute \"Bleu\" comme clé et lui associe la " +"valeur 150.\n" +"[/codeblock]\n" +"Enfin, les dictionnaires peuvent utiliser différents types de clés et de " +"valeurs dans le même dictionnaire :\n" +"[codeblock]\n" +"# Ceci est un dictionnaire valide.\n" +"# Pour accéder à \"Sous valeur\" en-dessous, utilisez `my_dict.sous_dict." +"sous_cle` ou `my_dict[\"sub_dict\"][\"sous_cle\"]`.\n" +"# Les styles d'accès peuvent être mélangés suivant les besoins.\n" +"var my_dict = {\n" +" \"String Key\": 5,\n" +" 4: [1, 2, 3],\n" +" 7: \"Hello\",\n" +" \"sous_dict\": {\"sous_cle\": \"Sous valeur\"},\n" +"}\n" +"[/codeblock]\n" +"[b]Note :[/b] Contrairement aux [Array], vous ne pouvez pas comparer " +"directement des dictionnaires:\n" +"[codeblock]\n" +"array1 = [1, 2, 3]\n" +"array2 = [1, 2, 3]\n" +"\n" +"func compare_arrays():\n" +" print(array1 == array2) # Affichera \"true\"\n" +"\n" +"var dict1 = {\"a\": 1, \"b\": 2, \"c\": 3}\n" +"var dict2 = {\"a\": 1, \"b\": 2, \"c\": 3}\n" +"\n" +"func compare_dictionaries():\n" +" print(dict1 == dict2) # N'affichera PAS \"true\".\n" +"[/codeblock]\n" +"Vous devez d'abord calculer le hachage du dictionnaire avec la méthode " +"[method hash] avant de pouvoir les comparer :\n" +"[codeblock]\n" +"var dict1 = {\"a\": 1, \"b\": 2, \"c\": 3}\n" +"var dict2 = {\"a\": 1, \"b\": 2, \"c\": 3}\n" +"\n" +"func compare_dictionaries():\n" +" print(dict1.hash() == dict2.hash()) # Affichera \"true\"\n" +"[/codeblock]\n" +"[b]Note :[/b] Quand un dictionnaire est créé avec [code]const[/code], le " +"dictionnaire peut toujours être modifié quand changeant les valeurs ou les " +"clés. Utiliser [code]const[/code] empêche seulement d'assigner cette " +"constante avec une autre valeur une fois la constante initialisée." #: doc/classes/Dictionary.xml msgid "GDScript basics: Dictionary" @@ -21712,6 +22331,17 @@ msgid "" "code] as long as the key exists, even if the associated value is [code]null[/" "code]." msgstr "" +"Retourne [code]true[/code] si le dictionnaire à la clé spécifiée.\n" +"[b]Note :[/b] Ça revient à utiliser l'opérateur [code]in[/code] comme " +"suit :\n" +"[codeblock]\n" +"# Sera évalué à `true`.\n" +"if \"godot\" in {\"godot\": \"engine\"}:\n" +" pass\n" +"[/codeblock]\n" +"Cette méthode (comme pour l'opérateur [code]in[/code]) sera évalué à " +"[code]true[/code] tant que la clé existe, même si elle est associée à " +"[code]null[/code]." #: doc/classes/Dictionary.xml msgid "" @@ -21783,6 +22413,8 @@ msgid "" "Optimizes shadow rendering for detail versus movement. See [enum " "ShadowDepthRange]." msgstr "" +"Optimise le rendu de l'ombre pour les détails plutôt que les mouvements. " +"Voir [enum ShadowDepthRange]." #: doc/classes/DirectionalLight.xml msgid "The maximum distance for shadow splits." @@ -21909,6 +22541,12 @@ msgid "" "overwritten.\n" "Returns one of the [enum Error] code constants ([code]OK[/code] on success)." msgstr "" +"Copie le fichier à l'emplacement [code]from[/code] vers la destination " +"[code]to[/code]. Ces deux arguments doivent contenir des chemines vers des " +"fichiers, soient relatifs ou absolus. Si le fichier de destination existe et " +"qu'il n'est pas protégé en écriture, il sera écrasé.\n" +"Retourne un des codes de [enum Error] (et [code]OK[/code] en cas de " +"réussite)." #: doc/classes/Directory.xml msgid "" @@ -21990,6 +22628,9 @@ msgid "" "directory's disk. On other platforms, this information is not available and " "the method returns 0 or -1." msgstr "" +"Sur les systèmes de bureau UNIX, ça retourne l'espace disque disponible sur " +"le disque du dossier actuel. Sur les autres plateformes, cette information " +"n'est pas disponible et la méthode retourne 0 ou -1." #: doc/classes/Directory.xml msgid "" @@ -22002,6 +22643,14 @@ msgid "" "If [code]skip_hidden[/code] is [code]true[/code], hidden files are filtered " "out." msgstr "" +"Initialise le flux utilisée pour lister tous les fichiers et dossiers avec " +"la fonction [method get_next], et ferme le flux actuellement ouvert si " +"nécessaire. Une fois le flux manipulé, il doit être fermé avec [method " +"list_dir_end].\n" +"Si [code]skip_navigational[/code] est [code]true[/code], [code].[/code] et " +"[code]..[/code] sont ignorés.\n" +"Si [code]skip_hidden[/code] est [code]true[/code], les fichiers masqués sont " +"ignorés." #: doc/classes/Directory.xml msgid "" @@ -22034,6 +22683,13 @@ msgid "" "filesystem (e.g. [code]/tmp/folder[/code] or [code]C:\\tmp\\folder[/code]).\n" "Returns one of the [enum Error] code constants ([code]OK[/code] on success)." msgstr "" +"Ouvre un dossier existant dans le système de fichiers. Le chemin [code]path[/" +"code] doit être dans l'arborescence du projet ([code]res://dossier[/code]), " +"dans le dossier utilisateur ([code]user://dossier[/code]) ou un chemin " +"absolu dans le système de fichiers de l'utilisateur (e.g. [code]/tmp/" +"dossier[/code] or [code]C:\\tmp\\dossier[/code]).\n" +"Retourne un des codes d'erreur de [enum Error] (et [code]OK[/code] en cas de " +"succès)." #: doc/classes/Directory.xml msgid "" @@ -22122,6 +22778,68 @@ msgid "" " connected = true\n" "[/codeblock]" msgstr "" +"Cette classe est utilisée pour enregistrer l'état d'un serveur DTLS. La " +"méthode [method setup] convertie les [PacketPeerUDP] connectés en " +"[PacketPeerDTLS] et les acceptent avec [method take_connection] comme " +"clients DTLS. En interne, cette classe est utilisée pour enregistrer l'état " +"DTLS et les cookies sur le serveur. La raison pour laquelle l'état et les " +"cookies sont nécessaires dépasse les propos de cette documentation.\n" +"Voici une petit exemple sur comment l'utiliser :\n" +"[codeblock]\n" +"# server.gd\n" +"extends Node\n" +"\n" +"var dtls := DTLSServer.new()\n" +"var server := UDPServer.new()\n" +"var peers = []\n" +"\n" +"func _ready():\n" +" server.listen(4242)\n" +" var key = load(\"key.key\") # Votre clé privée.\n" +" var cert = load(\"cert.crt\") # Votre certificat X509.\n" +" dtls.setup(key, cert)\n" +"\n" +"func _process(delta):\n" +" while server.is_connection_available():\n" +" var peer : PacketPeerUDP = server.take_connection()\n" +" var dtls_peer : PacketPeerDTLS = dtls.take_connection(peer)\n" +" if dtls_peer.get_status() != PacketPeerDTLS.STATUS_HANDSHAKING:\n" +" continue # C'est normal que 50% des connexions échouent à cause " +"des échanges de cookie.\n" +" print(\"Pair connecté !\")\n" +" peers.append(dtls_peer)\n" +" for p in peers:\n" +" p.poll() # Nécessaire pour mettre à jour l'état\n" +" if p.get_status() == PacketPeerDTLS.STATUS_CONNECTED:\n" +" while p.get_available_packet_count() > 0:\n" +" print(\"Message reçu du client : %s\" % p.get_packet()." +"get_string_from_utf8())\n" +" p.put_packet(\"Bonjour client DTLS\".to_utf8())\n" +"[/codeblock]\n" +"[codeblock]\n" +"# client.gd\n" +"extends Node\n" +"\n" +"var dtls := PacketPeerDTLS.new()\n" +"var udp := PacketPeerUDP.new()\n" +"var connected = false\n" +"\n" +"func _ready():\n" +" udp.connect_to_host(\"127.0.0.1\", 4242)\n" +" dtls.connect_to_peer(udp, false) # Utilisez \"true\" en production pour " +"vérifier le certificat !\n" +"\n" +"func _process(delta):\n" +" dtls.poll()\n" +" if dtls.get_status() == PacketPeerDTLS.STATUS_CONNECTED:\n" +" if !connected:\n" +" # Essayer de contacter le serveur\n" +" dtls.put_packet(\"La réponse est... 42!\".to_utf8())\n" +" while dtls.get_available_packet_count() > 0:\n" +" print(\"Connecté : %s\" % dtls.get_packet()." +"get_string_from_utf8())\n" +" connected = true\n" +"[/codeblock]" #: doc/classes/DTLSServer.xml msgid "" @@ -22417,7 +23135,7 @@ msgstr "" #: doc/classes/EditorExportPlugin.xml msgid "Adds linker flags for the iOS export." -msgstr "" +msgstr "Ajoute un drapeau à l'assembleur pour l'export iOS." #: doc/classes/EditorExportPlugin.xml msgid "Adds content for iOS Property List files." @@ -22454,6 +23172,8 @@ msgstr "" msgid "" "An editor feature profile which can be used to disable specific features." msgstr "" +"Un profile de fonctionnalités de l'éditeur qui permet de désactiver " +"certaines fonctionnalités." #: doc/classes/EditorFeatureProfile.xml msgid "" @@ -22642,13 +23362,15 @@ msgstr "Le fichier actuellement sélectionné." #: doc/classes/EditorFileDialog.xml msgid "The file system path in the address bar." -msgstr "" +msgstr "Le chemin dans le système de fichier dans la barre d'adresse." #: doc/classes/EditorFileDialog.xml msgid "" "If [code]true[/code], the [EditorFileDialog] will not warn the user before " "overwriting files." msgstr "" +"Si [code]true[/code], le [EditorFileDialog] n'avertira pas l'utilisateur " +"avant d'écraser des fichiers." #: doc/classes/EditorFileDialog.xml msgid "" @@ -22666,6 +23388,8 @@ msgid "" "If [code]true[/code], hidden files and directories will be visible in the " "[EditorFileDialog]." msgstr "" +"Si [code]true[/code], les fichiers et dossiers masqués seront visibles dans " +"le [EditorFileDialog]." #: doc/classes/EditorFileDialog.xml msgid "Emitted when a directory is selected." @@ -22770,6 +23494,8 @@ msgstr "Obtient l'objet de répertoire racine." #: doc/classes/EditorFileSystem.xml msgid "Returns a view into the filesystem at [code]path[/code]." msgstr "" +"Retourne une vue dans le système de fichiers à l'emplacement [code]path[/" +"code]." #: doc/classes/EditorFileSystem.xml msgid "Returns the scan progress for 0 to 1 if the FS is being scanned." @@ -22822,7 +23548,7 @@ msgstr "Un répertoire pour le système de fichiers des ressources." #: doc/classes/EditorFileSystemDirectory.xml msgid "A more generalized, low-level variation of the directory concept." -msgstr "" +msgstr "Une variation bas-niveau et plus générale du concept de dossier." #: doc/classes/EditorFileSystemDirectory.xml msgid "" @@ -22890,6 +23616,8 @@ msgid "" "Returns the parent directory for this directory or [code]null[/code] if " "called on a directory at [code]res://[/code] or [code]user://[/code]." msgstr "" +"Retourne le dossier parent de ce dossier ou [code]null[/code] si appelé dans " +"un dossier à [code]res://[/code] ou [code]user://[/code]." #: doc/classes/EditorFileSystemDirectory.xml msgid "Returns the path to this directory." @@ -22966,6 +23694,61 @@ msgid "" "To use [EditorImportPlugin], register it using the [method EditorPlugin." "add_import_plugin] method first." msgstr "" +"Les [EditorImportPlugin] fournissent un moyen d'étendre la fonctionnalité " +"d'importation des ressources dans l'éditeur. Utilisez-les pour importer des " +"ressources depuis des formats de de fichier personnalisés ou pour proposer " +"une alternative aux importateurs existants de l'éditeur.\n" +"Les EditorImportPlugins fonctionnent pas associés certaines extensions de " +"fichiers avec un type de ressource. Voir [method get_recognized_extensions] " +"et [method get_resource_type]. Ils peuvent aussi spécifier des préréglages " +"d'importation qui changerons le processus d'importation. Les " +"EditorImportPlugins sont responsables pour créer les ressources et les " +"enregistrer dans le dossier [code].import[/code] (voir [member " +"ProjectSettings.application/config/use_hidden_project_data_directory]).\n" +"L'exemple ci-dessous définit un EditorImportPlugin qui importe un [Mesh] " +"depuis un fichier avec l'extension \".special\" ou \".spec\" :\n" +"[codeblock]\n" +"tool\n" +"extends EditorImportPlugin\n" +"\n" +"func get_importer_name():\n" +" return \"my.special.plugin\"\n" +"\n" +"func get_visible_name():\n" +" return \"Special Mesh\"\n" +"\n" +"func get_recognized_extensions():\n" +" return [\"special\", \"spec\"]\n" +"\n" +"func get_save_extension():\n" +" return \"mesh\"\n" +"\n" +"func get_resource_type():\n" +" return \"Mesh\"\n" +"\n" +"func get_preset_count():\n" +" return 1\n" +"\n" +"func get_preset_name(i):\n" +" return \"Default\"\n" +"\n" +"func get_import_options(i):\n" +" return [{\"name\": \"my_option\", \"default_value\": false}]\n" +"\n" +"func import(source_file, save_path, options, platform_variants, gen_files):\n" +" var file = File.new()\n" +" if file.open(source_file, File.READ) != OK:\n" +" return FAILED\n" +"\n" +" var mesh = Mesh.new()\n" +" # Remplir le Mesh avec des données lues depuis \"file\" (exercice laissé " +"au lecteur)\n" +"\n" +" var filename = save_path + \".\" + get_save_extension()\n" +" return ResourceSaver.save(filename, mesh)\n" +"[/codeblock]\n" +"Pour utiliser un nouveau [EditorImportPlugin], enregistrez-le d'abord avec " +"la méthode [method EditorPlugin.add_import_plugin]." #: doc/classes/EditorImportPlugin.xml msgid "" @@ -23016,7 +23799,7 @@ msgstr "" #: doc/classes/EditorImportPlugin.xml msgid "Gets the name of the options preset at this index." -msgstr "" +msgstr "Retourne le nom des préréglages de l'option à cette position." #: doc/classes/EditorImportPlugin.xml msgid "" @@ -23132,9 +23915,8 @@ msgid "" msgstr "" #: doc/classes/EditorInspector.xml -#, fuzzy msgid "Emitted when a resource is selected in the inspector." -msgstr "Émis lorsqu'une interface est supprimée." +msgstr "Émis quand une ressource est sélectionnée dans l'inspecteur." #: doc/classes/EditorInspector.xml msgid "" @@ -23299,7 +24081,7 @@ msgstr "" #: doc/classes/EditorInterface.xml msgid "Returns an [Array] with the file paths of the currently opened scenes." -msgstr "" +msgstr "Retourne un [Array] avec le chemin des fichiers des scènes ouvertes." #: doc/classes/EditorInterface.xml msgid "" @@ -23362,6 +24144,8 @@ msgstr "" msgid "" "Returns mesh previews rendered at the given size as an [Array] of [Texture]s." msgstr "" +"Retourne les aperçus des maillages rendus à la taille spécifiée sous forme " +"de [Array] de [Texture]." #: doc/classes/EditorInterface.xml msgid "Opens the scene at the given path." @@ -23914,6 +24698,9 @@ msgid "" "Emitted when user changes the workspace ([b]2D[/b], [b]3D[/b], [b]Script[/" "b], [b]AssetLib[/b]). Also works with custom screens defined by plugins." msgstr "" +"Émis quand l'utilisateur change d'espace de travail ([b]2D[/b], [b]3D[/b], " +"[b]Script[/b], [b]AssetLib[/b]). Fonctionne aussi avec les écrans " +"personnalisés définis par des greffons." #: doc/classes/EditorPlugin.xml msgid "" @@ -24081,6 +24868,8 @@ msgstr "Émis lors de la sélection. Utilisé en interne." #: doc/classes/EditorResourcePicker.xml msgid "Godot editor's control for selecting [Resource] type properties." msgstr "" +"Le contrôle de l'éditeur de Godot pour la sélection des propriétés de type " +"[Resource]." #: doc/classes/EditorResourcePicker.xml msgid "" @@ -24605,6 +25394,11 @@ msgid "" "the Editor Settings. If [code]update_current[/code] is true, the current " "value of the setting will be set to [code]value[/code] as well." msgstr "" +"Définit la valeur initiale de la préférence nommée [code]name[/code] à " +"[code]value[/code]. C'est utilisé pour définir une valeur pour le bouton " +"Annuler dans les préférences de l'éditeur. Si [code]update_current[/code] " +"est vrai, la valeur actuelle de cette préférence sera définie à [code]value[/" +"code] aussi." #: doc/classes/EditorSettings.xml msgid "" @@ -24766,6 +25560,8 @@ msgid "" "Sets the reference [Spatial] node for the gizmo. [code]node[/code] must " "inherit from [Spatial]." msgstr "" +"Définit le nÅ“ud [Spatial] à utiliser pour le manipulateur. Ce nÅ“ud " +"[code]node[/code] doit hériter d'un [Spatial]." #: doc/classes/EditorSpatialGizmoPlugin.xml msgid "Used by the editor to define Spatial gizmo types." @@ -24792,6 +25588,8 @@ msgid "" "Override this method to define whether the gizmo can be hidden or not. " "Returns [code]true[/code] if not overridden." msgstr "" +"Surchargez cette méthode pour définir quand le manipulateur peut être masqué " +"ou non. Retourne [code]true[/code] si n'est pas surchargé." #: doc/classes/EditorSpatialGizmoPlugin.xml msgid "" @@ -24910,6 +25708,11 @@ msgid "" "same behavior." msgstr "" +#: doc/classes/EditorSpinSlider.xml +#, fuzzy +msgid "If [code]true[/code], the slider is hidden." +msgstr "Si [code]true[/code], la flèche de réduction est masquée." + #: doc/classes/EditorVCSInterface.xml msgid "" "Version Control System (VCS) interface, which reads and writes to the local " @@ -24963,6 +25766,9 @@ msgid "" "Fetches new changes from the remote, but doesn't write changes to the " "current working directory. Equivalent to [code]git fetch[/code]." msgstr "" +"Récupère les nouvelles modifications depuis le dépôt distant mais n'inscrit " +"aucune modification dans l'actuel dossier de travail. Équivalent à [code]git " +"fetch[/code]." #: doc/classes/EditorVCSInterface.xml msgid "" @@ -25075,12 +25881,16 @@ msgid "" "Helper function to add an array of [code]diff_hunks[/code] into a " "[code]diff_file[/code]." msgstr "" +"Une fonction d'aide pour ajouter une liste de [code]diff_hunks[/code] dans " +"un [code]diff_file[/code]." #: doc/classes/EditorVCSInterface.xml msgid "" "Helper function to add an array of [code]line_diffs[/code] into a " "[code]diff_hunk[/code]." msgstr "" +"Une fonction d'aide pour ajouter une liste de [code]line_diffs[/code] dans " +"un [code]diff_hunk[/code]." #: doc/classes/EditorVCSInterface.xml msgid "" @@ -25259,6 +26069,8 @@ msgid "" "Returns Dictionary of licenses used by Godot and included third party " "components." msgstr "" +"Retourne un dictionnaire des licences utilisées par Godot en incluant les " +"composants tiers." #: doc/classes/Engine.xml msgid "Returns Godot license text." @@ -25267,6 +26079,7 @@ msgstr "Retourne le texte de la licence Godot." #: doc/classes/Engine.xml msgid "Returns the main loop object (see [MainLoop] and [SceneTree])." msgstr "" +"Retourne l'objet de la boucle principale (voir [MainLoop] et [SceneTree])." #: doc/classes/Engine.xml msgid "" @@ -25281,6 +26094,16 @@ msgid "" " pass # Run expensive logic only once every 2 physics frames here.\n" "[/codeblock]" msgstr "" +"Retourne le nombre de trames écoulées depuis le démarrage du moteur, et est " +"mis à jour à chaque nouvelle [b]trame physique[/b]. Voir aussi [method " +"get_idle_frames].\n" +"[method get_physics_frames] peut être utilisé pour lancer des logiques " +"coûteuses mois souvent sans utiliser un [Timer]:\n" +"[codeblock]\n" +"func _physics_process(_delta):\n" +" if Engine.get_physics_frames() % 2 == 0:\n" +" pass # Lancer la logique coûteuse qu'une trame physique sur 2.\n" +"[/codeblock]" #: doc/classes/Engine.xml msgid "" @@ -25328,12 +26151,44 @@ msgid "" " # Do things specific to versions before 3.2\n" "[/codeblock]" msgstr "" +"Retourne les informations sur la version du moteur de jeu dans un " +"Dictionary.\n" +"[code]major[/code] - Le numéro de version majeur en int\n" +"[code]minor[/code] - Le numéro de version mineur en int\n" +"[code]patch[/code] - Le numéro de version de correctif en int\n" +"[code]hex[/code] - Le numéro complet de version sous forme de int au " +"format hexadécimal avec un octet (2 caractères) par numéro (voir l'exemple " +"en-dessous)\n" +"[code]status[/code] - Le status (ex.: \"beta\", \"rc1\", \"rc2\", ... " +"\"stable\") en String\n" +"[code]build[/code] - Le nom de la version (ex.: \"custom_build\") en " +"String\n" +"[code]hash[/code] - Le hachage du commit Git en String\n" +"[code]year[/code] - L'année où la version a été publiée en int\n" +"[code]string[/code] - [code]major[/code] + [code]minor[/code] + " +"[code]patch[/code] + [code]status[/code] + [code]build[/code] dans une seule " +"String\n" +"La valeur [code]hex[/code] est codée comme suit, de gauche à droite : un " +"octet pour le numéro majeur, un octet pour le numéro mineur, un octet pour " +"le numéro de correct. Par exemple, la \"3.1.12\" sera la valeur " +"[code]0x03010C[/code]. [b]Note :[/b] C'est toujours en int en interne, et " +"l'afficher donnera sa représentation décimale ([code]196876[/code] dans ce " +"cas), qui ne sera pas particulièrement utile. Utiliser une représentation " +"hexadécimale permet facilement de comparer les versions dans le code :\n" +"[codeblock]\n" +"if Engine.get_version_info().hex >= 0x030200:\n" +" # Pour les choses spécifiques à la version 3.2 et suivantes\n" +"else:\n" +" # Pour les choses spécifiques aux versions avant la 3.2\n" +"[/codeblock]" #: doc/classes/Engine.xml msgid "" "Returns [code]true[/code] if a singleton with given [code]name[/code] exists " "in global scope." msgstr "" +"Retourne [code]true[/code] si un singleton avec le nom [code]name[/code] " +"existe dans l'espace global." #: doc/classes/Engine.xml msgid "" @@ -25456,7 +26311,6 @@ msgid "" msgstr "" #: doc/classes/Environment.xml doc/classes/WorldEnvironment.xml -#, fuzzy msgid "Environment and post-processing" msgstr "Les environnements et les effets post-rendu" @@ -25537,6 +26391,8 @@ msgstr "La [Color] de la lumière ambiante." msgid "" "The ambient light's energy. The higher the value, the stronger the light." msgstr "" +"L'énergie de la lumière ambiante. Plus la valeur est grande, plus la lumière " +"est intense." #: doc/classes/Environment.xml msgid "" @@ -25748,6 +26604,8 @@ msgstr "" #: doc/classes/Environment.xml msgid "The depth fog's [Color] when looking towards the sun." msgstr "" +"La [Color] de brouillard de profondeur quand on regarde en direction du " +"soleil." #: doc/classes/Environment.xml msgid "" @@ -26277,6 +27135,42 @@ msgid "" "process will be killed. You can work around this by calling [method flush] " "at regular intervals." msgstr "" +"Le type Fichier. Il est utilisé pour enregistrer de manière permanente des " +"données dans le système de fichiers de l'appareil de l'utilisateur, et " +"pouvoir lire ce fichier. Ça peut être utilisé pour enregistrer les " +"sauvegardes du jeu ou des fichiers de configuration ou de préférence, par " +"exemple.\n" +"Voici un exemple sur comment écrire et lire dans une fichier :\n" +"[codeblock]\n" +"func save(content):\n" +" var file = File.new()\n" +" file.open(\"user://save_game.dat\", File.WRITE) # Ouvert en écriture " +"seulement\n" +" file.store_string(content)\n" +" file.close()\n" +"\n" +"func load():\n" +" var file = File.new()\n" +" file.open(\"user://save_game.dat\", File.READ) # Ouvert en lecture " +"seulement\n" +" var content = file.get_as_text()\n" +" file.close()\n" +" return content\n" +"[/codeblock]\n" +"Dans l'exemple au-dessus, le fichier sera enregistré dans le dossier des " +"données utilisateur comme précisé dans la documentation [url=$DOCS_URL/" +"tutorials/io/data_paths.html]Chemins de données[/url].\n" +"[b]Note:[/b] Pour accéder au ressources du projet une fois le projet " +"exporté, il est recommandé d'utiliser [ResourceLoader] plutôt que l'API " +"[File], puisque certains fichiers sont convertis dans un format spécifique " +"au moteur de jeu et le fichier original risque de ne plus être présent dans " +"le paquet PCK exporté.\n" +"[b]Note :[/b] Les fichiers sont automatiquement fermés seulement si le " +"processus quitte \"normalement\" (comme un cliquant sur le bouton fermer du " +"gestionnaire de fenêtre ou avec [b]Alt + F4[/b]). Si vous arrêtez " +"l'exécution du projet avec [b]F8[/b] pendant que le projet est lancé, les " +"fichiers ne seront pas fermés parce que le processus sera détruit. Vous " +"pouvez gérer ce cas en appelant [method flush] régulièrement." #: doc/classes/File.xml msgid "File system" @@ -26288,6 +27182,9 @@ msgid "" "operations. Use [method flush] to persist the data to disk without closing " "the file." msgstr "" +"Ferme le fichier actuellement ouvert et empêche les opérations de lecture/" +"écriture ultérieures. Utilisez [method flush] pour enregistrer les données " +"sur le disque sans fermer le fichier." #: doc/classes/File.xml msgid "" @@ -26570,6 +27467,9 @@ msgid "" "[b]Note:[/b] The [code]value[/code] must lie in the interval [code][-2^63, " "2^63 - 1][/code] (i.e. be a valid [int] value)." msgstr "" +"Enregistre an entier de 64 bits dans le fichier.\n" +"[b]Note :[/b] La valeur [code]value[/code] doit être dans l'intervalle [code]" +"[-2^63, 2^63 - 1][/code] (être un [int] valide)." #: doc/classes/File.xml msgid "" @@ -26606,6 +27506,8 @@ msgid "" "Appends [code]line[/code] to the file followed by a line return character " "([code]\\n[/code]), encoding the text as UTF-8." msgstr "" +"Ajoute la ligne [code]line[/code] au fichier suivit d'un retour à la ligne " +"([code]\\n[/code]), en encodant le texte en UTF-8." #: doc/classes/File.xml msgid "" @@ -26613,6 +27515,9 @@ msgid "" "store the length of the string).\n" "Text will be encoded as UTF-8." msgstr "" +"Enregistre la [String] donnée dans une nouvelle ligne au format Pascal " +"(enregistre aussi la longueur de la chaine de caractères).\n" +"Le texte sera codé en UTF-8." #: doc/classes/File.xml msgid "Stores a floating-point number in the file." @@ -26678,13 +27583,12 @@ msgstr "" "n’existe pas et tronquer s’il existe." #: doc/classes/File.xml -#, fuzzy msgid "" "Opens the file for read and write operations. Does not truncate the file. " "The cursor is positioned at the beginning of the file." msgstr "" "Ouvre le fichier pour les opérations de lecture et d'écriture. Ne tronque " -"pas le fichier." +"pas le fichier. Le curseur est placé au début du fichier." #: doc/classes/File.xml #, fuzzy @@ -27113,6 +28017,9 @@ msgid "" "actually inheriting from [Object], not a built-in type such as [int], " "[Vector2] or [Dictionary]." msgstr "" +"L'objet contenant la fonction référencée. Cet objet doit hériter de la " +"classe [Object], et non d'un type intégré comme [int], [Vector2] ou " +"[Dictionary]." #: doc/classes/FuncRef.xml msgid "The name of the referenced function." @@ -27122,6 +28029,8 @@ msgstr "Le nom de la fonction référencée." msgid "" "An external library containing functions or script classes to use in Godot." msgstr "" +"Une bibliothèque externe contenant des fonctions et des classes de script à " +"utiliser dans Godot." #: modules/gdnative/doc_classes/GDNativeLibrary.xml msgid "" @@ -27136,6 +28045,8 @@ msgid "" "Returns paths to all dependency libraries for the current platform and " "architecture." msgstr "" +"Retourne les chemines de toutes les bibliothèques nécessaires à la " +"plateforme et l'architecture actuelles." #: modules/gdnative/doc_classes/GDNativeLibrary.xml msgid "" @@ -27148,6 +28059,8 @@ msgid "" "This resource in INI-style [ConfigFile] format, as in [code].gdnlib[/code] " "files." msgstr "" +"Cette ressource est un [ConfigFile] au format style INI, comme dans les " +"fichiers [code].gdnlib[/code]." #: modules/gdnative/doc_classes/GDNativeLibrary.xml msgid "" @@ -27669,11 +28582,11 @@ msgstr "" #: doc/classes/Generic6DOFJoint.xml msgid "If enabled, there is a rotational motor across these axes." -msgstr "" +msgstr "Si actif, il y a un moteur de rotation à travers ces axes." #: doc/classes/Generic6DOFJoint.xml msgid "If enabled, there is a linear motor across these axes." -msgstr "" +msgstr "Si actif, il y a un moteur linéaire à travers ces axes." #: doc/classes/Generic6DOFJoint.xml doc/classes/HingeJoint.xml msgid "Represents the size of the [enum Flag] enum." @@ -27689,6 +28602,9 @@ msgid "" "shapes, compute intersections between shapes, and process various other " "geometric operations." msgstr "" +"Geometry fournit un ensemble de fonctions d'aide pour créer des formes " +"géométrique, calculer les intersections entre les formes, et propose " +"différentes autres opérations géométriques." #: doc/classes/Geometry.xml msgid "" @@ -28196,6 +29112,8 @@ msgstr "" #: doc/classes/GeometryInstance.xml msgid "The generated lightmap texture will be twice as large, on each axis." msgstr "" +"La texture de lumière générée sera deux fois plus grande, selon les deux " +"axes." #: doc/classes/GeometryInstance.xml msgid "The generated lightmap texture will be 4 times as large, on each axis." @@ -28672,9 +29590,22 @@ msgid "Gradient's colors returned as a [PoolColorArray]." msgstr "Toutes les couleurs du dégradé retournées dans un [PoolColorArray]." #: doc/classes/Gradient.xml +msgid "" +"Defines how the colors between points of the gradient are interpolated. See " +"[enum InterpolationMode] for available modes." +msgstr "" + +#: doc/classes/Gradient.xml msgid "Gradient's offsets returned as a [PoolRealArray]." msgstr "Toutes les couleurs du dégradé retournées dans un [PoolRealArray]." +#: doc/classes/Gradient.xml +msgid "" +"Constant interpolation, color changes abruptly at each point and stays " +"uniform between. This might cause visible aliasing when used for a gradient " +"texture in some cases." +msgstr "" + #: doc/classes/GradientTexture.xml msgid "Gradient-filled texture." msgstr "Texture remplie de gradients." @@ -28742,6 +29673,8 @@ msgid "" "The number of vertical color samples that will be obtained from the " "[Gradient], which also represents the texture's height." msgstr "" +"Le nombre d'échantillons de couleur verticaux qui seront obtenus de ce " +"[Gradient], ce qui représente aussi la hauteur de la texture." #: doc/classes/GradientTexture2D.xml msgid "" @@ -28764,6 +29697,8 @@ msgid "" "The number of horizontal color samples that will be obtained from the " "[Gradient], which also represents the texture's width." msgstr "" +"Le nombre d'échantillons de couleur horizontaux qui seront obtenus de ce " +"[Gradient], ce qui représente aussi la largeur de la texture." #: doc/classes/GradientTexture2D.xml msgid "The colors are linearly interpolated in a straight line." @@ -28784,6 +29719,8 @@ msgid "" "The texture is filled starting from [member fill_from] to [member fill_to] " "offsets, repeating the same pattern in both directions." msgstr "" +"La texture est remplie en partant de la position [member fill_from] jusqu'à " +"[member fill_to], répétant le même motif dans les deux directions." #: doc/classes/GradientTexture2D.xml msgid "" @@ -28836,6 +29773,9 @@ msgid "" "[code]to[/code] GraphNode. If the connection already exists, no connection " "is created." msgstr "" +"Crée une connexion entre le port [code]from_port[/code] du GraphNode " +"[code]from[/code] et le port [code]to_port[/code] du GraphNode [code]to[/" +"code]. Si la connexion existe déjà , aucune nouvelle connexion n'est crée." #: doc/classes/GraphEdit.xml msgid "" @@ -28977,6 +29917,9 @@ msgid "" "code] slot of the [code]from[/code] GraphNode and the [code]to_slot[/code] " "slot of the [code]to[/code] GraphNode is attempted to be created." msgstr "" +"Émis au GraphEdit lors d'une tentative de créer une connexion entre le port " +"[code]from_port[/code] du GraphNode [code]from[/code] et le port " +"[code]to_port[/code] du GraphNode [code]to[/code]." #: doc/classes/GraphEdit.xml msgid "" @@ -29160,20 +30103,20 @@ msgid "Returns the right (output) type of the slot [code]idx[/code]." msgstr "Retourne le type du nÅ“ud à [code]idx[/code]." #: doc/classes/GraphNode.xml -#, fuzzy msgid "" "Returns [code]true[/code] if left (input) side of the slot [code]idx[/code] " "is enabled." msgstr "" -"Retourne [code]true[/code] si la piste à l'index [code]idx[/code] est active." +"Retourne [code]true[/code] si le côté gauche (entrée) de l'emplacement " +"[code]idx[/code] est actif." #: doc/classes/GraphNode.xml -#, fuzzy msgid "" "Returns [code]true[/code] if right (output) side of the slot [code]idx[/" "code] is enabled." msgstr "" -"Retourne [code]true[/code] si la piste à l'index [code]idx[/code] est active." +"Retourne [code]true[/code] si le côté droit (sortie) de l'emplacement " +"[code]idx[/code] est actif." #: doc/classes/GraphNode.xml msgid "" @@ -29498,12 +30441,17 @@ msgid "" "Returns an array of [Transform] and [Mesh] references corresponding to the " "non-empty cells in the grid. The transforms are specified in world space." msgstr "" +"Retourne une liste de [Transform] et de ressources [Mesh] correspondants aux " +"cellules non vides sur la grille. Les transformations sont définies dans " +"l'espace global." #: modules/gridmap/doc_classes/GridMap.xml msgid "" "Returns an array of [Vector3] with the non-empty cell coordinates in the " "grid map." msgstr "" +"Retourne un tableau de [Vector3] avec les coordonnées des cellules non vides " +"dans la grille." #: modules/gridmap/doc_classes/GridMap.xml #, fuzzy @@ -29739,12 +30687,16 @@ msgid "" "Number of vertices in the depth of the height map. Changing this will resize " "the [member map_data]." msgstr "" +"Le nombre de sommets pour la profondeur de la carte de hauteur. Changer " +"cette valeur redimensionnera [member map_data]." #: doc/classes/HeightMapShape.xml msgid "" "Number of vertices in the width of the height map. Changing this will resize " "the [member map_data]." msgstr "" +"Le nombre de sommets pour la largeur de la carte de hauteur. Changer cette " +"valeur redimensionnera [member map_data]." #: doc/classes/HFlowContainer.xml #, fuzzy @@ -29893,6 +30845,8 @@ msgid "" "Returns the resulting HMAC. If the HMAC failed, an empty [PoolByteArray] is " "returned." msgstr "" +"Retourne le HMAC résultant. Si le HMAC a échoué, un [PoolByteArray] vide est " +"retourné." #: doc/classes/HMACContext.xml msgid "" @@ -30258,6 +31212,8 @@ msgid "" "If [code]true[/code], execution will block until all data is read from the " "response." msgstr "" +"Si [code]true[/code], l'exécution sera bloquée jusqu'à ce que toutes les " +"données de la réponse soit lues." #: doc/classes/HTTPClient.xml msgid "The connection to use for this client." @@ -30276,6 +31232,9 @@ msgid "" "HTTP GET method. The GET method requests a representation of the specified " "resource. Requests using GET should only retrieve data." msgstr "" +"La méthode HTTP GET. La méthode GET demande une représentation de la " +"ressource spécifiée. Les requêtes avec GET ne devrait faire que retourner " +"des données." #: doc/classes/HTTPClient.xml msgid "" @@ -30343,6 +31302,8 @@ msgstr "Statut : Déconnecté du serveur." #: doc/classes/HTTPClient.xml msgid "Status: Currently resolving the hostname for the given URL into an IP." msgstr "" +"Status : Actuellement en train de résoudre l'hôte de l'URL donnée en adresse " +"IP." #: doc/classes/HTTPClient.xml msgid "Status: DNS failure: Can't resolve the hostname for the given URL." @@ -30396,6 +31357,9 @@ msgid "" "server has received and is processing the request, but no response is " "available yet." msgstr "" +"Le code de status HTTP [code]102 Processing[/code] (WebDAV). Indique que le " +"serveur a reçu la requête et la traite, mais aucune réponse n'est disponible " +"pour l'instant." #: doc/classes/HTTPClient.xml msgid "" @@ -30618,6 +31582,10 @@ msgid "" "This code is used in situations where the user might be able to resolve the " "conflict and resubmit the request." msgstr "" +"Le code de status HTTP [code]409 Conflict[/code]. La requête n'a pu être " +"complétée à cause d'un conflit avec l'état actuel de la ressource cible. Ce " +"code est utilisé dans les situations où l'utilisateur peut être capable de " +"résoudre le conflit et de soumettre à nouveau la requête." #: doc/classes/HTTPClient.xml msgid "" @@ -30904,6 +31872,82 @@ msgid "" " texture_rect.texture = texture\n" "[/codeblock]" msgstr "" +"Un nÅ“ud qui permet d'envoyer des requêtes HTTP. Utilise [HTTPClient] en " +"interne.\n" +"Peut permettre d'envoyer des requêtes HTTP, ex. pour envoyer ou télécharger " +"des fichiers ou du contenu web via HTTP.\n" +"[b]Avertissement :[/b] Voir les notes et avertissements du [HTTPClient] pour " +"les limites, notamment concernant la sécurité SSL.\n" +"[b]Exemple pour contacter une API REST et afficher les champs retournés :[/" +"b]\n" +"[codeblock]\n" +"func _ready():\n" +" # Créer un nÅ“ud de requête HTTP et le connecter au signal de " +"complétion.\n" +" var http_request = HTTPRequest.new()\n" +" add_child(http_request)\n" +" http_request.connect(\"request_completed\", self, " +"\"_http_request_completed\")\n" +"\n" +" # Lancer une requête GET. L'URL en-dessous retourne un JSON au moment de " +"l'écriture de ce tutoriel.\n" +" var error = http_request.request(\"https://httpbin.org/get\")\n" +" if error != OK:\n" +" push_error(\"Une erreur est survenue dans la requête HTTP.\")\n" +"\n" +" # Lancer une requête POST. L'URL en-dessous retourne un JSON au moment " +"de l'écriture de ce tutoriel.\n" +" # Note : Don't make simultaneous requests using a single HTTPRequest " +"node.\n" +" # Le code en-dessous est uniquement donné comme exemple.\n" +" var body = {\"nom\": \"Godette\"}\n" +" error = http_request.request(\"https://httpbin.org/post\", [], true, " +"HTTPClient.METHOD_POST, body)\n" +" if error != OK:\n" +" push_error(\"Une erreur est survenue dans la requête HTTP.\")\n" +"\n" +"\n" +"# Appelé quand la requête HTTP est complète.\n" +"func _http_request_completed(result, response_code, headers, body):\n" +" var response = parse_json(body.get_string_from_utf8())\n" +"\n" +" # Affichera le user-agent utilisé par le nÅ“ud HTTPRequest (reconnu par " +"httpbin.org).\n" +" print(response.headers[\"User-Agent\"])\n" +"[/codeblock]\n" +"[b]Un exemple de chargement et d'affichage d'une image récupérée avec une " +"HTTPRequest:[/b]\n" +"[codeblock]\n" +"func _ready():\n" +" # Créer un nÅ“ud de requête HTTP et le connecter au signal de " +"complétion.\n" +" var http_request = HTTPRequest.new()\n" +" add_child(http_request)\n" +" http_request.connect(\"request_completed\", self, " +"\"_http_request_completed\")\n" +"\n" +" # Lancer une requête HTTP. L'URL en-dessous retourne une image PNG au " +"moment de l'écriture de ce tutoriel.\n" +" var error = http_request.request(\"https://via.placeholder.com/512\")\n" +" if error != OK:\n" +" push_error(\"Une erreur est survenue dans la requête HTTP.\")\n" +"\n" +"\n" +"# Appelé quand la requête HTTP est complète.\n" +"func _http_request_completed(result, response_code, headers, body):\n" +" var image = Image.new()\n" +" var error = image.load_png_from_buffer(body)\n" +" if error != OK:\n" +" push_error(\"L'image n'a pu être chargée.\")\n" +"\n" +" var texture = ImageTexture.new()\n" +" texture.create_from_image(image)\n" +"\n" +" # Afficher l'image dans un nÅ“ud TextureRect.\n" +" var texture_rect = TextureRect.new()\n" +" add_child(texture_rect)\n" +" texture_rect.texture = texture\n" +"[/codeblock]" #: doc/classes/HTTPRequest.xml msgid "Cancels the current request." @@ -30974,7 +32018,7 @@ msgstr "" #: doc/classes/HTTPRequest.xml msgid "The file to download into. Will output any received file into it." -msgstr "" +msgstr "Le fichier dans lequel enregistrer le téléchargement." #: doc/classes/HTTPRequest.xml msgid "Maximum number of allowed redirects." @@ -31352,6 +32396,8 @@ msgstr "" msgid "" "Converts a standard RGBE (Red Green Blue Exponent) image to an sRGB image." msgstr "" +"Convertit une image RGBE (« Red Green Blue Exponent ») standard en image " +"sRGB." #: doc/classes/Image.xml msgid "" @@ -31405,6 +32451,7 @@ msgstr "Réduit la taille de l'image par 2." #: doc/classes/Image.xml msgid "Converts the raw data from the sRGB colorspace to a linear scale." msgstr "" +"Convertit des données brutes depuis l'espace de couleur sRGB en linéaire." #: doc/classes/Image.xml msgid "Unlocks the data and prevents changes." @@ -31563,6 +32610,12 @@ msgid "" "[b]Note:[/b] When creating an [ImageTexture], an sRGB to linear color space " "conversion is performed." msgstr "" +"Le format de texture [url=https://en.wikipedia.org/wiki/" +"S3_Texture_Compression]S3TC[/url] qui utiliser une compression de bloc 1, et " +"est une variation plus petite que S3TC, avec seulement 1 bit pour l'alpha et " +"les composants de couleurs étant pré-multitpliés avec l'alpha.\n" +"[b]Note :[/b] À la création d'une [ImageTexture], elle est convertie vers " +"l'espace de couleur linéaire sRGB." #: doc/classes/Image.xml msgid "" @@ -31722,6 +32775,12 @@ msgid "" "[b]Note:[/b] When creating an [ImageTexture], an sRGB to linear color space " "conversion is performed." msgstr "" +"[url=https://en.wikipedia.org/wiki/" +"Ericsson_Texture_Compression#ETC2_and_EAC]Format de compression Ericsson 2[/" +"url] (variante [code]RGBA8[/code]), qui compresse les données RGBA8888 avec " +"le support complet de l'opacité.\n" +"[b]Note :[/b] Lors de la création d'une [ImageTexture], l'espace de couleur " +"sRGB est convertit en linéaire." #: doc/classes/Image.xml msgid "" @@ -31752,6 +32811,9 @@ msgid "" "This mode is faster than [constant INTERPOLATE_CUBIC], but it results in " "lower quality." msgstr "" +"Fait une interpolation bilinéaire. Si l'image est redimensionnée, elle peut " +"être floue. Ce mode est plus rapide que [constant INTERPOLATE_CUBIC], mais " +"le résultat est moins bon." #: doc/classes/Image.xml msgid "" @@ -31759,6 +32821,9 @@ msgid "" "This mode often gives better results compared to [constant " "INTERPOLATE_BILINEAR], at the cost of being slower." msgstr "" +"Fait une interpolation cubique. Si l'image est redimensionnée, elle peut " +"être floue. Ce mode donne en général de meilleurs résultats que [constant " +"INTERPOLATE_BILINEAR], mais est plus lente." #: doc/classes/Image.xml msgid "" @@ -31882,6 +32947,44 @@ msgid "" "[b]Note:[/b] The maximum texture size is 16384×16384 pixels due to graphics " "hardware limitations." msgstr "" +"Une [Texture] basée sur une [Image]. Pour qu'une image soit affichée, une " +"[ImageTexture] doit être créée avec la méthode [method create_from_image] :\n" +"[codeblock]\n" +"var texture = ImageTexture.new()\n" +"var image = Image.new()\n" +"image.load(\"res://icon.png\")\n" +"texture.create_from_image(image)\n" +"$Sprite.texture = texture\n" +"[/codeblock]\n" +"De cette façon, les textures peuvent être créées au lancement du jeu en " +"chargent les images depuis l'éditeur ou de manière externe.\n" +"[b]Avertissement :[/b] Préférez charger les texture importées avec [method " +"@GDScript.load] plutôt que depuis le système de fichier avec [method Image." +"load], parce que ça peut ne pas fonctionner dans les projets exportés :\n" +"[codeblock]\n" +"var texture = load(\"res://icon.png\")\n" +"$Sprite.texture = texture\n" +"[/codeblock]\n" +"C'est parce que les images doivent d'abord être importées comme des " +"[StreamTexture] pour être chargées avec [method @GDScript.load]. Si vous " +"préférez charger un fichier image comme n'importe quelle [Resource], " +"importez-là comme ressource [Image] plutôt, et alors chargez-là normalement " +"avec la méthode [method @GDScript.load].\n" +"Il est à noter que les données de l'image peuvent toujours être récupérées à " +"partir d'une texture importée avec la méthode [method Texture.get_data], qui " +"retourne une copie des données de l'image :\n" +"[codeblock]\n" +"var texture = load(\"res://icon.png\")\n" +"var image : Image = texture.get_data()\n" +"[/codeblock]\n" +"Une [ImageTexture] n'est pas prévue pour être gérée directement depuis " +"l'interface de l'éditeur, et est principalement utilisé pour l'affichage " +"d'images à l'écran de manière dynamique par le code. Si vous devez générer " +"des images de manière procédurale depuis l'éditeur, préférez l'enregistrer " +"puis l'importer sous forme de texture personnalisée en implémentant un " +"nouveau [EditorImportPlugin].\n" +"[b]Note :[/b] La taille maximale des textures est de 16384×16384 pixels à " +"cause des limitations des cartes graphiques." #: doc/classes/ImageTexture.xml msgid "" @@ -31890,6 +32993,10 @@ msgid "" "[code]format[/code] is a value from [enum Image.Format], [code]flags[/code] " "is any combination of [enum Texture.Flags]." msgstr "" +"Crée une nouvelle [ImageTexture] avec la largeur [code]width[/code] et la " +"hauteur [code]height[/code].\n" +"Le [code]format[/code] est une valeur parmi [enum Image.Format], " +"[code]flags[/code] est une combinaison de [enum Texture.Flags]." #: doc/classes/ImageTexture.xml msgid "" @@ -32162,6 +33269,8 @@ msgid "" "Receives a [enum JoystickList] axis and returns its equivalent name as a " "string." msgstr "" +"Reçoit un axe [enum JoystickList] et retourne son nom équivalent comme " +"chaine de caractères." #: doc/classes/Input.xml msgid "Returns the index of the provided button name." @@ -32278,13 +33387,12 @@ msgid "" msgstr "" #: doc/classes/Input.xml -#, fuzzy msgid "" "Returns [code]true[/code] if you are pressing the joypad button (see [enum " "JoystickList])." msgstr "" -"Retourne [code]true[/code] (vrai) si la chaîne de caractères finit par la " -"chaîne de caractères donnée." +"Retourne [code]true[/code] si vous êtes en train d'appuyer le bouton de la " +"manette (voir [enum JoystickList])." #: doc/classes/Input.xml msgid "" @@ -33007,6 +34115,10 @@ msgid "" "On a piano, middle C is 60, and A440 is 69, see the \"MIDI note\" column of " "the piano key frequency chart on Wikipedia for more information." msgstr "" +"Le numéro de la hauteur de la note de ce signal MIDI. Cette valeur est entre " +"0 et 127. Sur un piano, le Do du milieu est 60, et le La 440Hz est 69, voir " +"la colonne des \"notes MIDI\" sur la graphique des fréquences du piano sur " +"Wikipédia pour plus d'informations." #: doc/classes/InputEventMIDI.xml msgid "" @@ -33154,6 +34266,8 @@ msgstr "" #: doc/classes/InputEventScreenDrag.xml msgid "The drag event index in the case of a multi-drag event." msgstr "" +"L'index de l'événement de glissage dans le cas d'un événement de plusieurs " +"glissages." #: doc/classes/InputEventScreenDrag.xml msgid "The drag position." @@ -33321,10 +34435,12 @@ msgid "" "Clears all [InputEventAction] in the [InputMap] and load it anew from " "[ProjectSettings]." msgstr "" +"Efface toutes les [InputEventAction] dans le [InputMap] et les rechargent " +"depuis les [ProjectSettings]." #: doc/classes/InstancePlaceholder.xml msgid "Placeholder for the root [Node] of a [PackedScene]." -msgstr "" +msgstr "Le nÅ“ud fictif pour le [Node] racine de la [PackedScene]." #: doc/classes/InstancePlaceholder.xml msgid "" @@ -33448,17 +34564,22 @@ msgid "" "If it is not [member enabled] or does not have a valid target set, " "InterpolatedCamera acts like a normal Camera." msgstr "" +"[i]Obsolète (sera retiré dans Godot 4.0).[/i] InterpolatedCamera est une " +"[Camera] qui se déplace doucement vers la position et rotation de sa cible.\n" +"Si [member enabled] n'est pas activé ou si elle n'a pas de cible valide de " +"définit, InterpolatedCamera se comportement comme une Camera normale." #: doc/classes/InterpolatedCamera.xml msgid "Sets the node to move toward and orient with." msgstr "" #: doc/classes/InterpolatedCamera.xml -#, fuzzy msgid "" "If [code]true[/code], and a target is set, the camera will move " "automatically." -msgstr "Si [code]true[/code], la lecture commence au chargement de la scène." +msgstr "" +"Si [code]true[/code], et que la cible est définie, la caméra se déplacera " +"automatiquement." #: doc/classes/InterpolatedCamera.xml msgid "" @@ -33511,6 +34632,8 @@ msgstr "" #: doc/classes/IP.xml msgid "Returns all the user's current IPv4 and IPv6 addresses as an array." msgstr "" +"Retourne les actuelles adresses IPv4 et IPv6 de l'utilisateur dans un " +"tableau." #: doc/classes/IP.xml msgid "" @@ -33674,12 +34797,16 @@ msgid "" "Returns the custom background color of the item specified by [code]idx[/" "code] index." msgstr "" +"Retourne la couleur d'arrière-plan personnalisée pour l'élément spécifié à " +"l'index [code]idx[/code]." #: doc/classes/ItemList.xml msgid "" "Returns the custom foreground color of the item specified by [code]idx[/" "code] index." msgstr "" +"Retourne la couleur d'avant-plan personnalisée pour l'élément spécifié à " +"l'index [code]idx[/code]." #: doc/classes/ItemList.xml msgid "Returns the icon associated with the specified index." @@ -34204,6 +35331,42 @@ msgid "" "[/codeblock]\n" "[b]Note:[/b] Only available in the HTML5 platform." msgstr "" +"JavaScriptObject est utilisé pour interagir avec les objets JavaScript " +"récupérés ou créés avec [method JavaScript.get_interface], [method " +"JavaScript.create_object], ou [method JavaScript.create_callback].\n" +"Exemple :\n" +"[codeblock]\n" +"extends Node\n" +"\n" +"var _my_js_callback = JavaScript.create_callback(self, \"myCallback\") # " +"Cette référence doit être gardée\n" +"var console = JavaScript.get_interface(\"console\")\n" +"\n" +"func _init():\n" +" var buf = JavaScript.create_object(\"ArrayBuffer\", 10) # un nouveau " +"ArrayBuffer(10)\n" +" print(buf) # affiche [JavaScriptObject:OBJECT_ID]\n" +" var uint8arr = JavaScript.create_object(\"Uint8Array\", buf) # un " +"nouveau Uint8Array(buf)\n" +" uint8arr[1] = 255\n" +" prints(uint8arr[1], uint8arr.byteLength) # affiche 255 10\n" +" console.log(uint8arr) # affiche dans la console du navigateur " +"\"Uint8Array(10) [ 0, 255, 0, 0, 0, 0, 0, 0, 0, 0 ]\"\n" +"\n" +" # Équivalent au code JavaScript: Array.from(uint8arr)." +"forEach(myCallback)\n" +" JavaScript.get_interface(\"Array\").from(uint8arr)." +"forEach(_my_js_callback)\n" +"\n" +"func myCallback(args):\n" +" # Sera appelé avec les paramètres passée à la fonction \"forEach\"\n" +" # [0, 0, [JavaScriptObject:1173]]\n" +" # [255, 1, [JavaScriptObject:1173]]\n" +" # ...\n" +" # [0, 9, [JavaScriptObject:1180]]\n" +" print(args)\n" +"[/codeblock]\n" +"[b]Note :[/b] Uniquement disponible pour la plateforme HTML5." #: doc/classes/JNISingleton.xml msgid "" @@ -34251,11 +35414,11 @@ msgstr "" #: doc/classes/Joint.xml msgid "The node attached to the first side (A) of the joint." -msgstr "" +msgstr "Le nÅ“ud attaché à la première extrémité (A) du joint." #: doc/classes/Joint.xml msgid "The node attached to the second side (B) of the joint." -msgstr "" +msgstr "Le nÅ“ud attaché à la seconde extrémité (B) du joint." #: doc/classes/Joint.xml msgid "" @@ -34285,6 +35448,8 @@ msgstr "" msgid "" "If [code]true[/code], [member node_a] and [member node_b] can not collide." msgstr "" +"Si [code]true[/code], les nÅ“uds [member node_a] et [member node_b] ne peut " +"pas entrer en collision." #: doc/classes/Joint2D.xml msgid "The first body attached to the joint. Must derive from [PhysicsBody2D]." @@ -34472,6 +35637,11 @@ msgid "" "- [code]result[/code]: The return value of the function which was called.\n" "- [code]id[/code]: The ID of the request this response is targeted to." msgstr "" +"Quand un serveur a reçu et traité une requête, il est attendu qu'il envoie " +"une réponse. Si vous ne voulez pas de réponse alors vous devez envoyer une " +"Notification à la place.\n" +"- [code]result[/code] : Le résultat de la fonction appelée.\n" +"- [code]id[/code] : L'identifiant de la requête que cette réponse cible." #: doc/classes/JSONRPC.xml msgid "" @@ -35731,6 +36901,8 @@ msgid "" "Controls the style of the line's last point. Use [enum LineCapMode] " "constants." msgstr "" +"Contrôle le style du dernier point de la ligne. Utilisez une des constantes " +"de [enum LineCapMode]." #: doc/classes/Line2D.xml msgid "" @@ -35862,12 +37034,44 @@ msgid "" "- Command + Right arrow: Like the End key, move the cursor to the end of the " "line" msgstr "" +"LineEdit fournit une éditeur de texte sur une ligne, utilisé pour les champs " +"de texte.\n" +"Il propose de nombreux raccourcis qui sont toujours disponibles ([code]Ctrl[/" +"code] ici correspond à [code]Commande[/code] sous macOS) :\n" +"- Ctrl + C : Copier\n" +"- Ctrl + X : Couper\n" +"- Ctrl + V ou Ctrl + Y : Coller\n" +"- Ctrl + Z : Annuler\n" +"- Ctrl + Mà j + Z : Refaire\n" +"- Ctrl + U : Supprimer le texte du curseur jusqu'au début de la ligne\n" +"- Ctrl + K : Supprimer le texte du curseur jusqu'à la fin de la ligne\n" +"- Ctrl + A : Sélectionner tout le texte\n" +"- Flèche haut/bas : Déplace le curseur au début/fin de la ligne\n" +"Sous macOS, d'autres raccourcis sont disponibles :\n" +"- Ctrl + F : Comme avec la flèche droite, déplace le curseur d'un caractère " +"vers la droite\n" +"- Ctrl + B : Comme avec la flèche gauche, déplace le curseur d'un caractère " +"vers la gauche\n" +"- Ctrl + P : Comme avec la flèche du haut, déplace le curseur à la ligne " +"précédente\n" +"- Ctrl + N : Comme avec la flèche du bas, déplace le curseur à la ligne " +"suivante\n" +"- Ctrl + D : Comme la touche Supprimer, supprime le caractère à droite du " +"curseur\n" +"- Ctrl + H : Comme la touche Backspace, supprime le caractère à gauche du " +"curseur\n" +"- Commande + Flèche gauche : Comme la touche Home, déplacer le curseur au " +"début de la ligne\n" +"- Commande + Flèche droite : Comme la touche Fin, déplacer le curseur au " +"début de la ligne" #: doc/classes/LineEdit.xml msgid "" "Adds [code]text[/code] after the cursor. If the resulting value is longer " "than [member max_length], nothing happens." msgstr "" +"Ajoute [code]text[/code] après le curseur. Si le résultat est plus long que " +"[member max_length], rien ne se passe." #: doc/classes/LineEdit.xml msgid "Erases the [LineEdit]'s [member text]." @@ -36060,6 +37264,8 @@ msgid "" "If [code]false[/code], it's impossible to select the text using mouse nor " "keyboard." msgstr "" +"Si [code]false[/code], il n'est pas possible de sélectionner le texte avec " +"la souris ou le clavier." #: doc/classes/LineEdit.xml msgid "If [code]false[/code], using shortcuts will be disabled." @@ -36167,6 +37373,8 @@ msgstr "Couleur de police par défaut." #: doc/classes/LineEdit.xml msgid "Font color for selected text (inside the selection rectangle)." msgstr "" +"La couleur de la police du texte sélectionné (à l'intérieur du rectangle de " +"sélection)." #: doc/classes/LineEdit.xml msgid "Font color when editing is disabled." @@ -36343,6 +37551,8 @@ msgid "" "Disables the [Listener2D]. If it's not set as current, this method will have " "no effect." msgstr "" +"Désactive le [Listener2D]. S'il n'était pas déjà l'actuel, cette méthode " +"n'aura aucun effet." #: doc/classes/Listener2D.xml msgid "Returns [code]true[/code] if this [Listener2D] is currently active." @@ -36359,7 +37569,7 @@ msgstr "" #: doc/classes/MainLoop.xml msgid "Abstract base class for the game's main loop." -msgstr "" +msgstr "La classe abstraite de base pour la boucle principale du jeu." #: doc/classes/MainLoop.xml msgid "" @@ -36406,6 +37616,50 @@ msgid "" " print(\" Keys typed: %s\" % var2str(keys_typed))\n" "[/codeblock]" msgstr "" +"[MainLoop] une classe abstraite de base pour la boucle de jeu d'un projet " +"Godot. C'est hérité par [SceneTree], qui est l'implémentation de boucle de " +"jeu par défaut dans les projets Godot, mais il est possible d'écrire sa " +"propre boucle en utilisant une sous-classe de [MainLoop] plutôt que celle " +"par défaut.\n" +"Au lancement de l'application, une implémentation d'une [MainLoop] doit être " +"fournieà au système d'exploitation ; sinon, l'application quittera. Elle est " +"fournie automatiquement (un [SceneTree] est créé) sauf si un [Script] " +"principal est fourni depuis les lignes de commande (avec [code]godot -s " +"my_loop.gd[/code], qui doit alors contenir l'implémentation d'une " +"[MainLoop].\n" +"Voici un exemple de script implémentant une simple [MainLoop]:\n" +"[codeblock]\n" +"extends MainLoop\n" +"\n" +"var time_elapsed = 0\n" +"var keys_typed = []\n" +"var quit = false\n" +"\n" +"func _initialize():\n" +" print(\"Initialisé :\")\n" +" print(\" Time de début : %s\" % str(time_elapsed))\n" +"\n" +"func _idle(delta):\n" +" time_elapsed += delta\n" +" # Retourner \"true\" pour quitter la boucle.\n" +" return quit\n" +"\n" +"func _input_event(event):\n" +" # Enregistrer les touches.\n" +" if event is InputEventKey and event.pressed and !event.echo:\n" +" keys_typed.append(OS.get_scancode_string(event.scancode))\n" +" # Quitter quand Échap appuyé.\n" +" if event.scancode == KEY_ESCAPE:\n" +" quit = true\n" +" # Quitter au premier clic de la souris.\n" +" if event is InputEventMouseButton:\n" +" quit = true\n" +"\n" +"func _finalize():\n" +" print(\"Terminé :\")\n" +" print(\" Temps final : %s\" % str(time_elapsed))\n" +" print(\" Touches pressés : %s\" % var2str(keys_typed))\n" +"[/codeblock]" #: doc/classes/MainLoop.xml msgid "" @@ -36423,6 +37677,8 @@ msgid "" "Called when the user performs an action in the system global menu (e.g. the " "Mac OS menu bar)." msgstr "" +"Appelé quand un utilisateur fait une action depuis le menu global du système " +"(par ex. la barre de menu de macOS)." #: doc/classes/MainLoop.xml msgid "" @@ -36480,12 +37736,16 @@ msgid "" "Should not be called manually, override [method _input_event] instead. Will " "be removed in Godot 4.0." msgstr "" +"Ne devrait pas être appelé manuellement, surchargez plutôt [method " +"_input_event]. Sera supprimé dans Godot 4.0." #: doc/classes/MainLoop.xml msgid "" "Should not be called manually, override [method _input_text] instead. Will " "be removed in Godot 4.0." msgstr "" +"Ne devrait pas être appelé manuellement, surchargez plutôt [method " +"_input_text]. Sera supprimé dans Godot 4.0." #: doc/classes/MainLoop.xml msgid "" @@ -36694,6 +37954,8 @@ msgstr "" msgid "" "Returns a Base64-encoded string of the UTF-8 string [code]utf8_str[/code]." msgstr "" +"Retourne une chaine de caractères codée en Base64 de la chaine UTF-8 " +"[code]utf8_str[/code] donnée." #: doc/classes/Marshalls.xml msgid "" @@ -36705,6 +37967,8 @@ msgstr "" #: doc/classes/Material.xml msgid "Abstract base [Resource] for coloring and shading geometry." msgstr "" +"La [Resource] abstraite de base pour la coloration et le rendu des " +"géométries." #: doc/classes/Material.xml msgid "" @@ -37445,7 +38709,7 @@ msgstr "Le [NodePath] vers le [Skeleton] associé à cette instance." #: doc/classes/MeshInstance.xml msgid "Sets the skin to be used by this instance." -msgstr "" +msgstr "Définit la peau à utiliser pour cette instance." #: doc/classes/MeshInstance.xml msgid "" @@ -37540,6 +38804,7 @@ msgstr "Retourne le maillage de navigation de l'élément." #: doc/classes/MeshLibrary.xml msgid "Returns the transform applied to the item's navigation mesh." msgstr "" +"Retourne la transformation appliquée au maillage de navigation de l'élément." #: doc/classes/MeshLibrary.xml msgid "" @@ -37587,6 +38852,7 @@ msgstr "Définit le maillage de navigation de l'élément." #: doc/classes/MeshLibrary.xml msgid "Sets the transform to apply to the item's navigation mesh." msgstr "" +"Définit la transformation appliquée au maillage de navigation de l'élément." #: doc/classes/MeshLibrary.xml msgid "Sets a texture to use as the item's preview icon in the editor." @@ -37621,6 +38887,8 @@ msgstr "Définit la taille de l'image, nécessaire pour garder une référence." #: doc/classes/MeshTexture.xml msgid "Sets the mesh used to draw. It must be a mesh using 2D vertices." msgstr "" +"Définit le maillage à utiliser pour l'affichage. Doit être un maillage avec " +"des sommets en 2D." #: doc/classes/MethodTweener.xml msgid "" @@ -37643,14 +38911,16 @@ msgid "" "Sets the time in seconds after which the [MethodTweener] will start " "interpolating. By default there's no delay." msgstr "" +"Définit le délai en secondes avant que le [MethodTweener] commence son " +"interpolation. Par défaut, il n'y a pas de délai." -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used easing from [enum Tween.EaseType]. If not set, the " "default easing is used from the [SceneTreeTween] that contains this Tweener." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used transition from [enum Tween.TransitionType]. If not " "set, the default transition is used from the [SceneTreeTween] that contains " @@ -37855,6 +39125,8 @@ msgstr "" #: doc/classes/MultiMesh.xml msgid "Format of transform used to transform mesh, either 2D or 3D." msgstr "" +"Le format de la transformation utilisée pour le transformation du maillage, " +"soit en 2D ou en 3D." #: doc/classes/MultiMesh.xml msgid "" @@ -37946,6 +39218,9 @@ msgid "" "resource in 2D.\n" "Usage is the same as [MultiMeshInstance]." msgstr "" +"Le [MultiMeshInstance2D] est un nÅ“ud spécialisé pour instancier une " +"ressource [MultiMesh] en 2D.\n" +"L'utilisation est le même que [MultiMeshInstance]." #: doc/classes/MultiMeshInstance2D.xml msgid "The [MultiMesh] that will be drawn by the [MultiMeshInstance2D]." @@ -38390,6 +39665,12 @@ msgid "Creates the agent." msgstr "Crée un agent." #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]agent[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "Renvoie [code]true[/code] si le chemin donné est filtré." @@ -38457,6 +39738,12 @@ msgid "Create a new map." msgstr "Crée une nouvelle carte." #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation agents [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns the map cell size." msgstr "Retourne la taille des cellules de la carte." @@ -38485,6 +39772,12 @@ msgid "Returns the navigation path to reach the destination from the origin." msgstr "Renvoie le traqueur de position à l'identification donnée." #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation regions [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns [code]true[/code] if the map is active." msgstr "Retourne [code]true[/code] si l'[AABB] est vide." @@ -38508,6 +39801,12 @@ msgid "Creates a new region." msgstr "Crée une nouvelle région." #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]region[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Sets the map for the region." msgstr "Retourne la hauteur du contenu." @@ -38556,11 +39855,10 @@ msgid "Returns the path from start to finish in global coordinates." msgstr "Le point de collision, dans les coordonnées globales." #: doc/classes/NavigationAgent.xml -#, fuzzy msgid "" "Returns which index the agent is currently on in the navigation path's " "[PoolVector3Array]." -msgstr "Retourne le cache de points sous forme de [PackedVector3Array]." +msgstr "Retourne le cache de points sous forme de [PoolVector3Array]." #: doc/classes/NavigationAgent.xml msgid "" @@ -38700,7 +39998,7 @@ msgstr "" #: doc/classes/NavigationAgent2D.xml msgid "2D agent used in navigation for collision avoidance." -msgstr "" +msgstr "Un agent 2D utilisé en navigation pour éviter les collisions." #: doc/classes/NavigationAgent2D.xml msgid "" @@ -38713,11 +40011,10 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent2D.xml -#, fuzzy msgid "" "Returns which index the agent is currently on in the navigation path's " "[PoolVector2Array]." -msgstr "Retourne le cache de points sous forme de [PackedVector3Array]." +msgstr "Retourne le cache de points sous forme de [PoolVector2Array]." #: doc/classes/NavigationAgent2D.xml msgid "" @@ -38759,6 +40056,7 @@ msgstr "" msgid "" "Clears the array of polygons, but it doesn't clear the array of vertices." msgstr "" +"Efface le tableau de polygones, mais n'efface pas le tableau de sommets." #: doc/classes/NavigationMesh.xml msgid "" @@ -38778,6 +40076,8 @@ msgid "" "Returns a [PoolIntArray] containing the indices of the vertices of a created " "polygon." msgstr "" +"Retourne un [PoolIntArray] contenant les indices des sommets du polygone " +"créé." #: doc/classes/NavigationMesh.xml #, fuzzy @@ -38789,6 +40089,8 @@ msgid "" "Returns a [PoolVector3Array] containing all the vertices being used to " "create the polygons." msgstr "" +"Retourne un [PoolVector3Array] contenant les indices des sommets du polygone " +"créé." #: doc/classes/NavigationMesh.xml msgid "" @@ -39001,18 +40303,59 @@ msgid "Represents the size of the [enum SourceGeometryMode] enum." msgstr "Représente la taille de l'énumération [enum SourceGeometryMode]." #: doc/classes/NavigationMeshGenerator.xml -msgid "This class is responsible for creating and clearing navigation meshes." +msgid "Helper class for creating and clearing navigation meshes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml msgid "" -"Bakes the navigation mesh. This will allow you to use pathfinding with the " -"navigation system." +"This class is responsible for creating and clearing 3D navigation meshes " +"used as [NavigationMesh] resources inside [NavigationMeshInstance]. The " +"[NavigationMeshGenerator] has very limited to no use for 2D as the " +"navigation mesh baking process expects 3D node types and 3D source geometry " +"to parse.\n" +"The entire navigation mesh baking is best done in a separate thread as the " +"voxelization, collision tests and mesh optimization steps involved are very " +"performance and time hungry operations.\n" +"Navigation mesh baking happens in multiple steps and the result depends on " +"3D source geometry and properties of the [NavigationMesh] resource. In the " +"first step, starting from a root node and depending on [NavigationMesh] " +"properties all valid 3D source geometry nodes are collected from the " +"[SceneTree]. Second, all collected nodes are parsed for their relevant 3D " +"geometry data and a combined 3D mesh is build. Due to the many different " +"types of parsable objects, from normal [MeshInstance]s to [CSGShape]s or " +"various [CollisionObject]s, some operations to collect geometry data can " +"trigger [VisualServer] and [PhysicsServer] synchronizations. Server " +"synchronization can have a negative effect on baking time or framerate as it " +"often involves [Mutex] locking for thread security. Many parsable objects " +"and the continuous synchronization with other threaded Servers can increase " +"the baking time significantly. On the other hand only a few but very large " +"and complex objects will take some time to prepare for the Servers which can " +"noticeably stall the next frame render. As a general rule the total amount " +"of parsable objects and their individual size and complexity should be " +"balanced to avoid framerate issues or very long baking times. The combined " +"mesh is then passed to the Recast Navigation Object to test the source " +"geometry for walkable terrain suitable to [NavigationMesh] agent properties " +"by creating a voxel world around the meshes bounding area.\n" +"The finalized navigation mesh is then returned and stored inside the " +"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "Clears the navigation mesh." -msgstr "Efface le maillage de navigation." +msgid "" +"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " +"nodes under the provided [code]root_node[/code] or a specific group of nodes " +"for potential source geometry. The parse behavior can be controlled with the " +"[member NavigationMesh.geometry/parsed_geometry_type] and [member " +"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[NavigationMesh] resource." +msgstr "" + +#: doc/classes/NavigationMeshGenerator.xml +#, fuzzy +msgid "" +"Removes all polygons and vertices from the provided [code]nav_mesh[/code] " +"resource." +msgstr "Supprime l’animation avec la touche [code]name[/code]." #: doc/classes/NavigationMeshInstance.xml msgid "An instance of a [NavigationMesh]." @@ -39032,7 +40375,10 @@ msgid "" "thread is useful because navigation baking is not a cheap operation. When it " "is completed, it automatically sets the new [NavigationMesh]. Please note " "that baking on separate thread may be very slow if geometry is parsed from " -"meshes as async access to each mesh involves heavy synchronization." +"meshes as async access to each mesh involves heavy synchronization. Also, " +"please note that baking on a separate thread is automatically disabled on " +"operating systems that cannot use threads (such as HTML5 with threads " +"disabled)." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -39045,7 +40391,7 @@ msgstr "" #: doc/classes/NavigationMeshInstance.xml msgid "Determines if the [NavigationMeshInstance] is enabled or disabled." -msgstr "" +msgstr "Détermine si le [NavigationMeshInstance] est actif ou non." #: doc/classes/NavigationMeshInstance.xml msgid "The [NavigationMesh] resource to use." @@ -39062,7 +40408,7 @@ msgstr "Avertit quand le [NavigationMesh] a changé." #: doc/classes/NavigationObstacle.xml msgid "3D obstacle used in navigation for collision avoidance." -msgstr "" +msgstr "Un obstacle 3D utilisé en navigation pour éviter les collisions." #: doc/classes/NavigationObstacle.xml msgid "" @@ -39079,6 +40425,11 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle.xml +#, fuzzy +msgid "Returns the [RID] of this obstacle on the [NavigationServer]." +msgstr "Retourne le [RID] de la énième forme d'une zone." + +#: doc/classes/NavigationObstacle.xml msgid "" "Sets the [Navigation] node used by the obstacle. Useful when you don't want " "to make the obstacle a child of a [Navigation] node." @@ -39098,7 +40449,7 @@ msgstr "" #: doc/classes/NavigationObstacle2D.xml msgid "2D obstacle used in navigation for collision avoidance." -msgstr "" +msgstr "Un obstacle 2D utilisé en navigation pour éviter les collisions." #: doc/classes/NavigationObstacle2D.xml msgid "" @@ -39115,6 +40466,11 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle2D.xml +#, fuzzy +msgid "Returns the [RID] of this obstacle on the [Navigation2DServer]." +msgstr "Retourne le [RID] de la énième forme d'une zone." + +#: doc/classes/NavigationObstacle2D.xml msgid "" "Sets the [Navigation2D] node used by the obstacle. Useful when you don't " "want to make the obstacle a child of a [Navigation2D] node." @@ -39266,6 +40622,8 @@ msgstr "Renvoie l'inverse de la racine carrée du paramètre." msgid "" "Returns the closest point between the navigation surface and the segment." msgstr "" +"Retourne le point le plus proche de la surface de la navigation et du " +"segment." #: doc/classes/NavigationServer.xml msgid "" @@ -39555,6 +40913,8 @@ msgstr "Compression [url=https://facebook.github.io/zstd/]Zstandard[/url]." #: doc/classes/NetworkedMultiplayerPeer.xml msgid "A high-level network interface to simplify multiplayer interactions." msgstr "" +"Une interface réseau haut-niveau pour simplifier les interactions " +"multijoueurs." #: doc/classes/NetworkedMultiplayerPeer.xml msgid "" @@ -39583,6 +40943,8 @@ msgid "" "Returns the ID of the [NetworkedMultiplayerPeer] who sent the most recent " "packet." msgstr "" +"Retourne l'identifiant du [NetworkedMultiplayerPeer] qui a envoyé le plus " +"récent paquet." #: doc/classes/NetworkedMultiplayerPeer.xml msgid "Returns the ID of this [NetworkedMultiplayerPeer]." @@ -39678,6 +41040,7 @@ msgstr "La tentative de connexion a réussi." #: doc/classes/NetworkedMultiplayerPeer.xml msgid "Packets are sent to the server and then redistributed to other peers." msgstr "" +"Les paquets sont envoyés au serveur puis redistribués aux autres pairs." #: doc/classes/NetworkedMultiplayerPeer.xml msgid "Packets are sent to the server alone." @@ -40350,6 +41713,8 @@ msgid "" "Returns [code]true[/code] if the node is folded (collapsed) in the Scene " "dock." msgstr "" +"Retourne [code]true[/code] si le nÅ“ud est réduit (la descendance est " +"masquée) dans le dock de la scène." #: doc/classes/Node.xml msgid "" @@ -40377,7 +41742,7 @@ msgstr "" #: doc/classes/Node.xml msgid "" "Returns [code]true[/code] if the physics interpolated flag is set for this " -"Node (see [method set_physics_interpolated]).\n" +"Node (see [member physics_interpolation_mode]).\n" "[b]Note:[/b] Interpolation will only be active is both the flag is set " "[b]and[/b] physics interpolation is enabled within the [SceneTree]. This can " "be tested using [method is_physics_interpolated_and_enabled]." @@ -40385,8 +41750,8 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Returns [code]true[/code] if physics interpolation is enabled (see [method " -"set_physics_interpolated]) [b]and[/b] enabled in the [SceneTree].\n" +"Returns [code]true[/code] if physics interpolation is enabled (see [member " +"physics_interpolation_mode]) [b]and[/b] enabled in the [SceneTree].\n" "This is a convenience version of [method is_physics_interpolated] that also " "checks whether physics interpolation is enabled globally.\n" "See [member SceneTree.physics_interpolation] and [member ProjectSettings." @@ -40428,6 +41793,8 @@ msgid "" "Returns [code]true[/code] if the node is processing unhandled input (see " "[method set_process_unhandled_input])." msgstr "" +"Retourne [code]true[/code] si le nÅ“ud est en train de gérer les entrées non " +"traitées (voir [method set_process_unhandled_input])." #: doc/classes/Node.xml msgid "" @@ -40618,6 +41985,8 @@ msgid "" "Sends a [method rpc] using an unreliable protocol. Returns an empty " "[Variant]." msgstr "" +"Envoie un [method rpc] en utilisant un protocole non fiable. Retourne un " +"[Variant] vide." #: doc/classes/Node.xml msgid "" @@ -40680,14 +42049,6 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Enables or disables physics interpolation per node, offering a finer grain " -"of control than turning physics interpolation on and off globally.\n" -"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " -"interpolation can sometimes give superior results." -msgstr "" - -#: doc/classes/Node.xml -msgid "" "Enables or disables physics (i.e. fixed framerate) processing. When a node " "is being processed, it will receive a [constant " "NOTIFICATION_PHYSICS_PROCESS] at a fixed (usually 60 FPS, see [member Engine." @@ -40817,6 +42178,17 @@ msgstr "" #: doc/classes/Node.xml msgid "Pause mode. How the node will behave if the [SceneTree] is paused." msgstr "" +"Le mode de pause. La façon dont le nÅ“ud se comportera quand le [SceneTree] " +"est en pause." + +#: doc/classes/Node.xml +msgid "" +"Allows enabling or disabling physics interpolation per node, offering a " +"finer grain of control than turning physics interpolation on and off " +"globally.\n" +"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " +"interpolation can sometimes give superior results." +msgstr "" #: doc/classes/Node.xml msgid "" @@ -40981,6 +42353,24 @@ msgid "Continue to process regardless of the [SceneTree] pause state." msgstr "" #: doc/classes/Node.xml +msgid "" +"Inherits physics interpolation mode from the node's parent. For the root " +"node, it is equivalent to [constant PHYSICS_INTERPOLATION_MODE_ON]. Default." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn off physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn on physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml msgid "Duplicate the node's signals." msgstr "Dupliquer les signaux du nÅ“ud." @@ -41338,7 +42728,7 @@ msgstr "Hauteur de la texture générée." #: modules/opensimplex/doc_classes/NoiseTexture.xml msgid "The [OpenSimplexNoise] instance used to generate the noise." -msgstr "" +msgstr "L'instance [OpenSimplexNoise] utilisée pour générer le bruit." #: modules/opensimplex/doc_classes/NoiseTexture.xml msgid "" @@ -41401,6 +42791,43 @@ msgid "" "code]. This bug only applies to Object itself, not any of its descendents " "like [Reference]." msgstr "" +"Chaque classe qui n'est pas intégrée hérite de cette classe.\n" +"Vous pouvez construire des Objects depuis les langages de script, avec " +"[code]Object.new()[/code] dans GDScript, [code]new Object[/code] dans C#, ou " +"le nÅ“ud \"Construire un Objet\" dans VisualScript.\n" +"Les objets ne gère pas la mémoire. Si une classe hérite de Object, vous " +"devez manuellement supprimer les instances quand elles ne sont plus " +"utilisées. Pour cela, appelez la méthode [method free] depuis votre script " +"ou supprimez l'instance en C++.\n" +"Certaines classes qui hérite de Object ajoute la gestion de la mémoire. " +"C'est le cas de [Reference], qui contient un compteur de références et se " +"supprime automatiquement quand il n'est pas référencé. [Node], un autre type " +"fondamental, supprime tous ces enfants quand il est libéré de la mémoire.\n" +"Les objet exportent des propriétés, qui sont principalement utilisées pour " +"enregistrement et les modifications, mais pas tant que ça en programmation. " +"Les propriétés sont exportées dans [method _get_property_list] et gérées " +"dans [method _get] et [method _set]. Par contre, les langages de script et C+" +"+ ont un système plus simple pour les exporter.\n" +"L'existence de propriétés peut être directement vérifié dans GDScript avec " +"[code]in[/code]:\n" +"[codeblock]\n" +"var n = Node2D.new()\n" +"print(\"position\" in n) # Affiche \"True\".\n" +"print(\"other_property\" in n) # Affiche \"False\".\n" +"[/codeblock]\n" +"L'opérateur [code]in[/code] sera évalué à [code]true[/code] aussi longtemps " +"que la clé existe, même si sa valeur est [code]null[/code].\n" +"Les objets reçoivent aussi des notifications. Les notifications sont " +"simplement un moyen de notifier à l'objet différents événements, pour qu'ils " +"soient tous traités ensemble. Voir [method _notification].\n" +"[b]Note :[/b] Contrairement aux références aux [Reference], les références " +"aux Object sont stockés dans une variable qui peut devenir invalide sans " +"prévenir. Pour cela, il est recommandé d'utiliser [Reference] pour les " +"classe de données plutôt que [Object].\n" +"[b]Note :[/b] À cause d'un bug, il n'est pas possible de créer un objet avec " +"[code]Object.new()[/code]. Plutôt, utilisez [code]ClassDB." +"instance(\"Object\")[/code]. Ce bug ne s'applique qu'aux Object, et non à sa " +"descendance comme les [Reference]." #: doc/classes/Object.xml doc/classes/Reference.xml doc/classes/Resource.xml msgid "When and how to avoid using nodes for everything" @@ -41408,7 +42835,7 @@ msgstr "Quand et comment éviter d'utiliser des nÅ“uds pour tout" #: doc/classes/Object.xml msgid "Advanced exports using _get_property_list()" -msgstr "" +msgstr "Exports avancés avec _get_property_list()" #: doc/classes/Object.xml msgid "" @@ -41640,13 +43067,12 @@ msgid "" msgstr "" #: doc/classes/Object.xml -#, fuzzy msgid "Returns the object's metadata as a [PoolStringArray]." -msgstr "Retourne le cache d’inclinaisons en tant que [PackedFloat32Array]." +msgstr "Retourne les métadonnées de l'objet en tant que [PoolStringArray]." #: doc/classes/Object.xml msgid "Returns the object's methods and their signatures as an [Array]." -msgstr "" +msgstr "Retourne les méthodes et leur signature de l'objet dans un [Array]." #: doc/classes/Object.xml msgid "" @@ -42140,14 +43566,17 @@ msgstr "" #: modules/opensimplex/doc_classes/OpenSimplexNoise.xml msgid "Returns the 2D noise value [code][-1,1][/code] at the given position." msgstr "" +"Retourne la valeur du bruit 2D [code][-1,1][/code] à la position donnée." #: modules/opensimplex/doc_classes/OpenSimplexNoise.xml msgid "Returns the 3D noise value [code][-1,1][/code] at the given position." msgstr "" +"Retourne la valeur du bruit 3D [code][-1,1][/code] à la position donnée." #: modules/opensimplex/doc_classes/OpenSimplexNoise.xml msgid "Returns the 4D noise value [code][-1,1][/code] at the given position." msgstr "" +"Retourne la valeur du bruit 4D [code][-1,1][/code] à la position donnée." #: modules/opensimplex/doc_classes/OpenSimplexNoise.xml msgid "" @@ -42192,7 +43621,7 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "Button control that provides selectable options when pressed." -msgstr "" +msgstr "Un bouton qui propose des options à sélectionner quand appuyé." #: doc/classes/OptionButton.xml msgid "" @@ -42249,6 +43678,9 @@ msgid "" "Retrieves the metadata of an item. Metadata may be any type and can be used " "to store extra information about an item, such as an external string ID." msgstr "" +"Retourne les méta-données d'un élément. Les méta-données peuvent être de " +"n'importe quel type et peuvent être utilisées pour enregistrer des " +"informations additionnelles sur un élément, comme un identifiant externe." #: doc/classes/OptionButton.xml doc/classes/PopupMenu.xml msgid "Returns the text of the item at index [code]idx[/code]." @@ -42260,10 +43692,13 @@ msgid "Returns the tooltip of the item at index [code]idx[/code]." msgstr "Retourne le texte de l'élément à l'index [code]idx[/code]." #: doc/classes/OptionButton.xml +#, fuzzy msgid "" -"Returns the ID of the selected item, or [code]0[/code] if no item is " +"Returns the ID of the selected item, or [code]-1[/code] if no item is " "selected." msgstr "" +"Retourne la position de l’élément qui a actuellement le focus. Ou retourne " +"[code]-1[/code] si aucun n'a le focus." #: doc/classes/OptionButton.xml msgid "" @@ -42285,7 +43720,8 @@ msgstr "Retire l'élément à l'index [code]idx[/code]." #: doc/classes/OptionButton.xml msgid "" "Selects an item by index and makes it the current item. This will work even " -"if the item is disabled." +"if the item is disabled.\n" +"Passing [code]-1[/code] as the index deselects any currently selected item." msgstr "" #: doc/classes/OptionButton.xml @@ -42413,6 +43849,11 @@ msgid "" "driver, date and time, timers, environment variables, execution of binaries, " "command line, etc." msgstr "" +"Les fonction du système d'exploitation. OS fournit les fonctionnalités les " +"plus courantes pour communiquer avec le système hôte, comme l'accès au " +"presse-papiers, le pilote vidéo, la date et l'heure, les minuteurs, les " +"variables d'environnement, l'exécution de programmes, les lignes de " +"commandes, etc." #: doc/classes/OS.xml msgid "" @@ -42895,6 +44336,9 @@ msgid "" "code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" +"Retourne la position de l'écran spécifié par son index. Si [code]screen[/" +"code] est [code]-1[/code] (la valeur par défaut), l'écran actuel sera " +"utilisé." #: doc/classes/OS.xml msgid "" @@ -42929,16 +44373,21 @@ msgid "" "code] is [code]-1[/code] (the default value), the current screen will be " "used." msgstr "" +"Retourne la dimension en pixel de l'écran spécifié. Si [code]screen[/code] " +"est [code]-1[/code] (la valeur par défaut), l'écran actuel sera utilisé." #: doc/classes/OS.xml msgid "" "Returns the amount of time in milliseconds it took for the boot logo to " "appear." msgstr "" +"Retourne le temps en millisecondes avant que le logo au lancement apparaisse." #: doc/classes/OS.xml msgid "Returns the maximum amount of static memory used (only works in debug)." msgstr "" +"Retourne la quantité maximal de la mémoire statique utilisée (ne fonctionne " +"qu'en débogage)." #: doc/classes/OS.xml msgid "" @@ -42960,12 +44409,12 @@ msgstr "" #: doc/classes/OS.xml #, fuzzy msgid "Returns the epoch time of the operating system in milliseconds." -msgstr "Retourne la position du point à l'index [code]point[/code]." +msgstr "Retourne le temps epoch du système d'exploitation en millisecondes." #: doc/classes/OS.xml #, fuzzy msgid "Returns the epoch time of the operating system in seconds." -msgstr "Retourne la position du point à l'index [code]point[/code]." +msgstr "Retourne le temps epoch du système d'exploitation en secondes." #: doc/classes/OS.xml msgid "" @@ -43645,7 +45094,7 @@ msgstr "" #: doc/classes/OS.xml msgid "The size of the window (without counting window manager decorations)." -msgstr "" +msgstr "La taille de la fenêtre (sans compter ses décorations en haut)." #: doc/classes/OS.xml msgid "" @@ -43749,6 +45198,8 @@ msgid "" "Display handle:\n" "- Linux: [code]X11::Display*[/code] for the display" msgstr "" +"Gestion de l'affichage :\n" +"- Linux : [code]X11::Display*[/code] pour l'écran" #: doc/classes/OS.xml msgid "" @@ -43809,10 +45260,12 @@ msgstr "Inverser l'orientation de l'écran en mode portrait." #: doc/classes/OS.xml msgid "Uses landscape or reverse landscape based on the hardware sensor." msgstr "" +"Utilise le mode paysage ou paysage inversé suivant le capteur matériel." #: doc/classes/OS.xml msgid "Uses portrait or reverse portrait based on the hardware sensor." msgstr "" +"Utilise le mode portrait ou portrait inversé suivant le capteur matériel." #: doc/classes/OS.xml msgid "Uses most suitable orientation based on the hardware sensor." @@ -43923,6 +45376,52 @@ msgid "" " push_error(\"An error occurred while saving the scene to disk.\")\n" "[/codeblock]" msgstr "" +"Une interface simplifiée pour un fichier de scène. Fournit l'accès aux " +"opérations et vérifications que peuvent être faites sur la ressource de " +"scène elle-même.\n" +"Peut être utilisé pour enregistrer un nÅ“ud dans un fichier. à " +"l'enregistrement, le nÅ“ud tout comme tous les nÅ“uds dont il est propriétaire " +"sont enregistrés dans le fichier (voir la propriété [code]owner[/code] de " +"[Node]).\n" +"[b]Note :[/b] Le nÅ“ud n'a pas besoin d'être son propre propriétaire.\n" +"[b]Exemple de chargement d'une scène enregistrée :[/b]\n" +"[codeblock]\n" +"# Utiliser `load()` plutôt que `preload()` si le chemin n'est pas connu à la " +"compilation.\n" +"var scene = preload(\"res://scene.tscn\").instance()\n" +"# Ajouter un nÅ“ud comme enfant du nÅ“ud auquel le script est attaché.\n" +"add_child(scene)\n" +"[/codeblock]\n" +"[b]Exemple d'enregistrement d'un nÅ“ud avec différents propriétaires :[/b] 3 " +"objets sont crées : [code]Node2D[/code] ([code]node[/code]), " +"[code]RigidBody2D[/code] ([code]rigid[/code]) et [code]CollisionObject2D[/" +"code] ([code]collision[/code]). [code]collision[/code] est un enfant de " +"[code]rigid[/code] qui est un enfant de [code]node[/code]. Seul [code]rigid[/" +"code] est la propriété de [code]node[/code] et [code]pack[/code] " +"n'enregistrera alors que ces deux nÅ“uds, mais pas [code]collision[/code].\n" +"[codeblock]\n" +"# Créer les objets.\n" +"var node = Node2D.new()\n" +"var rigid = RigidBody2D.new()\n" +"var collision = CollisionShape2D.new()\n" +"\n" +"# Créer la hiérarchie des objets.\n" +"rigid.add_child(collision)\n" +"node.add_child(rigid)\n" +"\n" +"# Changer le propriétaire de `rigid`, mais pas de `collision`.\n" +"rigid.owner = node\n" +"\n" +"var scene = PackedScene.new()\n" +"# Seulement `node` and `rigid` sont dans le paquet.\n" +"var result = scene.pack(node)\n" +"if result == OK:\n" +" var error = ResourceSaver.save(\"res://chemin/nom.scn\", scene) # Ou " +"\"user://...\"\n" +" if error != OK:\n" +" push_error(\"Une erreur est survenue à l'enregistrement de cette " +"scène sur le disque.\")\n" +"[/codeblock]" #: doc/classes/PackedScene.xml msgid "Returns [code]true[/code] if the scene file has nodes." @@ -44016,6 +45515,8 @@ msgid "" "Returns the error state of the last packet received (via [method get_packet] " "and [method get_var])." msgstr "" +"Retourne un état d'erreur du dernier paquet reçu (via [method get_packet] et " +"[method get_var])." #: doc/classes/PacketPeer.xml #, fuzzy @@ -44133,10 +45634,13 @@ msgstr "" msgid "" "A status representing a [PacketPeerDTLS] that is connected to a remote peer." msgstr "" +"Un status représentant un [PacketPeerDTLS] qui est connecté à un pair " +"distant." #: doc/classes/PacketPeerDTLS.xml msgid "A status representing a [PacketPeerDTLS] in a generic error state." msgstr "" +"Un status représentant un [PacketPeerDTLS] dans un état d'erreur générique." #: doc/classes/PacketPeerDTLS.xml msgid "" @@ -44146,7 +45650,7 @@ msgstr "" #: doc/classes/PacketPeerStream.xml msgid "Wrapper to use a PacketPeer over a StreamPeer." -msgstr "" +msgstr "Une encapsulation pour utiliser un PacketPeer dans une StreamPeer." #: doc/classes/PacketPeerStream.xml msgid "" @@ -44295,7 +45799,7 @@ msgstr "Démo 2D de machine à états finis" #: doc/classes/Panel.xml doc/classes/Skeleton.xml doc/classes/SkeletonIK.xml msgid "3D Inverse Kinematics Demo" -msgstr "" +msgstr "Démo de cinématique inverse en 3D" #: doc/classes/Panel.xml msgid "The style of this [Panel]." @@ -44317,7 +45821,7 @@ msgstr "Le style de l'arrière-plan de [PanelContainer]." #: doc/classes/PanoramaSky.xml msgid "A type of [Sky] used to draw a background texture." -msgstr "" +msgstr "Un type de [Sky] utilisé pour afficher la texture d'arrière-plan." #: doc/classes/PanoramaSky.xml msgid "" @@ -44353,6 +45857,7 @@ msgstr "" #: doc/classes/ParallaxBackground.xml msgid "The base position offset for all [ParallaxLayer] children." msgstr "" +"Le décalage de la position de base pour tous les enfants du [ParallaxLayer]." #: doc/classes/ParallaxBackground.xml msgid "The base motion scale for all [ParallaxLayer] children." @@ -44656,6 +46161,7 @@ msgstr "" #: doc/classes/ParticlesMaterial.xml msgid "Each particle's rotation will be animated along this [CurveTexture]." msgstr "" +"La rotation de chaque particule sera animé suivant cette [CurveTexture]." #: doc/classes/ParticlesMaterial.xml msgid "" @@ -44669,14 +46175,20 @@ msgstr "" #: doc/classes/ParticlesMaterial.xml msgid "Each particle's angular velocity will vary along this [CurveTexture]." msgstr "" +"La vitesse de rotation de chaque particule variera suivant cette " +"[CurveTexture]." #: doc/classes/ParticlesMaterial.xml msgid "Each particle's animation offset will vary along this [CurveTexture]." msgstr "" +"La position de l'animation de chaque particule variera suivant cette " +"[CurveTexture]." #: doc/classes/ParticlesMaterial.xml msgid "Each particle's animation speed will vary along this [CurveTexture]." msgstr "" +"La vitesse d'animation de chaque particule variera suivant cette " +"[CurveTexture]." #: doc/classes/ParticlesMaterial.xml msgid "" @@ -44695,6 +46207,8 @@ msgid "" "The box's extents if [code]emission_shape[/code] is set to [constant " "EMISSION_SHAPE_BOX]." msgstr "" +"La taille de la boite si [code]emission_shape[/code] est à [constant " +"EMISSION_SHAPE_BOX]." #: doc/classes/ParticlesMaterial.xml msgid "" @@ -44778,6 +46292,7 @@ msgstr "La teinte de chaque particule variera suivant cette [CurveTexture]." msgid "" "Each particle's linear acceleration will vary along this [CurveTexture]." msgstr "" +"La vitesse linéaire de chaque particule variera suivant cette [CurveTexture]." #: doc/classes/ParticlesMaterial.xml msgid "" @@ -45040,9 +46555,8 @@ msgid "Forbids the PathFollow to rotate." msgstr "Interdit au PathFollow de pivoter pour suivre le chemin." #: doc/classes/PathFollow.xml -#, fuzzy msgid "Allows the PathFollow to rotate in the Y axis only." -msgstr "Interdit au PathFollow3D de tourner." +msgstr "Autorise le PathFollow à ne pivoter que selon l'axe Y." #: doc/classes/PathFollow.xml msgid "Allows the PathFollow to rotate in both the X, and Y axes." @@ -45113,7 +46627,7 @@ msgstr "" #: doc/classes/PCKPacker.xml msgid "Creates packages that can be loaded into a running project." -msgstr "" +msgstr "Crée des paquets qui peuvent être chargés dans un projet lancé." #: doc/classes/PCKPacker.xml msgid "" @@ -45148,6 +46662,9 @@ msgid "" "code] file extension isn't added automatically, so it should be part of " "[code]pck_name[/code] (even though it's not required)." msgstr "" +"Crée un nouveau fichier PCK nommé [code]pck_name[/code]. L'extension de " +"fichier [code].pck[/code] n'est pas ajoutée automatiquement, dont elle doit " +"être présente dans [code]pck_name[/code] (mais ça n'est pas indispensable)." #: doc/classes/Performance.xml msgid "Exposes performance-related data." @@ -45300,7 +46817,7 @@ msgstr "Le nombre de nÅ“uds [RigidBody2D] actifs dans le jeu." #: doc/classes/Performance.xml msgid "Number of collision pairs in the 2D physics engine." -msgstr "" +msgstr "Le nombre de paires de collision dans le moteur physique 2D." #: doc/classes/Performance.xml msgid "Number of islands in the 2D physics engine." @@ -45308,7 +46825,7 @@ msgstr "Le nombre d'îles dans le moteur physique 2D." #: doc/classes/Performance.xml msgid "Number of active [RigidBody] and [VehicleBody] nodes in the game." -msgstr "Le nombre de nÅ“uds [RigidBody] et [VehicleBody] dans le jeu." +msgstr "Le nombre de nÅ“uds [RigidBody] et [VehicleBody] actifs dans le jeu." #: doc/classes/Performance.xml msgid "Number of collision pairs in the 3D physics engine." @@ -45456,7 +46973,7 @@ msgstr "Retourne la position locale au point de contact." #: doc/classes/Physics2DDirectBodyState.xml #: doc/classes/PhysicsDirectBodyState.xml msgid "Returns the local shape index of the collision." -msgstr "" +msgstr "Retourne l'index de la forme locale de la collision." #: doc/classes/Physics2DDirectBodyState.xml #: doc/classes/PhysicsDirectBodyState.xml @@ -45800,7 +47317,7 @@ msgstr "Désactive une forme donnée dans une zone." #: doc/classes/Physics2DServer.xml doc/classes/PhysicsServer.xml msgid "Sets the transform matrix for an area shape." -msgstr "" +msgstr "Définit la matrice de transformation pour la forme de l'aire." #: doc/classes/Physics2DServer.xml doc/classes/PhysicsServer.xml msgid "Assigns a space to the area." @@ -45866,6 +47383,8 @@ msgid "" "Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/" "code] if the body is destroyed or removed from the physics space." msgstr "" +"Retourne le [Physics2DDirectBodyState] du corps. Retourne [code]null[/code] " +"si le corps est détruit ou retiré de l'espace physique." #: doc/classes/Physics2DServer.xml doc/classes/PhysicsServer.xml msgid "" @@ -45899,7 +47418,7 @@ msgstr "" #: doc/classes/Physics2DServer.xml doc/classes/PhysicsServer.xml msgid "Returns the transform matrix of a body shape." -msgstr "" +msgstr "Retourne la matrice de transformation pour la forme du corps." #: doc/classes/Physics2DServer.xml doc/classes/PhysicsServer.xml msgid "Returns the [RID] of the space assigned to a body." @@ -45972,18 +47491,24 @@ msgid "" "Sets whether a body uses a callback function to calculate its own physics " "(see [method body_set_force_integration_callback])." msgstr "" +"Définit quand un corps utilise sa propre fonction pour calculer sa physique " +"(voir [method body_set_force_integration_callback])." #: doc/classes/Physics2DServer.xml msgid "" "Sets a body parameter. See [enum BodyParameter] for a list of available " "parameters." msgstr "" +"Définit un paramètre du corps. Voir [enum BodyParameter] pour la liste des " +"paramètres disponibles." #: doc/classes/Physics2DServer.xml doc/classes/PhysicsServer.xml msgid "" "Substitutes a given body shape by another. The old shape is selected by its " "index, the new one by its [RID]." msgstr "" +"Remplace la forme du corps par une autre. L'ancienne forme est choisie par " +"son index, et la nouvelle par son [RID]." #: doc/classes/Physics2DServer.xml msgid "" @@ -46079,6 +47604,8 @@ msgid "" "Sets a joint parameter. See [enum JointParam] for a list of available " "parameters." msgstr "" +"Définit un paramètre du joint. Voir [enum JointParam] pour la liste des " +"paramètres disponibles." #: doc/classes/Physics2DServer.xml msgid "" @@ -46145,6 +47672,8 @@ msgid "" "Sets the value for a space parameter. See [enum SpaceParameter] for a list " "of available parameters." msgstr "" +"Définit la valeur pour le paramètre d'espace. Voir [enum SpaceParameter] " +"pour la liste des paramètres possibles." #: doc/classes/Physics2DServer.xml doc/classes/PhysicsServer.xml msgid "" @@ -46250,11 +47779,11 @@ msgstr "" #: doc/classes/Physics2DServer.xml doc/classes/PhysicsServer.xml msgid "Constant to set/get gravity strength in an area." -msgstr "" +msgstr "La constante pour définir/obtenir la force de gravité de l'aire." #: doc/classes/Physics2DServer.xml doc/classes/PhysicsServer.xml msgid "Constant to set/get gravity vector/center in an area." -msgstr "" +msgstr "La constante pour définir/obtenir le centre de gravité de l'aire." #: doc/classes/Physics2DServer.xml doc/classes/PhysicsServer.xml msgid "" @@ -46367,10 +47896,14 @@ msgstr "" #: doc/classes/Physics2DServer.xml doc/classes/PhysicsServer.xml msgid "Constant to set/get a body's linear dampening factor." msgstr "" +"La constante pour définir/obtenir la facteur d'amortissement linéaire du " +"corps." #: doc/classes/Physics2DServer.xml doc/classes/PhysicsServer.xml msgid "Constant to set/get a body's angular dampening factor." msgstr "" +"La constante pour définir/obtenir la facteur d'amortissement de rotation du " +"corps." #: doc/classes/Physics2DServer.xml doc/classes/PhysicsServer.xml msgid "Represents the size of the [enum BodyParameter] enum." @@ -46379,6 +47912,8 @@ msgstr "Représente la taille de l'énumération [enum BodyParameter]." #: doc/classes/Physics2DServer.xml doc/classes/PhysicsServer.xml msgid "Constant to set/get the current transform matrix of the body." msgstr "" +"La constante pour définir/obtenir la matrice de transformation actuelle du " +"corps." #: doc/classes/Physics2DServer.xml doc/classes/PhysicsServer.xml msgid "Constant to set/get the current linear velocity of the body." @@ -46515,7 +48050,7 @@ msgstr "" #: doc/classes/PhysicsShapeQueryParameters.xml msgid "" "The list of objects or object [RID]s that will be excluded from collisions." -msgstr "" +msgstr "La liste des objets ou [RID] d'objets qui sont exclus des collisions." #: doc/classes/Physics2DShapeQueryParameters.xml #: doc/classes/PhysicsShapeQueryParameters.xml @@ -46529,7 +48064,7 @@ msgstr "Le mouvement de la forme qui a été demandée." #: doc/classes/Physics2DShapeQueryParameters.xml #: doc/classes/PhysicsShapeQueryParameters.xml msgid "The queried shape's [RID]. See also [method set_shape]." -msgstr "" +msgstr "Le [RID] de la forme demandée. Voir aussi [method set_shape]." #: doc/classes/Physics2DShapeQueryParameters.xml #: doc/classes/PhysicsShapeQueryParameters.xml @@ -46774,6 +48309,8 @@ msgid "" "The body's bounciness. Values range from [code]0[/code] (no bounce) to " "[code]1[/code] (full bounciness)." msgstr "" +"Le facteur de rebondissement du corps. L'intervalle est de [code]0[/code] " +"(aucun rebondissement) à [code]1[/code] (rebondissement maximal)." #: doc/classes/PhysicsMaterial.xml msgid "" @@ -46859,6 +48396,8 @@ msgid "" "Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] " "if the body is destroyed or removed from the physics space." msgstr "" +"Retourne le [PhysicsDirectBodyState] du corps. Retourne [code]null[/code] si " +"le corps est détruit ou retiré de l'espace physique." #: doc/classes/PhysicsServer.xml msgid "" @@ -47179,11 +48718,11 @@ msgstr "" #: doc/classes/PhysicsServer.xml doc/classes/SliderJoint.xml msgid "The amount of restitution inside the slider limits." -msgstr "" +msgstr "La quantité de restitution dans les limites du glisseur." #: doc/classes/PhysicsServer.xml doc/classes/SliderJoint.xml msgid "The amount of damping inside the slider limits." -msgstr "" +msgstr "La quantité d'amortissement dans les limites du glisseur." #: doc/classes/PhysicsServer.xml doc/classes/SliderJoint.xml msgid "A factor applied to the movement across axes orthogonal to the slider." @@ -47226,11 +48765,11 @@ msgstr "" #: doc/classes/PhysicsServer.xml doc/classes/SliderJoint.xml msgid "The amount of restitution of the rotation in the limits." -msgstr "" +msgstr "La quantité de restitution de la rotation dans les limites." #: doc/classes/PhysicsServer.xml doc/classes/SliderJoint.xml msgid "The amount of damping of the rotation in the limits." -msgstr "" +msgstr "La quantité d'amortissement de la rotation dans les limites." #: doc/classes/PhysicsServer.xml msgid "" @@ -47453,7 +48992,7 @@ msgstr "" #: doc/classes/Plane.xml msgid "Creates a plane from the normal and the plane's distance to the origin." -msgstr "" +msgstr "Crée un plan à partir d'une normale et de sa distance à l'origine." #: doc/classes/Plane.xml msgid "Returns the center of the plane." @@ -47586,6 +49125,8 @@ msgstr "" #: doc/classes/PlaneMesh.xml msgid "Offset from the origin of the generated plane. Useful for particles." msgstr "" +"Le décalage par rapport à l'origine du plan généré. Utile pour les " +"particules." #: doc/classes/PlaneMesh.xml msgid "Size of the generated plane." @@ -47773,9 +49314,8 @@ msgid "" msgstr "" #: doc/classes/PoolByteArray.xml -#, fuzzy msgid "A pooled array of bytes." -msgstr "Un [Array] compacté d'octets." +msgstr "Un tableau compacté d'octets." #: doc/classes/PoolByteArray.xml msgid "" @@ -47783,6 +49323,9 @@ msgid "" "does not fragment the memory.\n" "[b]Note:[/b] This type is passed by value and not by reference." msgstr "" +"Un tableau spécialement prévu pour contenir des octets. Optimisé pour " +"l'usage mémoire, elle ne se fragmente pas.\n" +"[b]Note :[/b] Ce type est passé par valeur et non pas référence." #: doc/classes/PoolByteArray.xml msgid "" @@ -47791,9 +49334,8 @@ msgid "" msgstr "" #: doc/classes/PoolByteArray.xml -#, fuzzy msgid "Appends a [PoolByteArray] at the end of this array." -msgstr "Ajoute un [PackedVector3Array] à la fin de ce tableau." +msgstr "Ajoute un [PoolByteArray] à la fin de ce tableau." #: doc/classes/PoolByteArray.xml msgid "" @@ -47853,6 +49395,17 @@ msgid "" "should always be preferred." msgstr "" +#: doc/classes/PoolByteArray.xml doc/classes/PoolColorArray.xml +#: doc/classes/PoolIntArray.xml doc/classes/PoolRealArray.xml +#: doc/classes/PoolStringArray.xml doc/classes/PoolVector2Array.xml +#: doc/classes/PoolVector3Array.xml +#, fuzzy +msgid "" +"Returns [code]true[/code] if the array contains the given value.\n" +"[b]Note:[/b] This is equivalent to using the [code]in[/code] operator." +msgstr "" +"Retourne [code]true[/code] si l'objet contient la [code]method[/code] donnée." + #: doc/classes/PoolByteArray.xml msgid "" "Returns a hexadecimal representation of this array as a [String].\n" @@ -47872,7 +49425,7 @@ msgstr "" #: doc/classes/PoolByteArray.xml doc/classes/PoolRealArray.xml msgid "Appends an element at the end of the array." -msgstr "" +msgstr "Ajoute un élément à la fin du tableau." #: doc/classes/PoolByteArray.xml doc/classes/PoolColorArray.xml #: doc/classes/PoolIntArray.xml doc/classes/PoolRealArray.xml @@ -47901,11 +49454,12 @@ msgid "" "new [PoolByteArray]. Any negative index is considered to be from the end of " "the array." msgstr "" +"Retourne une partie du [PoolByteArray] entre les indices (inclus) dans un " +"nouveau [PoolByteArray]. Chaque index négatif partira de la fin du tableau." #: doc/classes/PoolColorArray.xml -#, fuzzy msgid "A pooled array of [Color]." -msgstr "Un [Array] compacté de [Color]." +msgstr "Un tableau compacté de [Color]." #: doc/classes/PoolColorArray.xml msgid "" @@ -47913,6 +49467,9 @@ msgid "" "does not fragment the memory.\n" "[b]Note:[/b] This type is passed by value and not by reference." msgstr "" +"Un tableau spécialement prévu pour contenir des [Color]. Optimisé pour " +"l'usage mémoire, elle ne se fragmente pas.\n" +"[b]Note :[/b] Ce type est passé par valeur et non pas référence." #: doc/classes/PoolColorArray.xml msgid "" @@ -47921,9 +49478,8 @@ msgid "" msgstr "" #: doc/classes/PoolColorArray.xml -#, fuzzy msgid "Appends a [PoolColorArray] at the end of this array." -msgstr "Ajoute un [PackedVector3Array] à la fin de ce tableau." +msgstr "Ajoute un [PoolColorArray] à la fin de ce tableau." #: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml msgid "Appends a value to the array." @@ -47942,9 +49498,8 @@ msgid "Changes the [Color] at the given index." msgstr "Change la [Color] à la position donnée." #: doc/classes/PoolIntArray.xml -#, fuzzy msgid "A pooled array of integers ([int])." -msgstr "Un [Array] compacté d'entier ([int])." +msgstr "Un tableau compacté d'entiers ([int])." #: doc/classes/PoolIntArray.xml msgid "" @@ -47963,26 +49518,29 @@ msgid "" "Constructs a new [PoolIntArray]. Optionally, you can pass in a generic " "[Array] that will be converted." msgstr "" +"Construit un nouvel [PoolIntArray]. En option, il est possible de passer un " +"[Array] générique qui sera converti." #: doc/classes/PoolIntArray.xml -#, fuzzy msgid "Appends a [PoolIntArray] at the end of this array." -msgstr "Ajoute un [PackedVector3Array] à la fin de ce tableau." +msgstr "Ajoute un [PoolIntArray] à la fin de ce tableau." #: doc/classes/PoolIntArray.xml msgid "" "Inserts a new int at a given position in the array. The position must be " "valid, or at the end of the array ([code]idx == size()[/code])." msgstr "" +"Insert un nouvel entier à la position donnée dans le tableau. Cette position " +"doit être valide, ou à la toute fin du tableau (soit [code]idx == size()[/" +"code])." #: doc/classes/PoolIntArray.xml msgid "Changes the int at the given index." msgstr "Modifie le [int] à l’index donné." #: doc/classes/PoolRealArray.xml -#, fuzzy msgid "A pooled array of reals ([float])." -msgstr "Un [Array] compacté de flottants ([float])." +msgstr "Un tableau compacté de flottants ([float])." #: doc/classes/PoolRealArray.xml msgid "" @@ -48003,20 +49561,20 @@ msgid "" "Constructs a new [PoolRealArray]. Optionally, you can pass in a generic " "[Array] that will be converted." msgstr "" +"Construit un nouvel [PoolRealArray]. En option, il est possible de passer un " +"[Array] générique qui sera converti." #: doc/classes/PoolRealArray.xml -#, fuzzy msgid "Appends a [PoolRealArray] at the end of this array." -msgstr "Ajoute un [PackedVector3Array] à la fin de ce tableau." +msgstr "Ajoute un [PoolRealArray] à la fin de ce tableau." #: doc/classes/PoolRealArray.xml msgid "Changes the float at the given index." msgstr "Change la flottant à la position donnée." #: doc/classes/PoolStringArray.xml -#, fuzzy msgid "A pooled array of [String]." -msgstr "Un [Array] compacté de [String]." +msgstr "Un tableau compacté de [String]." #: doc/classes/PoolStringArray.xml msgid "" @@ -48024,17 +49582,21 @@ msgid "" "usage, does not fragment the memory.\n" "[b]Note:[/b] This type is passed by value and not by reference." msgstr "" +"Un tableau spécialement prévu pour contenir des [String]. Optimisé pour " +"l'usage mémoire, elle ne se fragmente pas.\n" +"[b]Note :[/b] Ce type est passé par valeur et non pas référence." #: doc/classes/PoolStringArray.xml msgid "" "Constructs a new [PoolStringArray]. Optionally, you can pass in a generic " "[Array] that will be converted." msgstr "" +"Construit un nouvel [PoolStringArray]. En option, il est possible de passer " +"un [Array] générique qui sera converti." #: doc/classes/PoolStringArray.xml -#, fuzzy msgid "Appends a [PoolStringArray] at the end of this array." -msgstr "Ajoute un [PackedVector3Array] à la fin de ce tableau." +msgstr "Ajoute un [PoolStringArray] à la fin de ce tableau." #: doc/classes/PoolStringArray.xml #, fuzzy @@ -48052,9 +49614,8 @@ msgid "Changes the [String] at the given index." msgstr "Change la [String] à la position donnée." #: doc/classes/PoolVector2Array.xml -#, fuzzy msgid "A pooled array of [Vector2]." -msgstr "Un [Array] compacté de [Vector2]." +msgstr "Un tableau compacté de [Vector2]." #: doc/classes/PoolVector2Array.xml msgid "" @@ -48062,22 +49623,26 @@ msgid "" "usage, does not fragment the memory.\n" "[b]Note:[/b] This type is passed by value and not by reference." msgstr "" +"Un tableau spécialement prévu pour contenir des [Vector2]. Optimisé pour " +"l'usage mémoire, elle ne se fragmente pas.\n" +"[b]Note :[/b] Ce type est passé par valeur et non pas référence." #: doc/classes/PoolVector2Array.xml doc/classes/TileMap.xml #: doc/classes/TileSet.xml msgid "2D Navigation Astar Demo" -msgstr "" +msgstr "Démo de navigation Astar en 2D" #: doc/classes/PoolVector2Array.xml msgid "" "Constructs a new [PoolVector2Array]. Optionally, you can pass in a generic " "[Array] that will be converted." msgstr "" +"Construit un nouvel [PoolVector2Array]. En option, il est possible de passer " +"un [Array] générique qui sera converti." #: doc/classes/PoolVector2Array.xml -#, fuzzy msgid "Appends a [PoolVector2Array] at the end of this array." -msgstr "Ajoute un [PackedVector3Array] à la fin de ce tableau." +msgstr "Ajoute un [PoolVector2Array] à la fin de ce tableau." #: doc/classes/PoolVector2Array.xml msgid "Inserts a [Vector2] at the end." @@ -48088,9 +49653,8 @@ msgid "Changes the [Vector2] at the given index." msgstr "Change la [Vector2] à la position donnée." #: doc/classes/PoolVector3Array.xml -#, fuzzy msgid "A pooled array of [Vector3]." -msgstr "Un [Array] compacté de [Vector3]." +msgstr "Un tableau compacté de [Vector3]." #: doc/classes/PoolVector3Array.xml msgid "" @@ -48098,17 +49662,21 @@ msgid "" "usage, does not fragment the memory.\n" "[b]Note:[/b] This type is passed by value and not by reference." msgstr "" +"Un tableau spécialement prévu pour contenir des [Vector3]. Optimisé pour " +"l'usage mémoire, elle ne se fragmente pas.\n" +"[b]Note :[/b] Ce type est passé par valeur et non pas référence." #: doc/classes/PoolVector3Array.xml msgid "" "Constructs a new [PoolVector3Array]. Optionally, you can pass in a generic " "[Array] that will be converted." msgstr "" +"Construit un nouvel [PoolVector3Array]. En option, il est possible de passer " +"un [Array] générique qui sera converti." #: doc/classes/PoolVector3Array.xml -#, fuzzy msgid "Appends a [PoolVector3Array] at the end of this array." -msgstr "Ajoute un [PackedVector3Array] à la fin de ce tableau." +msgstr "Ajoute un [PoolVector3Array] à la fin de ce tableau." #: doc/classes/PoolVector3Array.xml msgid "Inserts a [Vector3] at the end." @@ -48209,6 +49777,8 @@ msgstr "Classe parente des fenêtres de dialogue." msgid "" "PopupDialog is a base class for popup dialogs, along with [WindowDialog]." msgstr "" +"PopupDialog est la classe de base pour les dialogues contextuels, avec aussi " +"[WindowDialog]." #: doc/classes/PopupDialog.xml #, fuzzy @@ -48289,12 +49859,13 @@ msgstr "" #: doc/classes/PopupMenu.xml msgid "Same as [method add_icon_check_item], but uses a radio check button." -msgstr "" +msgstr "Pareil que [method add_icon_check_item], mais utilise un bouton radio." #: doc/classes/PopupMenu.xml msgid "" "Same as [method add_icon_check_shortcut], but uses a radio check button." msgstr "" +"Pareil que [method add_icon_check_shorcut], mais utilise un bouton radio." #: doc/classes/PopupMenu.xml msgid "" @@ -48535,6 +50106,7 @@ msgstr "" #: doc/classes/PopupMenu.xml msgid "Sets the checkstate status of the item at index [code]idx[/code]." msgstr "" +"Définit le status de la coche pour l'élément à la position [code]idx[/code]." #: doc/classes/PopupMenu.xml msgid "" @@ -48583,6 +50155,8 @@ msgid "" "Sets the [String] tooltip of the item at the specified index [code]idx[/" "code]." msgstr "" +"Définit la [String] de l'infobulle de l'élément à l'index [code]idx[/code] " +"spécifié." #: doc/classes/PopupMenu.xml #, fuzzy @@ -48608,6 +50182,8 @@ msgid "" "If [code]true[/code], hides the [PopupMenu] when a checkbox or radio button " "is selected." msgstr "" +"Si [code]true[/code], masque le [PopupMenu] quand une coche ou un bouton " +"radio est sélectionné." #: doc/classes/PopupMenu.xml msgid "If [code]true[/code], hides the [PopupMenu] when an item is selected." @@ -48684,6 +50260,11 @@ msgid "[Font] used for the menu items." msgstr "La [Font] utilisée pour les éléments du menu." #: doc/classes/PopupMenu.xml +#, fuzzy +msgid "[Font] used for the labeled separator." +msgstr "[Font] utilisée pour le texte du [Label]." + +#: doc/classes/PopupMenu.xml msgid "[Texture] icon for the checked checkbox items." msgstr "La [Texture] de l'icône pour les coches cochées." @@ -49072,6 +50653,8 @@ msgid "" "Font used to draw the fill percentage if [member percent_visible] is " "[code]true[/code]." msgstr "" +"La police utilisée pour afficher le pourcentage de remplissage si [member " +"percent_visible] est [code]true[/code]." #: doc/classes/ProgressBar.xml msgid "The style of the background." @@ -49079,7 +50662,7 @@ msgstr "Le style de l’arrière-plan." #: doc/classes/ProgressBar.xml msgid "The style of the progress (i.e. the part that fills the bar)." -msgstr "" +msgstr "Le style de progression (c'est-à -dire la partie qui remplis la barre)." #: doc/classes/ProjectSettings.xml msgid "Contains global variables accessible from everywhere." @@ -49600,6 +51183,8 @@ msgstr "" msgid "" "If [code]true[/code], enables warnings when a constant is used as a function." msgstr "" +"If [code]true[/code], active les avertissements quand une constante est " +"utilisée comme un fonction." #: doc/classes/ProjectSettings.xml msgid "" @@ -49634,6 +51219,8 @@ msgid "" "If [code]true[/code], enables warnings when a function is declared with the " "same name as a constant." msgstr "" +"Si [code]true[/code], active les avertissements quand une fonction est " +"déclarée avec le même nom qu'une constante." #: doc/classes/ProjectSettings.xml msgid "" @@ -50180,6 +51767,10 @@ msgid "" "necessary for the internal logic of several [Control]s. The events assigned " "to the action can however be modified." msgstr "" +"La [InputEventAction] par défaut pour déplacer l'interface vers le bas.\n" +"[b]Note :[/b] Les actions [code]ui_*[/code] par défaut ne peuvent pas être " +"supprimées car elles sont nécessaires à la logique interne de nombreux " +"[Control]. Mais les événements assignés aux actions peuvent modifiés." #: doc/classes/ProjectSettings.xml msgid "" @@ -50199,6 +51790,12 @@ msgid "" "necessary for the internal logic of several [Control]s. The events assigned " "to the action can however be modified." msgstr "" +"La [InputEventAction] par défaut pour définit le focus au [Control] suivant " +"de la scène. Le comportement du focus peut être configuré avec [member " +"Control.focus_next].\n" +"[b]Note :[/b] Les actions [code]ui_*[/code] par défaut ne peuvent pas être " +"supprimées car elles sont nécessaires à la logique interne de nombreux " +"[Control]. Mais les événements assignés aux actions peuvent modifiés." #: doc/classes/ProjectSettings.xml msgid "" @@ -50208,6 +51805,12 @@ msgid "" "necessary for the internal logic of several [Control]s. The events assigned " "to the action can however be modified." msgstr "" +"La [InputEventAction] par défaut pour définit le focus au [Control] " +"précédent de la scène. Le comportement du focus peut être configuré avec " +"[member Control.focus_previous].\n" +"[b]Note :[/b] Les actions [code]ui_*[/code] par défaut ne peuvent pas être " +"supprimées car elles sont nécessaires à la logique interne de nombreux " +"[Control]. Mais les événements assignés aux actions peuvent modifiés." #: doc/classes/ProjectSettings.xml msgid "" @@ -50226,6 +51829,10 @@ msgid "" "necessary for the internal logic of several [Control]s. The events assigned " "to the action can however be modified." msgstr "" +"La [InputEventAction] par défaut pour déplacer l'interface vers la gauche.\n" +"[b]Note :[/b] Les actions [code]ui_*[/code] par défaut ne peuvent pas être " +"supprimées car elles sont nécessaires à la logique interne de nombreux " +"[Control]. Mais les événements assignés aux actions peuvent modifiés." #: doc/classes/ProjectSettings.xml msgid "" @@ -50236,6 +51843,12 @@ msgid "" "necessary for the internal logic of several [Control]s. The events assigned " "to the action can however be modified." msgstr "" +"La [InputEventAction] par défaut pour descendre d'une page dans un [Control] " +"(dans un [ItemList] ou un [Tree] par exemple), correspondant au comportement " +"de [constant KEY_PAGEDOWN] dans une interface de bureau classique.\n" +"[b]Note :[/b] Les actions [code]ui_*[/code] par défaut ne peuvent pas être " +"supprimées car elles sont nécessaires à la logique interne de nombreux " +"[Control]. Mais les événements assignés aux actions peuvent modifiés." #: doc/classes/ProjectSettings.xml msgid "" @@ -50246,6 +51859,12 @@ msgid "" "necessary for the internal logic of several [Control]s. The events assigned " "to the action can however be modified." msgstr "" +"La [InputEventAction] par défaut pour monter d'une page dans un [Control] " +"(dans un [ItemList] ou un [Tree] par exemple), correspondant au comportement " +"de [constant KEY_PAGEUP] dans une interface de bureau classique.\n" +"[b]Note :[/b] Les actions [code]ui_*[/code] par défaut ne peuvent pas être " +"supprimées car elles sont nécessaires à la logique interne de nombreux " +"[Control]. Mais les événements assignés aux actions peuvent modifiés." #: doc/classes/ProjectSettings.xml msgid "" @@ -50254,6 +51873,10 @@ msgid "" "necessary for the internal logic of several [Control]s. The events assigned " "to the action can however be modified." msgstr "" +"La [InputEventAction] par défaut pour déplacer l'interface vers la droite.\n" +"[b]Note :[/b] Les actions [code]ui_*[/code] par défaut ne peuvent pas être " +"supprimées car elles sont nécessaires à la logique interne de nombreux " +"[Control]. Mais les événements assignés aux actions peuvent modifiés." #: doc/classes/ProjectSettings.xml msgid "" @@ -50263,6 +51886,11 @@ msgid "" "necessary for the internal logic of several [Control]s. The events assigned " "to the action can however be modified." msgstr "" +"La [InputEventAction] par défaut pour sélectionner un élément dans un " +"[Control] (dans un [ItemList] ou un [Tree] par exemple).\n" +"[b]Note :[/b] Les actions [code]ui_*[/code] par défaut ne peuvent pas être " +"supprimées car elles sont nécessaires à la logique interne de nombreux " +"[Control]. Mais les événements assignés aux actions peuvent modifiés." #: doc/classes/ProjectSettings.xml msgid "" @@ -50271,6 +51899,10 @@ msgid "" "necessary for the internal logic of several [Control]s. The events assigned " "to the action can however be modified." msgstr "" +"La [InputEventAction] par défaut pour déplacer l'interface vers le haut.\n" +"[b]Note :[/b] Les actions [code]ui_*[/code] par défaut ne peuvent pas être " +"supprimées car elles sont nécessaires à la logique interne de nombreux " +"[Control]. Mais les événements assignés aux actions peuvent modifiés." #: doc/classes/ProjectSettings.xml msgid "" @@ -50746,6 +52378,8 @@ msgid "" "Path to logs within the project. Using an [code]user://[/code] path is " "recommended." msgstr "" +"Le chemin des journaux dans le projet. L'utilisation de [code]user://[/code] " +"est recommandé." #: doc/classes/ProjectSettings.xml msgid "Specifies the maximum amount of log files allowed (used for rotation)." @@ -50990,6 +52624,9 @@ msgid "" "\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no " "alternative 2D physics server implemented." msgstr "" +"Définit le moteur physique 2D à utiliser.\n" +"\"PAR DÉFAUT\" et \"GodotPhysics\" sont pareils, puisqu'il n'existe " +"actuellement pas d'autres serveurs de physique 2D implémentés." #: doc/classes/ProjectSettings.xml msgid "" @@ -52200,9 +53837,8 @@ msgid "" msgstr "" #: doc/classes/PropertyTweener.xml -#, fuzzy msgid "Interpolates an [Object]'s property over time." -msgstr "Anime de manière fluide une propriété d'un nÅ“ud dans le temps." +msgstr "Interpole une propriété d'un [Object] dans le temps." #: doc/classes/PropertyTweener.xml msgid "" @@ -52254,19 +53890,8 @@ msgid "" "Sets the time in seconds after which the [PropertyTweener] will start " "interpolating. By default there's no delay." msgstr "" - -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used easing from [enum Tween.EaseType]. If not set, the " -"default easing is used from the [Tween] that contains this Tweener." -msgstr "" - -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used transition from [enum Tween.TransitionType]. If not " -"set, the default transition is used from the [Tween] that contains this " -"Tweener." -msgstr "" +"Définit le délai en secondes avant que le [PropertyTweener] commence son " +"interpolation. Par défaut, il n'y a pas de délai." #: doc/classes/ProximityGroup.xml #, fuzzy @@ -52407,7 +54032,7 @@ msgstr "" #: doc/classes/QuadMesh.xml doc/classes/Viewport.xml #: doc/classes/ViewportTexture.xml msgid "2D in 3D Demo" -msgstr "" +msgstr "Démo pour la 2D en 3D" #: doc/classes/QuadMesh.xml msgid "Offset of the generated Quad. Useful for particles." @@ -52795,6 +54420,8 @@ msgid "" "Emitted when [member min_value], [member max_value], [member page], or " "[member step] change." msgstr "" +"Émis quand [member min_value], [member max_value], [member page], ou [member " +"step] change." #: doc/classes/Range.xml msgid "" @@ -52877,7 +54504,7 @@ msgstr "" #: doc/classes/RayCast.xml doc/classes/RayCast2D.xml msgid "" "Returns the normal of the intersecting object's shape at the collision point." -msgstr "" +msgstr "Retourne la normale de la forme de l'objet au point de collision." #: doc/classes/RayCast.xml doc/classes/RayCast2D.xml msgid "" @@ -53503,7 +55130,7 @@ msgstr "" #: modules/regex/doc_classes/RegEx.xml msgid "Returns the original search pattern that was compiled." -msgstr "" +msgstr "Retourne le motif de recherche original qui a été compilé." #: modules/regex/doc_classes/RegEx.xml msgid "Returns whether this object has a valid search pattern assigned." @@ -53639,12 +55266,16 @@ msgid "" "If [code]true[/code], global coordinates are used. If [code]false[/code], " "local coordinates are used." msgstr "" +"Si [code]true[/code], les coordonnées globales sont utilisées. Si " +"[code]false[/code], ce sont les locales." #: doc/classes/RemoteTransform2D.xml msgid "" "RemoteTransform2D pushes its own [Transform2D] to another [CanvasItem] " "derived Node in the scene." msgstr "" +"RemoteTransform2D utilise sa propre [Transform2D] pour un autre nÅ“ud " +"héritant de [CanvasItem] dans la scène." #: doc/classes/RemoteTransform2D.xml msgid "" @@ -53666,6 +55297,8 @@ msgid "" "The [NodePath] to the remote node, relative to the RemoteTransform2D's " "position in the scene." msgstr "" +"Le [NodePath] du nÅ“ud distant, relatif à la position du RemoteTransform2D " +"dans la scène." #: doc/classes/Resource.xml msgid "Base class for all resources." @@ -53826,6 +55459,7 @@ msgstr "" #: doc/classes/ResourceFormatLoader.xml msgid "Gets the list of extensions for files this loader is able to read." msgstr "" +"Retourne la liste des extensions des fichiers que ce chargeur peut lire." #: doc/classes/ResourceFormatLoader.xml msgid "" @@ -54071,6 +55705,8 @@ msgid "" "Changes the behavior on missing sub-resources. The default behavior is to " "abort loading." msgstr "" +"Change le comportement pour les sous-ressources manquantes. Le comportement " +"par défaut est d'annuler le chargement." #: doc/classes/ResourcePreloader.xml msgid "Resource Preloader Node." @@ -54120,6 +55756,8 @@ msgid "" "Renames a resource inside the preloader from [code]name[/code] to " "[code]newname[/code]." msgstr "" +"Renomme une ressource dans le pré-chargeur de [code]name[/code] en " +"[code]newname[/code]." #: doc/classes/ResourceSaver.xml msgid "Singleton for saving Godot-specific resource types." @@ -54139,6 +55777,8 @@ msgid "" "Returns the list of extensions available for saving a resource of a given " "type." msgstr "" +"Retourne la liste des extensions possibles pour enregistrer une ressource de " +"ce type." #: doc/classes/ResourceSaver.xml msgid "" @@ -54152,6 +55792,7 @@ msgstr "" #: doc/classes/ResourceSaver.xml msgid "Save the resource with a path relative to the scene which uses it." msgstr "" +"Enregistre la ressource avec un chemin relatif à la scène qui l'utilise." #: doc/classes/ResourceSaver.xml msgid "Bundles external resources." @@ -54162,12 +55803,16 @@ msgid "" "Changes the [member Resource.resource_path] of the saved resource to match " "its new location." msgstr "" +"Change le chemin [member Resource.resource_path] de la ressource enregistrée " +"pour correspondre à son nouvel emplacement." #: doc/classes/ResourceSaver.xml msgid "" "Do not save editor-specific metadata (identified by their [code]__editor[/" "code] prefix)." msgstr "" +"Ne sauvegarde pas les méta-données spécifiques à l'éditeur (commençant par " +"[code]__editor[/code])." #: doc/classes/ResourceSaver.xml msgid "Save as big endian (see [member File.endian_swap])." @@ -54178,6 +55823,8 @@ msgid "" "Compress the resource on save using [constant File.COMPRESSION_ZSTD]. Only " "available for binary resource types." msgstr "" +"Compresse la ressource quand elle est enregistrée avec [constant File." +"COMPRESSION_ZSTD]. Seulement disponible pour les ressources de type binaire." #: doc/classes/ResourceSaver.xml msgid "" @@ -54187,7 +55834,7 @@ msgstr "" #: doc/classes/RichTextEffect.xml msgid "A custom effect for use with [RichTextLabel]." -msgstr "Un effet personnalisé à utilisé pour ce [RichTextLabel]." +msgstr "Un effet personnalisé à utilisé avec les [RichTextLabel]." #: doc/classes/RichTextEffect.xml msgid "" @@ -54203,6 +55850,18 @@ msgid "" "[RichTextEffect], it will continuously process the effect unless the project " "is paused. This may impact battery life negatively." msgstr "" +"Un effet personnalisé à utiliser avec les [RichTextLabel].\n" +"[b]Note :[/b] Pour qu'un [RichTextEffect] soit utilisable, un marqueur " +"BBCode doit être définit sous forme de variable de membre nommée " +"[code]bbcode[/code] dans le script.\n" +"[codeblock]\n" +"# Le RichTextEffect sera utilisable avec : `[exemple]Some text[/exemple]`\n" +"var bbcode = \"exemple\"\n" +"[/codeblock]\n" +"[b]Note :[/b] Dès qu'un [RichTextLabel] contient au moins un " +"[RichTextEffect], il mettre à jour l'effet en permanence tant que le projet " +"ne sera pas mis en pause. Ceci pour avoir un impact important sur " +"l'autonomie de la batterie." #: doc/classes/RichTextEffect.xml msgid "" @@ -54211,6 +55870,10 @@ msgid "" "successfully. If the method returns [code]false[/code], it will skip " "transformation to avoid displaying broken text." msgstr "" +"Surchargez cette méthode pour modifier les propriétés de [code]char_fx[/" +"code]. Cette méthode doit retourner [code]true[/code] si le caractère peut " +"être transformé avec succès. Si la méthode retourne [code]false[/code], " +"l'effet sera ignoré pour éviter de mal afficher le texte." #: doc/classes/RichTextLabel.xml msgid "Label that displays rich text." @@ -54240,6 +55903,29 @@ msgid "" "emoji) are [i]not[/i] supported on Windows. They will display as unknown " "characters instead. This will be resolved in Godot 4.0." msgstr "" +"Les textes riches peuvent contenir des textes personnalisées, des polices, " +"des images et une mise en page basique. Le label gère ce contenu dans une " +"pile interne de marqueurs. Il peut aussi s'adapter à la taille donnée.\n" +"[b]Note :[/b] Les assignations à [member bbcode_text] efface la pile des " +"marqueurs et la reconstruit à partir du contenu de cette propriété. Chaque " +"modification fait à [member bbcode_text] effacera les modifications " +"précédents faites depuis une autre source manuelle comme [method " +"append_bbcode] et les méthodes [code]push_*[/code] / [method pop].\n" +"[b]Note :[/b] RichTextLabel ne supporte pas les marqueurs intriqués. par " +"exemple, au lieu d'utiliser [code][b]bold[i]bold italic[/b]italic[/i][/" +"code], utilisez [code][b]bold[i]bold italic[/i][/b][i]italic[/i][/code].\n" +"[b]Note :[/b] Les méthodes [code]push_*/pop[/code] ne modifie pas le " +"BBCode.\n" +"[b]Note :[/b] Contrairement à [Label], RichTextLabel n'a pas de " +"[i]propriété[/i] pour aligner le texte horizontalement au center. Utilisez " +"plutôt [member bbcode_enabled] et entourez le texte du marqueur [code]" +"[center][/code] comme suit : [code][center]Exemple[/center][/code]. Il n'y a " +"actuellement aucun moyen intégré pour aligner verticalement le texte non " +"plus, mais il est possible de le faire avec les ancres/conteneurs et la " +"propriété [member fit_content_height].\n" +"[b]Note :[/b] Les caractères Unicode après [code]0xffff[/code] (comme les " +"émojis) [i]ne sont pas[/i] supportés sous Windows. Il sera affiché des " +"caractères inconnus à la place. Ça sera corrigé dans Godot 4.0." #: doc/classes/RichTextLabel.xml msgid "BBCode in RichTextLabel" @@ -54256,6 +55942,11 @@ msgid "" "If [code]width[/code] or [code]height[/code] is set to 0, the image size " "will be adjusted in order to keep the original aspect ratio." msgstr "" +"Ajoute le marqueur ouvrant et fermant d'image à la pile des marqueurs, avec " +"la possibilité de spécifier la largeur [code]width[/code] et la hauteur " +"[code]height[/code] pour redimensionner l'image.\n" +"Si [code]width[/code] ou [code]height[/code] est à 0, la taille de l'image " +"sera ajustée pour garder sont aspect original." #: doc/classes/RichTextLabel.xml msgid "Adds raw non-BBCode-parsed text to the tag stack." @@ -54301,6 +55992,8 @@ msgid "" "Returns the total number of characters from text tags. Does not include " "BBCodes." msgstr "" +"Retourne le nombre total de caractères des marqueurs de texte. N'inclus pas " +"les BBCode." #: doc/classes/RichTextLabel.xml msgid "Returns the number of visible lines." @@ -55297,18 +56990,24 @@ msgstr "" #: doc/classes/RigidBody2D.xml msgid "Static mode. The body behaves like a [StaticBody2D] and does not move." msgstr "" +"Le mode statique. Le corps se comporte comme un [StaticBody2D] et ne bouge " +"pas." #: doc/classes/RigidBody2D.xml msgid "" "Character mode. Similar to [constant MODE_RIGID], but the body can not " "rotate." msgstr "" +"Le mode caractère. Similaire à [constant MODE_RIGID], mais le corps ne peut " +"pas pivoter." #: doc/classes/RigidBody2D.xml msgid "" "Kinematic mode. The body behaves like a [KinematicBody2D], and must be moved " "by code." msgstr "" +"Le mode cinématique. Le corps se comporte comme un [KinematicBody2D], et " +"doit être déplacé par le code." #: doc/classes/RigidBody2D.xml msgid "" @@ -55729,6 +57428,8 @@ msgstr "" msgid "" "Returns the list of bound parameters for the signal at [code]idx[/code]." msgstr "" +"Retourne la liste des paramètres spécifiés pour le signal à la position " +"[code]idx[/code]." #: doc/classes/SceneState.xml msgid "" @@ -55743,6 +57444,8 @@ msgid "" "Returns the connection flags for the signal at [code]idx[/code]. See [enum " "Object.ConnectFlags] constants." msgstr "" +"Retourne les drapeaux de connexion pour le signal à la position [code]idx[/" +"code]. Voir [enum Object.ConnectFlags] pour les constantes." #: doc/classes/SceneState.xml msgid "Returns the method connected to the signal at [code]idx[/code]." @@ -55836,12 +57539,16 @@ msgid "" "Returns the name of the property at [code]prop_idx[/code] for the node at " "[code]idx[/code]." msgstr "" +"Retourne le nom de la propriété à [code]prop_idx[/code] pour le nÅ“ud à " +"[code]idx[/code]." #: doc/classes/SceneState.xml msgid "" "Returns the value of the property at [code]prop_idx[/code] for the node at " "[code]idx[/code]." msgstr "" +"Retourne le valeur de la propriété à [code]prop_idx[/code] pour le nÅ“ud à " +"[code]idx[/code]." #: doc/classes/SceneState.xml msgid "Returns the type of the node at [code]idx[/code]." @@ -55974,19 +57681,23 @@ msgstr "" #: doc/classes/SceneTree.xml msgid "Creates and returns a new [SceneTreeTween]." -msgstr "" +msgstr "Crée et retourne un nouvel [SceneTreeTween]." #: doc/classes/SceneTree.xml msgid "" "Returns the current frame number, i.e. the total frame count since the " "application started." msgstr "" +"Retourne le numéro de la trame actuelle, c'est-à -dire le nombre de trames " +"depuis le lancement de l'application." #: doc/classes/SceneTree.xml msgid "" "Returns the peer IDs of all connected peers of this [SceneTree]'s [member " "network_peer]." msgstr "" +"Retourne les identifiants de tous les pairs connectés au [member " +"network_peer] de ce [SceneTree]." #: doc/classes/SceneTree.xml msgid "Returns the unique peer ID of this [SceneTree]'s [member network_peer]." @@ -56030,6 +57741,8 @@ msgid "" "Returns [code]true[/code] if this [SceneTree]'s [member network_peer] is in " "server mode (listening for connections)." msgstr "" +"Retourne [code]true[/code] si ce [member network_peer] du [SceneTree] est en " +"mode serveur (attend les connexions)." #: doc/classes/SceneTree.xml msgid "Sends the given notification to all members of the [code]group[/code]." @@ -56085,6 +57798,8 @@ msgid "" "Sets the given [code]property[/code] to [code]value[/code] on all members of " "the given group." msgstr "" +"Définit la propriété [code]property[/code] spécifiée à la valeur " +"[code]value[/code] pour tous les membres du groupe donné." #: doc/classes/SceneTree.xml msgid "" @@ -56235,6 +57950,8 @@ msgid "" "Emitted immediately before [method Node._process] is called on every node in " "the [SceneTree]." msgstr "" +"Émis immédiatement avant que [method Node._process] soit appelé sur chaque " +"nÅ“ud de [SceneTree]." #: doc/classes/SceneTree.xml msgid "" @@ -56293,6 +58010,8 @@ msgid "" "Emitted whenever this [SceneTree]'s [member network_peer] disconnected from " "server. Only emitted on clients." msgstr "" +"Émis quand ce [member network_peer] du [SceneTree] se déconnecte du serveur. " +"Seulement émis vers les clients." #: doc/classes/SceneTree.xml msgid "" @@ -56310,7 +58029,7 @@ msgstr "Appelle un groupe dans l'ordre inversé de la scène." #: doc/classes/SceneTree.xml msgid "Call a group immediately (calls are normally made on idle)." -msgstr "" +msgstr "Appelle un groupe immédiatement (au lieu de le faire durant le repos)." #: doc/classes/SceneTree.xml msgid "Call a group only once even if the call is executed many times." @@ -56330,6 +58049,8 @@ msgid "" "Keep the specified display resolution. No interpolation. Content may appear " "pixelated." msgstr "" +"Garde la résolution d'affichage spécifié, sans interpolation. Le contenu " +"peut apparaitre pixelisé." #: doc/classes/SceneTree.xml msgid "" @@ -56578,7 +58299,7 @@ msgstr "" #: doc/classes/SceneTreeTween.xml msgid "Resumes a paused or stopped [SceneTreeTween]." -msgstr "" +msgstr "Reprend un [SceneTreeTween] en pause ou arrêté." #: doc/classes/SceneTreeTween.xml msgid "" @@ -56607,6 +58328,8 @@ msgid "" "If [code]parallel[/code] is [code]true[/code], the [Tweener]s appended after " "this method will by default run simultaneously, as opposed to sequentially." msgstr "" +"Si [code]parallel[/code] est [code]true[/code], le [Tweener] ajouté après " +"cette méthode se lancera simultanément, et non séquentiellement." #: doc/classes/SceneTreeTween.xml msgid "" @@ -57099,6 +58822,9 @@ msgid "" "immediately and returns [constant ERR_BUSY]. If non-zero, it returns " "[constant OK] to report success." msgstr "" +"Comme [method wait], mais ne bloque pas, donc si la valeur est zéro, ça " +"échoue immédiatement et retourne [constant ERR_BUSY]. Si non zéro, ça " +"retourne [constant OK] pour signaler un succès." #: doc/classes/Semaphore.xml msgid "" @@ -57188,6 +58914,8 @@ msgid "" "Mode used to calculate particle information on a per-particle basis. Not " "used for drawing." msgstr "" +"Le mode utilisé pour calculer les informations pour chaque particule " +"individuellement. N'est pas utilisé pour l'affichage." #: doc/classes/ShaderMaterial.xml msgid "A material that uses a custom [Shader] program." @@ -57266,6 +58994,8 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "Base class for all 2D shapes. All 2D shape types inherit from this." msgstr "" +"La classe de base pour toutes les formes 2D. Tous les types de forme 2D " +"héritent de cette classe." #: doc/classes/Shape2D.xml msgid "" @@ -57278,8 +59008,15 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape touches another. If there are " -"no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape touches another.\n" +"If there are no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the shape to check collisions with " "([code]with_shape[/code]), and the transformation matrix of that shape " @@ -57300,8 +59037,16 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape would touch another, if a " -"given movement was applied. If there are no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape would touch another, " +"if a given movement was applied.\n" +"If there would be no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the movement to test on this shape " "([code]local_motion[/code]), the shape to check collisions with " @@ -57483,6 +59228,7 @@ msgid "" "Returns the number of [Bone2D] nodes in the node hierarchy parented by " "Skeleton2D." msgstr "" +"Retourne le nombre de nÅ“uds [Bone2D] dans la hiérarchie de ce Skeleton2D." #: doc/classes/Skeleton2D.xml msgid "Returns the [RID] of a Skeleton2D instance." @@ -57858,7 +59604,7 @@ msgstr "La masse du SoftBody." #: doc/classes/Spatial.xml msgid "Most basic 3D game object, parent of all 3D-related nodes." -msgstr "" +msgstr "L'objet 3D de jeu le plus basique, parent de tous les nÅ“uds 3D." #: doc/classes/Spatial.xml msgid "" @@ -57919,6 +59665,8 @@ msgid "" "Scales the global (world) transformation by the given [Vector3] scale " "factors." msgstr "" +"Met à l'échelle la transformation globale par le [Vector3] de facteur " +"d'échelle." #: doc/classes/Spatial.xml msgid "" @@ -58072,12 +59820,16 @@ msgid "" "Transforms [code]local_point[/code] from this node's local space to world " "space." msgstr "" +"Transforme le point [code]local_point[/code] depuis les coordonnées locale " +"de ce nÅ“ud dans l'espace global." #: doc/classes/Spatial.xml msgid "" "Transforms [code]global_point[/code] from world space to this node's local " "space." msgstr "" +"Transforme le point [code]local_point[/code] depuis l'espace global dans les " +"coordonnées local de ce nÅ“ud." #: doc/classes/Spatial.xml msgid "" @@ -58091,7 +59843,7 @@ msgstr "" #: doc/classes/Spatial.xml msgid "" "Changes the node's position by the given offset [Vector3] in local space." -msgstr "" +msgstr "Déplace le nÅ“ud d'un décalage [Vector3] dans les coordonnées locales." #: doc/classes/Spatial.xml msgid "Updates the [SpatialGizmo] of this node." @@ -58133,6 +59885,7 @@ msgstr "" #: doc/classes/Spatial.xml msgid "Local space [Transform] of this node, with respect to the parent node." msgstr "" +"La [Transform] de ce nÅ“ud dans l'espace local, en fonction du nÅ“ud parent." #: doc/classes/Spatial.xml msgid "Local translation of this node." @@ -58261,6 +60014,8 @@ msgid "" "Texture to multiply by [member albedo_color]. Used for basic texturing of " "objects." msgstr "" +"La texture à multiplier par la couleur [member albedo_color]. Utilisé pour " +"l'habillage basique des objets." #: doc/classes/SpatialMaterial.xml msgid "" @@ -58317,6 +60072,8 @@ msgid "" "If [code]true[/code], use [code]UV2[/code] coordinates to look up from the " "[member ao_texture]." msgstr "" +"Si [code]true[/code], utilise les coordonnées [code]UV2[/code] pour la " +"projection de [member ao_texture]." #: doc/classes/SpatialMaterial.xml msgid "" @@ -58522,6 +60279,8 @@ msgstr "" #: doc/classes/SpatialMaterial.xml msgid "Texture that specifies how much surface emits light at a given point." msgstr "" +"La texture qui spécifie quelle quantité de lumière sera émise par la surface " +"à un point donné." #: doc/classes/SpatialMaterial.xml #, fuzzy @@ -58679,7 +60438,7 @@ msgstr "" #: doc/classes/SpatialMaterial.xml msgid "Threshold at which the alpha scissor will discard values." -msgstr "" +msgstr "Le seuil à partir duquel le ciseau alpha ignorera les valeurs." #: doc/classes/SpatialMaterial.xml msgid "" @@ -58730,7 +60489,7 @@ msgstr "Si [code]true[/code], active le drapeau spécifié." #: doc/classes/SpatialMaterial.xml msgid "Grows object vertices in the direction of their normals." -msgstr "" +msgstr "Agrandit les sommets des objets dans la direction de leurs normales." #: doc/classes/SpatialMaterial.xml msgid "Currently unimplemented in Godot." @@ -59106,15 +60865,15 @@ msgstr "" #: doc/classes/SpatialMaterial.xml msgid "The color of the object is added to the background." -msgstr "" +msgstr "La couleur de l'objet est ajoutée à l'arrière-plan." #: doc/classes/SpatialMaterial.xml msgid "The color of the object is subtracted from the background." -msgstr "" +msgstr "La couleur de l'objet est soustraite à l'arrière-plan." #: doc/classes/SpatialMaterial.xml msgid "The color of the object is multiplied by the background." -msgstr "" +msgstr "La couleur de l'objet est multipliée par l'arrière-plan." #: doc/classes/SpatialMaterial.xml msgid "Default depth draw mode. Depth is drawn only for opaque objects." @@ -59173,6 +60932,8 @@ msgstr "" #: doc/classes/SpatialMaterial.xml msgid "Set [code]ALBEDO[/code] to the per-vertex color specified in the mesh." msgstr "" +"Définit [code]ALBEDO[/code] par la couleur définie pour chaque sommet du " +"maillage." #: doc/classes/SpatialMaterial.xml msgid "" @@ -59246,6 +61007,7 @@ msgstr "" #: doc/classes/SpatialMaterial.xml msgid "Forces the shader to convert albedo from sRGB space to linear space." msgstr "" +"Force le shader à convertir l'albedo de l'espace sRGB à celui linéaire." #: doc/classes/SpatialMaterial.xml msgid "Disables receiving shadows from other objects." @@ -59258,6 +61020,8 @@ msgstr "Désactive la réception de la lumière ambiante." #: doc/classes/SpatialMaterial.xml msgid "Ensures that normals appear correct, even with non-uniform scaling." msgstr "" +"S'assure que les normales apparaissent correctement, même pour les " +"proportions non uniformes." #: doc/classes/SpatialMaterial.xml msgid "Enables the shadow to opacity feature." @@ -59313,7 +61077,7 @@ msgstr "L'axe Z de l'objet fera toujours face à la caméra." #: doc/classes/SpatialMaterial.xml msgid "The object's X axis will always face the camera." -msgstr "" +msgstr "L'axe X de l'objet fera toujours face à la caméra." #: doc/classes/SpatialMaterial.xml msgid "" @@ -59325,19 +61089,19 @@ msgstr "" #: doc/classes/SpatialMaterial.xml msgid "Used to read from the red channel of a texture." -msgstr "Utiliser pour lire la texture depuis le canal du rouge." +msgstr "Utilisé pour lire la texture depuis le canal du rouge." #: doc/classes/SpatialMaterial.xml msgid "Used to read from the green channel of a texture." -msgstr "Utiliser pour lire la texture depuis le canal du vert." +msgstr "Utilisé pour lire la texture depuis le canal du vert." #: doc/classes/SpatialMaterial.xml msgid "Used to read from the blue channel of a texture." -msgstr "Utiliser pour lire la texture depuis le canal du bleu." +msgstr "Utilisé pour lire la texture depuis le canal du bleu." #: doc/classes/SpatialMaterial.xml msgid "Used to read from the alpha channel of a texture." -msgstr "Utiliser pour lire la texture depuis le canal de l'alpha." +msgstr "Utilisé pour lire la texture depuis le canal de l'alpha." #: doc/classes/SpatialMaterial.xml msgid "Adds the emission color to the color from the emission texture." @@ -59560,7 +61324,7 @@ msgstr "" #: doc/classes/SpotLight.xml msgid "A spotlight, such as a reflector spotlight or a lantern." -msgstr "" +msgstr "Un projecteur, comme un projecteur de spectacle ou un lanterne." #: doc/classes/SpotLight.xml msgid "" @@ -59741,10 +61505,12 @@ msgid "" "If [code]true[/code], texture is cut from a larger atlas texture. See " "[member region_rect]." msgstr "" +"Si [code]true[/code], la texture est une partie d'une plus grande texture " +"atlas. Voir [member region_rect]." #: doc/classes/Sprite.xml msgid "If [code]true[/code], the outermost pixels get blurred out." -msgstr "" +msgstr "Si [code]true[/code], les pixels les plus à l'extérieur sont floutés." #: doc/classes/Sprite.xml doc/classes/Sprite3D.xml msgid "" @@ -59786,6 +61552,8 @@ msgid "" "If [code]true[/code], texture will be cut from a larger atlas texture. See " "[member region_rect]." msgstr "" +"Si [code]true[/code], la texture sera récupéré d'une plus grande texture " +"atlas. Voir [member region_rect]." #: doc/classes/Sprite3D.xml msgid "" @@ -59849,7 +61617,7 @@ msgstr "" #: doc/classes/SpriteBase3D.xml msgid "The size of one pixel's width on the sprite to scale it in 3D." -msgstr "" +msgstr "La taille d'un des pixels de la sprite pour définir sa taille en 3D." #: doc/classes/SpriteBase3D.xml #, fuzzy @@ -60042,7 +61810,7 @@ msgstr "" #: doc/classes/StreamPeer.xml msgid "Abstraction and base class for stream-based protocols." -msgstr "" +msgstr "Classe abstraite pour la base des protocoles de flux." #: doc/classes/StreamPeer.xml msgid "" @@ -60956,6 +62724,8 @@ msgid "" "Returns a copy of the string with special characters escaped using the JSON " "standard." msgstr "" +"Retourne une copie de cette chaine de caractères avec les caractères " +"spéciaux échappés selon le standard JSON." #: doc/classes/String.xml msgid "Returns a number of characters from the left of the string." @@ -61197,6 +62967,16 @@ msgid "" "print(\"ABC123\".similarity(\"abc123\")) # Prints \"0.4\"\n" "[/codeblock]" msgstr "" +"Retourne l'indice de similarité ([url=https://fr.wikipedia.org/wiki/" +"Indice_de_S%C3%B8rensen-Dice]Sorensen-Dice[/url]) de cette chaine de " +"caractères par rapport à une autre. Un résultat de 1.0 signifie qu'elles " +"sont identiques, alors que 0.0 qu'elles sont complètement différentes.\n" +"[codeblock]\n" +"print(\"ABC123\".similarity(\"ABC123\")) # Affiche \"1\"\n" +"print(\"ABC123\".similarity(\"XYZ456\")) # Affiche \"0\"\n" +"print(\"ABC123\".similarity(\"123ABC\")) # Affiche \"0.8\"\n" +"print(\"ABC123\".similarity(\"abc123\")) # Affiche \"0.4\"\n" +"[/codeblock]" #: doc/classes/String.xml msgid "Returns a simplified canonical path." @@ -61255,18 +63035,16 @@ msgid "" msgstr "" #: doc/classes/String.xml -#, fuzzy msgid "" "Converts the String (which is a character array) to [PoolByteArray] (which " "is an array of bytes). The conversion is faster compared to [method " "to_utf8], as this method assumes that all the characters in the String are " "ASCII characters." msgstr "" -"Convertit la chaîne de caractères (qui est un array (tableau) de caractères) " -"en un [PackedByteArray] (qui est un array de bytes). La conversion est un " -"plus lente que [method to_ascii], mais est compatible avec tous les " -"caractères UTF-8. Par conséquent, il est préférable d'utiliser cette " -"fonction à la place [method to_ascii]." +"Convertit la chaîne de caractères (qui est un tableau de caractères) en un " +"[PoolByteArray] (un tableau de octets). La conversion est un plus rapide que " +"[method to_utf8], car elle assume que tous les caractères de la String sont " +"des caractères ASCII." #: doc/classes/String.xml msgid "" @@ -61302,18 +63080,16 @@ msgid "Returns the string converted to uppercase." msgstr "Retourne la chaîne de caractères convertie en majuscules." #: doc/classes/String.xml -#, fuzzy msgid "" "Converts the String (which is an array of characters) to [PoolByteArray] " "(which is an array of bytes). The conversion is a bit slower than [method " "to_ascii], but supports all UTF-8 characters. Therefore, you should prefer " "this function over [method to_ascii]." msgstr "" -"Convertit la chaîne de caractères (qui est un array (tableau) de caractères) " -"en un [PackedByteArray] (qui est un array de bytes). La conversion est un " -"plus lente que [method to_ascii], mais est compatible avec tous les " -"caractères UTF-8. Par conséquent, il est préférable d'utiliser cette " -"fonction à la place [method to_ascii]." +"Convertit la chaîne de caractères (qui est un tableau de caractères) en un " +"[PoolByteArray] (un tableau d'octets). La conversion est un plus lente que " +"[method to_ascii], mais supporte tous les caractères UTF-8. Par conséquent, " +"il est préférable d'utiliser cette fonction à la place [method to_ascii]." #: doc/classes/String.xml msgid "" @@ -61483,6 +63259,8 @@ msgstr "Stylebox vide (n'affiche vraiment rien)." msgid "" "Customizable [StyleBox] with a given set of parameters (no texture required)." msgstr "" +"Une [StyleBox] personnalisable avec un ensemble de paramètres (où aucune " +"texture n'est obligatoire)." #: doc/classes/StyleBoxFlat.xml msgid "" @@ -61516,7 +63294,7 @@ msgstr "" #: doc/classes/StyleBoxFlat.xml msgid "Returns the smallest border width out of all four borders." -msgstr "" +msgstr "Retourne la plus fine bordure parmi les quatre bordures." #: doc/classes/StyleBoxFlat.xml msgid "" @@ -61566,6 +63344,9 @@ msgid "" "[code]radius_top_right[/code], [code]radius_bottom_right[/code], and " "[code]radius_bottom_left[/code] pixels." msgstr "" +"Définit le rayon de chacun des coins [code]radius_top_left[/code], " +"[code]radius_top_right[/code], [code]radius_bottom_right[/code], et " +"[code]radius_bottom_left[/code] en pixels." #: doc/classes/StyleBoxFlat.xml doc/classes/StyleBoxTexture.xml msgid "" @@ -61578,6 +63359,7 @@ msgstr "" #: doc/classes/StyleBoxFlat.xml doc/classes/StyleBoxTexture.xml msgid "Sets the expand margin to [code]size[/code] pixels for all margins." msgstr "" +"Définit la marge étendue à [code]size[/code] pixels pour toutes les marges." #: doc/classes/StyleBoxFlat.xml doc/classes/StyleBoxTexture.xml msgid "" @@ -61585,6 +63367,9 @@ msgid "" "[code]size_top[/code], [code]size_right[/code], and [code]size_bottom[/code] " "pixels." msgstr "" +"Définit la marge d'expansion pour chacune des marges [code]size_left[/code], " +"[code]size_top[/code], [code]size_right[/code], and [code]size_bottom[/code] " +"en pixels." #: doc/classes/StyleBoxFlat.xml msgid "" @@ -61612,6 +63397,8 @@ msgstr "La couleur d'arrière-plan de la stylebox." #: doc/classes/StyleBoxFlat.xml msgid "If [code]true[/code], the border will fade into the background color." msgstr "" +"Si [code]true[/code], la bordure fusionnera avec la couleur de l'arrière-" +"plan." #: doc/classes/StyleBoxFlat.xml msgid "Sets the color of the border." @@ -61793,6 +63580,8 @@ msgid "" "If [code]true[/code], the line will be vertical. If [code]false[/code], the " "line will be horizontal." msgstr "" +"Si [code]true[/code], la ligne sera verticale. Si [code]false[/code], elle " +"sera horizontale." #: doc/classes/StyleBoxTexture.xml msgid "Texture-based nine-patch [StyleBox]." @@ -62081,7 +63870,7 @@ msgstr "" #: doc/classes/SurfaceTool.xml msgid "Clear all information passed into the surface tool so far." -msgstr "" +msgstr "Efface toutes les informations passées à l'outil de surface jusque là ." #: doc/classes/SurfaceTool.xml msgid "" @@ -62177,7 +63966,7 @@ msgstr "Retourne l'index de l'onglet précédemment actif." #: doc/classes/TabContainer.xml msgid "Returns the [Control] node from the tab at index [code]tab_idx[/code]." -msgstr "" +msgstr "Retourne le nÅ“ud [Control] de l'onglet à l'index [code]tab_idx[/code]." #: doc/classes/TabContainer.xml doc/classes/Tabs.xml msgid "Returns the number of tabs." @@ -62313,6 +64102,8 @@ msgid "" "Emitted when the [TabContainer]'s [Popup] button is clicked. See [method " "set_popup] for details." msgstr "" +"Émis quand le bouton [Popup] du [TabContainer] est cliqué. Voir [method " +"set_popup] pour les détails." #: doc/classes/TabContainer.xml doc/classes/Tabs.xml msgid "Emitted when switching to another tab." @@ -62445,6 +64236,7 @@ msgstr "" #: doc/classes/Tabs.xml msgid "Returns [code]true[/code] if select with right mouse button is enabled." msgstr "" +"Retourne [code]true[/code] si la sélection avec le clic-droit est actif." #: doc/classes/Tabs.xml msgid "Returns the number of hidden tabs offsetted to the left." @@ -62455,9 +64247,8 @@ msgid "Returns tab [Rect2] with local position and size." msgstr "Retourne l'onglet [Rect2] avec la position et la taille locales." #: doc/classes/Tabs.xml -#, fuzzy msgid "Returns the title of the tab at index [code]tab_idx[/code]." -msgstr "Retourne le type du nÅ“ud à [code]idx[/code]." +msgstr "Retourne le titre de l'onglet à la position [code]idx[/code]." #: doc/classes/Tabs.xml msgid "Returns the [Tabs]' rearrange group ID." @@ -62525,6 +64316,8 @@ msgid "" "Emitted when the active tab is rearranged via mouse drag. See [member " "drag_to_rearrange_enabled]." msgstr "" +"Émis quand l'onglet actif est réarrangé en glissant la souris. Voir [member " +"drag_to_rearrange_enabled]." #: doc/classes/Tabs.xml msgid "Emitted when a tab is right-clicked." @@ -62949,6 +64742,9 @@ msgid "" "Select all the text.\n" "If [member selecting_enabled] is [code]false[/code], no selection will occur." msgstr "" +"Sélectionne tout le texte.\n" +"Si [member selecting_enabled] est [code]false[/code], aucun sélection ne se " +"fera." #: doc/classes/TextEdit.xml msgid "Sets the text for a specific line." @@ -63069,6 +64865,8 @@ msgid "" "If [code]true[/code], a minimap is shown, providing an outline of your " "source code." msgstr "" +"Si [code]true[/code], une mini-carte sera affichée, fournissant un aperçu de " +"votre code source." #: doc/classes/TextEdit.xml msgid "The width, in pixels, of the minimap." @@ -63079,6 +64877,8 @@ msgid "" "If [code]true[/code], custom [code]font_color_selected[/code] will be used " "for selected text." msgstr "" +"Si [code]true[/code], la couleur [code]font_color_selected[/code] " +"personnalisée sera utilisée pour le texte sélectionné." #: doc/classes/TextEdit.xml msgid "" @@ -63150,6 +64950,7 @@ msgstr "" #: doc/classes/TextEdit.xml msgid "Emitted when a breakpoint is placed via the breakpoint gutter." msgstr "" +"Émis quand un point d'arrêt est ajouté dans le bandeau des points d'arrêt." #: doc/classes/TextEdit.xml msgid "Emitted when the cursor changes." @@ -63254,6 +65055,8 @@ msgid "" "Sets the highlight [Color] of multiple occurrences. [member " "highlight_all_occurrences] has to be enabled." msgstr "" +"Définir la [Color] de surlignage des multiples occurrences. [member " +"highlight_all_occurrences] doit être actif." #: doc/classes/TextEdit.xml msgid "Sets the spacing between the lines." @@ -63417,7 +65220,7 @@ msgstr "" #: doc/classes/TextureArray.xml msgid "Array of textures stored in a single primitive." -msgstr "" +msgstr "Un tableau de textures enregistré dans une seule ressource." #: doc/classes/TextureArray.xml msgid "" @@ -64505,6 +66308,7 @@ msgstr "" #: doc/classes/TileMap.xml msgid "Returns a rectangle enclosing the used (non-empty) tiles of the map." msgstr "" +"Retourne un rectangle englobant les tuiles utilisées (non vides) de la carte." #: doc/classes/TileMap.xml msgid "" @@ -64517,10 +66321,14 @@ msgstr "" #: doc/classes/TileMap.xml msgid "Returns [code]true[/code] if the given cell is flipped in the X axis." msgstr "" +"Retourne [code]true[/code] si la cellule spécifiée est inversée selon l'axe " +"X." #: doc/classes/TileMap.xml msgid "Returns [code]true[/code] if the given cell is flipped in the Y axis." msgstr "" +"Retourne [code]true[/code] si la cellule spécifiée est inversée selon l'axe " +"Y." #: doc/classes/TileMap.xml msgid "" @@ -64616,7 +66424,7 @@ msgstr "Si [code]true[/code], les UV de la cellule seront limités." #: doc/classes/TileMap.xml msgid "The custom [Transform2D] to be applied to the TileMap's cells." -msgstr "" +msgstr "La [Transform2D] personnalisée appliquée aux cellules de la TileMap." #: doc/classes/TileMap.xml msgid "" @@ -64722,6 +66530,8 @@ msgstr "" #: doc/classes/TileMap.xml msgid "The TileMap orientation mode. See [enum Mode] for possible values." msgstr "" +"Le mode d'orientation de la TileMap. Voir [enum Mode] pour les valeurs " +"possibles." #: doc/classes/TileMap.xml msgid "" @@ -65000,7 +66810,7 @@ msgstr "Retourne la texture normale de la carte de la tuile." #: doc/classes/TileSet.xml msgid "Returns the offset of the tile's light occluder." -msgstr "" +msgstr "Retourne le décalage de l'occulteur de lumière de la tuile." #: doc/classes/TileSet.xml msgid "Returns the tile sub-region in the texture." @@ -65059,7 +66869,7 @@ msgstr "Retourne l'index selon Z (le claque d'affichage) de la tuile." #: doc/classes/TileSet.xml msgid "Sets a light occluder for the tile." -msgstr "" +msgstr "Définit l'occulteur de lumière pour la tuile." #: doc/classes/TileSet.xml msgid "Sets the tile's material." @@ -65084,7 +66894,7 @@ msgstr "Définit le polygone de navigation de la tuile." #: doc/classes/TileSet.xml msgid "Sets an offset for the tile's navigation polygon." -msgstr "" +msgstr "Définit le décalage du polygone de navigation de la tuile." #: doc/classes/TileSet.xml msgid "" @@ -65097,7 +66907,7 @@ msgstr "" #: doc/classes/TileSet.xml msgid "Sets an offset for the tile's light occluder." -msgstr "" +msgstr "Définit le décalage de l'occulteur de lumière de la tuile." #: doc/classes/TileSet.xml msgid "" @@ -65122,7 +66932,7 @@ msgstr "Définit la [Transform2D] de la forme de la tuile." #: doc/classes/TileSet.xml msgid "Sets an array of shapes for the tile, enabling collision." -msgstr "" +msgstr "Définit une liste de formes pour la tuile, activant les collisions." #: doc/classes/TileSet.xml msgid "Sets the tile's texture." @@ -65723,6 +67533,8 @@ msgid "" "Constructs a Transform from a [Quat]. The origin will be [code]Vector3(0, 0, " "0)[/code]." msgstr "" +"Construit une Transform à partir d'un [Quat]. L'origine sera " +"[code]Vector3(0, 0, 0)[/code]." #: doc/classes/Transform.xml msgid "" @@ -65779,14 +67591,14 @@ msgstr "" "d’axe normalisé (échelle de 1 ou -1)." #: doc/classes/Transform.xml -#, fuzzy msgid "" "Returns a copy of the transform rotated around the given [code]axis[/code] " "by the given [code]angle[/code] (in radians), using matrix multiplication. " "The [code]axis[/code] must be a normalized vector." msgstr "" -"Pivote ce vecteur autour de l'axe donné par [code]phi[/code] radians. L'axe " -"donné doit être normalisé." +"Retourne une copie de la transformation pivotée autour de l'axe [code]axis[/" +"code] donné de [code]angle[/code] radians, en utilisant la multiplication de " +"matrice. L'axe [code]axis[/code] doit être normalisé." #: doc/classes/Transform.xml #, fuzzy @@ -65822,6 +67634,12 @@ msgid "" "affine transformations (e.g. with scaling) see [method affine_inverse] " "method." msgstr "" +"La transformation inverse du [Vector3], [Plane], [AABB], ou " +"[PoolVector3Array] spécifié, en assumant que la transformation est composée " +"de rotation et translation (aucune mise à l'échelle). Équivalent à appeler " +"[code]inverse().xform(v)[/code] sur cette transformation. Pour les " +"transformations affines (c'est-à -dire avec mise à l'échelle), voir la " +"méthode [method affine_inverse]." #: doc/classes/Transform.xml msgid "" @@ -66213,6 +68031,8 @@ msgstr "Retourne l'index du dernier bouton pressé." msgid "" "Returns the tree's root item, or [code]null[/code] if the tree is empty." msgstr "" +"Retourne l'élément racine de l'arborescence, ou [code]null[/code] si " +"l'arborescence est vide." #: doc/classes/Tree.xml msgid "Returns the current scrolling position." @@ -66312,6 +68132,8 @@ msgid "" "Emitted when a button on the tree was pressed (see [method TreeItem." "add_button])." msgstr "" +"Émis quand le bouton de l'arborescence a été pressé (voir [method TreeItem." +"add_button])." #: doc/classes/Tree.xml msgid "Emitted when a cell is selected." @@ -66349,6 +68171,7 @@ msgstr "Émis quand la label d'un élément est double-cliqué." #: doc/classes/Tree.xml msgid "Emitted when an item is collapsed by a click on the folding arrow." msgstr "" +"Émis quand un élément est réduit via un clic sur le flèche de réduction." #: doc/classes/Tree.xml msgid "" @@ -66387,7 +68210,7 @@ msgstr "" #: doc/classes/Tree.xml msgid "Emitted when a left mouse button click does not select any item." -msgstr "" +msgstr "Émis quand un clic-gauche n'a sélectionné aucun élément." #: doc/classes/Tree.xml msgid "" @@ -66580,7 +68403,7 @@ msgstr "Le [StyleBox] utilisé pour le curseur, quand le [Tree] a le focus." #: doc/classes/Tree.xml msgid "[StyleBox] used for the cursor, when the [Tree] is not being focused." msgstr "" -"Le [StyleBox] utilisé pour le curseur, quand le [Tree] n'a pas le focus." +"La [StyleBox] utilisée pour le curseur, quand le [Tree] n'a pas le focus." #: doc/classes/Tree.xml msgid "" @@ -66616,7 +68439,7 @@ msgstr "" msgid "" "[StyleBox] for the selected items, used when the [Tree] is being focused." msgstr "" -"La [StyleBox] pour les éléments sélectionnés, quand le [Tree] est en focus." +"La [StyleBox] pour les éléments sélectionnés, quand le [Tree] a le focus." #: doc/classes/Tree.xml msgid "[StyleBox] used when the title button is being hovered." @@ -66775,6 +68598,10 @@ msgid "" "visible element in the tree when called on the last visible element, " "otherwise it returns [code]null[/code]." msgstr "" +"Retourne le TreeItem suivant visible dans l'arborescence ou null si aucun.\n" +"Si [code]wrap[/code] est activé, la méthode repartira depuis le premier " +"élément visible de l'arborescence si elle est appelé sur le dernier élément, " +"sinon elle retournera [code]null[/code]." #: doc/classes/TreeItem.xml msgid "Returns the parent TreeItem or a null object if there is none." @@ -66795,6 +68622,11 @@ msgid "" "visible element in the tree when called on the first visible element, " "otherwise it returns [code]null[/code]." msgstr "" +"Retourne le TreeItem précédent visible dans l'arborescence ou null si " +"aucun.\n" +"Si [code]wrap[/code] est activé, la méthode repartira depuis le dernier " +"élément visible de l'arborescence si elle est appelé sur le premier élément, " +"sinon elle retournera [code]null[/code]." #: doc/classes/TreeItem.xml msgid "Returns the value of a [constant CELL_MODE_RANGE] column." @@ -67331,6 +69163,8 @@ msgstr "" msgid "" "The animation is interpolated with elasticity, wiggling around the edges." msgstr "" +"L'animation est interpolée avec un effet élastique, se balançant aux niveaux " +"des bornes." #: doc/classes/Tween.xml msgid "" @@ -67451,6 +69285,60 @@ msgid "" " connected = true\n" "[/codeblock]" msgstr "" +"Un simple serveur qui ouvre un port UDP et retourne les [PacketPeerUDP] " +"connecté pour recevoir de nouveaux paquets. Voir aussi [method PacketPeerUDP." +"connect_to_host].\n" +"Après avoir lancé le serveur (avec [method listen]), vous devez appeler " +"[method poll] régulièrement (ex. à l'intérieur de [method Node._process]) " +"pour qu'il traite les nouveaux paquets, les envoyer aux [PacketPeerUDP] " +"appropriés, ou recevoir de nouvelles connexions.\n" +"Voici une petit exemple sur la façon de l'utiliser :\n" +"[codeblock]\n" +"# server.gd\n" +"extends Node\n" +"\n" +"var server := UDPServer.new()\n" +"var peers = []\n" +"\n" +"func _ready():\n" +" server.listen(4242)\n" +"\n" +"func _process(delta):\n" +" server.poll() # Important !\n" +" if server.is_connection_available():\n" +" var peer : PacketPeerUDP = server.take_connection()\n" +" var pkt = peer.get_packet()\n" +" print(\"Pair accepté : %s:%s\" % [peer.get_packet_ip(), peer." +"get_packet_port()])\n" +" print(\"Données reçues: %s\" % [pkt.get_string_from_utf8()])\n" +" # Répondre pour qu'il sache qu'on a bien reçu le message.\n" +" peer.put_packet(pkt)\n" +" # Garder une référence pour qu'on puisse continuer de contacter le " +"pair distant.\n" +" peers.append(peer)\n" +"\n" +" for i in range(0, peers.size()):\n" +" pass # Faire quelque chose avec les pairs connectés.\n" +"\n" +"[/codeblock]\n" +"[codeblock]\n" +"# client.gd\n" +"extends Node\n" +"\n" +"var udp := PacketPeerUDP.new()\n" +"var connected = false\n" +"\n" +"func _ready():\n" +" udp.connect_to_host(\"127.0.0.1\", 4242)\n" +"\n" +"func _process(delta):\n" +" if !connected:\n" +" # Essai pour contacter le serveur\n" +" udp.put_packet(\"La réponse est... 42 !\".to_utf8())\n" +" if udp.get_available_packet_count() > 0:\n" +" print(\"Connecté : %s\" % udp.get_packet().get_string_from_utf8())\n" +" connected = true\n" +"[/codeblock]" #: doc/classes/UDPServer.xml msgid "" @@ -67464,6 +69352,7 @@ msgstr "" msgid "" "Returns [code]true[/code] if the socket is open and listening on a port." msgstr "" +"Retourne [code]true[/code] si le socket est ouvert et écoute à un port." #: doc/classes/UDPServer.xml msgid "" @@ -67488,6 +69377,9 @@ msgid "" "[PacketPeerUDP] accepted via [method take_connection] (remote peers will not " "be notified)." msgstr "" +"Arrête le serveur, fermant le socket UDP si ouvert. Fermera toutes les " +"connexions [PacketPeerUDP] acceptées avec [method take_connection] (les " +"pairs distantes ne seront pas notifiés)." #: doc/classes/UDPServer.xml msgid "" @@ -67707,6 +69599,60 @@ msgid "" " thread.wait_to_finish()\n" "[/codeblock]" msgstr "" +"Fournis un fonctionnalité UPNP pour découvrir des appareils [UPNPDevice] sur " +"le réseau local et lancer des commandes sur eux, comme la gestion des ports " +"(port forwarding) et requêter les adresses IP locales et distantes. À noter " +"que les méthodes de cette classe sont synchrones et bloquent le fil " +"d'exécution que les appelle.\n" +"Pour le forward d'un port :\n" +"[codeblock]\n" +"const PORT = 7777\n" +"var upnp = UPNP.new()\n" +"upnp.discover(2000, 2, \"InternetGatewayDevice\")\n" +"upnp.add_port_mapping(port)\n" +"[/codeblock]\n" +"Pour fermer le port spécifié (ex. après avoir fini de l'utiliser) :\n" +"[codeblock]\n" +"upnp.delete_port_mapping(port)\n" +"[/codeblock]\n" +"[b]Note :[/b] la découverte UPnP bloque le fil d'exécution que l'appelle. " +"Pour ne pas bloquer le fil d'exécution principal, utilisez les [Thread] " +"comme ceci :\n" +"[codeblock]\n" +"# Émis quand la configuration d'un port UPnP est fini (peu importe si c'est " +"un succès ou un échec).\n" +"signal upnp_completed(error)\n" +"\n" +"# Remplacer ceci avec le port de votre serveur compris entre 1025 et 65535.\n" +"const SERVER_PORT = 3928\n" +"var thread = null\n" +"\n" +"func _upnp_setup(server_port):\n" +" # Les requêtes UPNP prennent un peu de temps\n" +" var upnp = UPNP.new()\n" +" var err = upnp.discover()\n" +"\n" +" if err != OK:\n" +" push_error(str(err))\n" +" emit_signal(\"upnp_completed\", err)\n" +" return\n" +"\n" +" if upnp.get_gateway() and upnp.get_gateway().is_valid_gateway():\n" +" upnp.add_port_mapping(server_port, server_port, ProjectSettings." +"get_setting(\"application/config/name\"), \"UDP\")\n" +" upnp.add_port_mapping(server_port, server_port, ProjectSettings." +"get_setting(\"application/config/name\"), \"TCP\")\n" +" emit_signal(\"upnp_completed\", OK)\n" +"\n" +"func _ready():\n" +" thread = Thread.new()\n" +" thread.start(self, \"_upnp_setup\", SERVER_PORT)\n" +"\n" +"func _exit_tree():\n" +" # Attendre ici que le fil d'exécution se termine avant que le jeu ne " +"quitte.\n" +" thread.wait_to_finish()\n" +"[/codeblock]" #: modules/upnp/doc_classes/UPNP.xml msgid "Adds the given [UPNPDevice] to the list of discovered devices." @@ -68233,6 +70179,9 @@ msgid "" "Returns the vector with a maximum length by limiting its length to " "[code]length[/code]." msgstr "" +"Obsolète, veuillez plutôt utiliser [method limit_length].\n" +"Retourne le vecteur avec sa longueur limitée par la valeur maximale " +"[code]length[/code]." #: doc/classes/Vector2.xml msgid "" @@ -68328,6 +70277,8 @@ msgid "" "Returns the vector with a maximum length by limiting its length to " "[code]length[/code]." msgstr "" +"Retourne le vecteur avec sa longueur maximale limitée par la longueur " +"[code]length[/code]." #: doc/classes/Vector2.xml msgid "" @@ -69027,7 +70978,7 @@ msgstr "" #: modules/theora/doc_classes/VideoStreamTheora.xml msgid "Returns the Ogg Theora video file handled by this [VideoStreamTheora]." -msgstr "" +msgstr "Retourne le fichier vidéo Ogg Theora géré par ce [VideoStreamTheora]." #: modules/theora/doc_classes/VideoStreamTheora.xml msgid "" @@ -69117,12 +71068,16 @@ msgid "" "Returns the first valid [World] for this viewport, searching the [member " "world] property of itself and any Viewport ancestor." msgstr "" +"Retourne le premier [World] valide de cette fenêtre d'affichage, en " +"cherchant dans sa propriété [member world] ainsi que celle de ses parents." #: doc/classes/Viewport.xml msgid "" "Returns the first valid [World2D] for this viewport, searching the [member " "world_2d] property of itself and any Viewport ancestor." msgstr "" +"Retourne le premier [World2D] valide de cette fenêtre d'affichage, en " +"cherchant dans sa propriété [member world] ainsi que celle de ses parents." #: doc/classes/Viewport.xml msgid "Returns the active 3D camera." @@ -69445,6 +71400,8 @@ msgid "" "If [code]true[/code], the viewport should render its background as " "transparent." msgstr "" +"Si [code]true[/code], la fenêtre d'affichage doit faire le rendu de " +"l'arrière-plan de manière transparente." #: doc/classes/Viewport.xml msgid "The rendering mode of viewport." @@ -70018,7 +71975,7 @@ msgstr "Ajoute un signal personnalisé avec le nom spécifié au VisualScript." #: modules/visual_script/doc_classes/VisualScript.xml msgid "Add a function with the specified name to the VisualScript." -msgstr "" +msgstr "Ajoute une fonction avec le nom spécifié au VisualScript." #: modules/visual_script/doc_classes/VisualScript.xml msgid "Add a node to a function of the VisualScript." @@ -70088,7 +72045,7 @@ msgstr "" #: modules/visual_script/doc_classes/VisualScript.xml msgid "Returns the position of the center of the screen for a given function." -msgstr "" +msgstr "Retourne la position du centre de l'écran pour la fonction donnée." #: modules/visual_script/doc_classes/VisualScript.xml msgid "Returns a node given its id and its function." @@ -70142,7 +72099,7 @@ msgstr "Supprime un signal personnalisé avec le nom donné." #: modules/visual_script/doc_classes/VisualScript.xml msgid "Remove a specific function and its nodes from the script." -msgstr "" +msgstr "Retirer la fonction spécifiée et ses nÅ“uds du script." #: modules/visual_script/doc_classes/VisualScript.xml msgid "Remove a specific node." @@ -70392,6 +72349,8 @@ msgid "" "Return the result of [code]value[/code] decreased by [code]step[/code] * " "[code]amount[/code]." msgstr "" +"Retourne le résultat de la valeur [code]value[/code] moins [code]step[/code] " +"* [code]amount[/code]." #: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml msgid "" @@ -70413,10 +72372,8 @@ msgid "" msgstr "" #: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml -#, fuzzy msgid "Return a random floating-point value between the two inputs." -msgstr "" -"Retourne une valeur aléatoire à virgule flottante entre les deux entrées." +msgstr "Retourne un flottant aléatoire compris entre les deux entrées." #: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml msgid "Set the seed for the random number generator." @@ -70577,7 +72534,6 @@ msgstr "" "disponibles." #: modules/visual_script/doc_classes/VisualScriptComment.xml -#, fuzzy msgid "A Visual Script node used to annotate the script." msgstr "Un nÅ“ud Visual Script utilisé pour annoter le script." @@ -70614,7 +72570,7 @@ msgstr "" #: modules/visual_script/doc_classes/VisualScriptCondition.xml msgid "A Visual Script node which branches the flow." -msgstr "" +msgstr "Un nÅ“ud Visual Script qui change le flux." #: modules/visual_script/doc_classes/VisualScriptCondition.xml msgid "" @@ -70654,7 +72610,7 @@ msgstr "La valeur de la constante." #: modules/visual_script/doc_classes/VisualScriptConstructor.xml msgid "A Visual Script node which calls a base type constructor." -msgstr "" +msgstr "Un nÅ“ud Visual Script qui appelle le constructeur du type de base." #: modules/visual_script/doc_classes/VisualScriptConstructor.xml msgid "" @@ -70754,7 +72710,7 @@ msgstr "" #: modules/visual_script/doc_classes/VisualScriptCustomNode.xml msgid "Return whether the custom node has an input [b]sequence[/b] port." -msgstr "" +msgstr "Retourne si le nÅ“ud personnalisé à un port d'entrée [b]sequence[/b]." #: modules/visual_script/doc_classes/VisualScriptCustomNode.xml msgid "" @@ -71299,7 +73255,7 @@ msgstr "Modifier la valeur par défaut du port spécifié." #: modules/visual_script/doc_classes/VisualScriptNode.xml msgid "Emitted when the available input/output ports are changed." -msgstr "" +msgstr "Émis quand les ports entrants/sortants sont changés." #: modules/visual_script/doc_classes/VisualScriptOperator.xml #, fuzzy @@ -71337,6 +73293,7 @@ msgstr "" #: modules/visual_script/doc_classes/VisualScriptPreload.xml msgid "Creates a new [Resource] or loads one from the filesystem." msgstr "" +"Crée une nouvelle [Resource] ou la charge depuis le système de fichiers." #: modules/visual_script/doc_classes/VisualScriptPreload.xml msgid "" @@ -71904,6 +73861,8 @@ msgid "" "Sets the environment used by this camera. Equivalent to [member Camera." "environment]." msgstr "" +"Définit l'environnement utilisé par cette caméra. Équivalent à [member " +"Camera.environment]." #: doc/classes/VisualServer.xml msgid "" @@ -72137,11 +74096,15 @@ msgid "" "Sets the [CanvasItem]'s Z index, i.e. its draw order (lower indexes are " "drawn first)." msgstr "" +"Définit l'index Z du [CanvasItem], c'est sa position d'affichage (les plus " +"faibles index seront affichés avant les autres)." #: doc/classes/VisualServer.xml msgid "" "Attaches the canvas light to the canvas. Removes it from its previous canvas." msgstr "" +"Attache une lumière de canevas à une instance. Retire la lumière " +"précédemment assignée à cette instance." #: doc/classes/VisualServer.xml #, fuzzy @@ -72164,6 +74127,8 @@ msgstr "" msgid "" "Attaches a light occluder to the canvas. Removes it from its previous canvas." msgstr "" +"Attache un occulteur de lumière à une instance. Retire l'occulteur " +"précédemment assigné à cette instance." #: doc/classes/VisualServer.xml #, fuzzy @@ -72398,6 +74363,7 @@ msgstr "Définit l'intensité de la couleur de l'arrière-plan." #: doc/classes/VisualServer.xml msgid "Sets the maximum layer to use if using Canvas background mode." msgstr "" +"Définit le claque maximal à utiliser si l'arrière-plan utilise un canevas." #: doc/classes/VisualServer.xml msgid "" @@ -72498,11 +74464,12 @@ msgstr "" #: doc/classes/VisualServer.xml msgid "Returns the id of the test cube. Creates one if none exists." -msgstr "" +msgstr "Retourne l'identifiant du cube de test. En crée un si aucun n'existe." #: doc/classes/VisualServer.xml msgid "Returns the id of the test texture. Creates one if none exists." msgstr "" +"Retourne l'identifiant de la texture de test. En crée une si aucune n'existe." #: doc/classes/VisualServer.xml msgid "" @@ -72522,6 +74489,7 @@ msgstr "" #: doc/classes/VisualServer.xml msgid "Returns the id of a white texture. Creates one if none exists." msgstr "" +"Retourn l'identifiant de la texture blanche. En crée une si aucune n'existe." #: doc/classes/VisualServer.xml #, fuzzy @@ -72742,6 +74710,8 @@ msgid "" "Ends drawing the [ImmediateGeometry] and displays it. Equivalent to [method " "ImmediateGeometry.end]." msgstr "" +"Termine la création de la [ImmediateGeometry] et l'affiche. Équivalent à " +"[method ImmediateGeometry.end]." #: doc/classes/VisualServer.xml msgid "Returns the material assigned to the [ImmediateGeometry]." @@ -72808,6 +74778,8 @@ msgid "" "Attaches a skeleton to an instance. Removes the previous skeleton from the " "instance." msgstr "" +"Attache un squelette à une instance. Retire le squelette précédemment " +"assigné à cette instance." #: doc/classes/VisualServer.xml #, fuzzy @@ -72861,6 +74833,8 @@ msgid "" "Sets the flag for a given [enum InstanceFlags]. See [enum InstanceFlags] for " "more details." msgstr "" +"Définit le drapeau pour un [enum InstanceFlags] spécifié. Voir [enum " +"InstanceFlags] pour plus de détails." #: doc/classes/VisualServer.xml msgid "" @@ -72923,6 +74897,8 @@ msgid "" "Sets the material of a specific surface. Equivalent to [method MeshInstance." "set_surface_material]." msgstr "" +"Définit le matériau de la surface spécifiée. Équivalent à [method " +"MeshInstance.set_surface_material]." #: doc/classes/VisualServer.xml msgid "" @@ -73397,6 +75373,8 @@ msgstr "" msgid "" "Returns the RID of the mesh that will be used in drawing this multimesh." msgstr "" +"Retourne le RID du maillage qui sera utilisé pour l'affichage de ce " +"multimesh." #: doc/classes/VisualServer.xml msgid "Returns the number of visible instances for this multimesh." @@ -73425,6 +75403,8 @@ msgid "" "Sets the color by which this instance will be modulated. Equivalent to " "[method MultiMesh.set_instance_color]." msgstr "" +"Définit la couleur dans laquelle l'instance sera teintée. Équivalent à " +"[method MultiMesh.set_instance_color]." #: doc/classes/VisualServer.xml msgid "" @@ -73467,6 +75447,8 @@ msgid "" "Sets the mesh to be drawn by the multimesh. Equivalent to [member MultiMesh." "mesh]." msgstr "" +"Définit le maillage à utiliser pour le multimesh. Équivalent à [member " +"MultiMesh.mesh]." #: doc/classes/VisualServer.xml msgid "" @@ -73530,6 +75512,8 @@ msgid "" "Returns [code]true[/code] if particles are not emitting and particles are " "set to inactive." msgstr "" +"Retourne [code]true[/code] si les particules ne sont pas émises et qu'elles " +"sont inactives." #: doc/classes/VisualServer.xml msgid "" @@ -73544,6 +75528,8 @@ msgid "" "Reset the particles on the next update. Equivalent to [method Particles." "restart]." msgstr "" +"Réinitialise les particules à la prochaine mise à jour. Équivalent à [method " +"Particles.restart]." #: doc/classes/VisualServer.xml msgid "" @@ -73583,6 +75569,8 @@ msgstr "" msgid "" "Sets the [Transform] that will be used by the particles when they first emit." msgstr "" +"Définit la [Transform] qui sera utilisée par les particules au début de leur " +"émission." #: doc/classes/VisualServer.xml msgid "" @@ -73799,6 +75787,8 @@ msgid "" "Sets the [enum ScenarioDebugMode] for this scenario. See [enum " "ScenarioDebugMode] for options." msgstr "" +"Définit le [enum ScenarioDebugMode] pour ce scénario. Voir [enum " +"ScenarioDebugMode] pour les options." #: doc/classes/VisualServer.xml msgid "Sets the environment that will be used with this scenario." @@ -73900,6 +75890,7 @@ msgstr "Définit le code d'un shader." #: doc/classes/VisualServer.xml msgid "Sets a shader's default texture. Overwrites the texture given by name." msgstr "" +"Définit la texture par défaut du shader. Écrase la texture donnée en nom." #: doc/classes/VisualServer.xml msgid "Allocates the GPU buffers for this skeleton." @@ -74180,6 +76171,8 @@ msgid "" "Returns a viewport's render information. For options, see the [enum " "ViewportRenderInfo] constants." msgstr "" +"Retourne les informations de rendu de la fenêtre d'affichage. Pour les " +"options, voir les constantes de [enum ViewportRenderInfo]." #: doc/classes/VisualServer.xml msgid "Returns the viewport's last rendered frame." @@ -74210,12 +76203,16 @@ msgstr "Définit la transformation du canevas de la fenêtre d'affichage." msgid "" "Sets the clear mode of a viewport. See [enum ViewportClearMode] for options." msgstr "" +"Définit le mode d'effacement de la fenêtre d'affichage. Voir [enum " +"ViewportClearMode] pour les options." #: doc/classes/VisualServer.xml msgid "" "Sets the debug draw mode of a viewport. See [enum ViewportDebugDraw] for " "options." msgstr "" +"Définit le mode d'affichage de débogage de la fenêtre d'affichage. Voir " +"[enum ViewportDebugDraw] pour les options." #: doc/classes/VisualServer.xml msgid "If [code]true[/code], a viewport's 3D rendering is disabled." @@ -74243,6 +76240,7 @@ msgstr "Si [code]true[/code], l'interpolation fait une boucle." #: doc/classes/VisualServer.xml msgid "If [code]true[/code], the viewport's canvas is not rendered." msgstr "" +"Si [code]true[/code], le canevas de la fenêtre d'affichage n'est pas rendu." #: doc/classes/VisualServer.xml msgid "Currently unimplemented in Godot 3.x." @@ -74473,6 +76471,8 @@ msgid "" "Default flags. [constant TEXTURE_FLAG_MIPMAPS], [constant " "TEXTURE_FLAG_REPEAT] and [constant TEXTURE_FLAG_FILTER] are enabled." msgstr "" +"Le drapeau par défaut. [constant TEXTURE_FLAG_MIPMAPS], [constant " +"TEXTURE_FLAG_REPEAT] et [constant TEXTURE_FLAG_FILTER] sont actifs." #: doc/classes/VisualServer.xml msgid "Shader is a 3D shader." @@ -74710,11 +76710,11 @@ msgstr "" #: doc/classes/VisualServer.xml msgid "Use more detail vertically when computing shadow map." -msgstr "" +msgstr "Utilise plus de détails verticalement lors du calcul des ombres." #: doc/classes/VisualServer.xml msgid "Use more detail horizontally when computing shadow map." -msgstr "" +msgstr "Utilise plus de détails horizontalement lors du calcul des ombres." #: doc/classes/VisualServer.xml msgid "Use orthogonal shadow projection for directional light." @@ -74725,10 +76725,14 @@ msgstr "" #: doc/classes/VisualServer.xml msgid "Use 2 splits for shadow projection when using directional light." msgstr "" +"Utilise 2 divisions pour la projection des ombres pour les lumières " +"directionnelles." #: doc/classes/VisualServer.xml msgid "Use 4 splits for shadow projection when using directional light." msgstr "" +"Utilise 4 divisions pour la projection des ombres pour les lumières " +"directionnelles." #: doc/classes/VisualServer.xml msgid "" @@ -74772,6 +76776,8 @@ msgid "" "The viewport is cleared once, then the clear mode is set to [constant " "VIEWPORT_CLEAR_NEVER]." msgstr "" +"La fenêtre d'affichage sera effacée une seule fois, puis passera en mode " +"[constant VIEWPORT_CLEAR_NEVER]." #: doc/classes/VisualServer.xml msgid "Multisample antialiasing is disabled." @@ -74942,14 +76948,14 @@ msgid "" msgstr "" #: doc/classes/VisualServer.xml -#, fuzzy msgid "Allows the instance to be used in baked lighting." -msgstr "" -"Autorise une instance à pouvoir être utilisé pour le baking des lumières." +msgstr "Autorise l'instance à être utilisée pour le baking des lumières." #: doc/classes/VisualServer.xml msgid "When set, manually requests to draw geometry on next frame." msgstr "" +"Quand définit, demande manuellement l'affichage des géométries lors de la " +"trame suivante." #: doc/classes/VisualServer.xml msgid "Represents the size of the [enum InstanceFlags] enum." @@ -75034,15 +77040,15 @@ msgstr "Utiliser le filtre PCF13 pour lisser les ombres des canevas." #: doc/classes/VisualServer.xml msgid "Culling of the canvas occluder is disabled." -msgstr "" +msgstr "Le culling de l'occulteur du canevas est désactivé." #: doc/classes/VisualServer.xml msgid "Culling of the canvas occluder is clockwise." -msgstr "" +msgstr "Le culling de l'occulteur du canevas est dans le sens horaire." #: doc/classes/VisualServer.xml msgid "Culling of the canvas occluder is counterclockwise." -msgstr "" +msgstr "Le culling de l'occulteur du canevas est dans le sens anti-horaire." #: doc/classes/VisualServer.xml msgid "The amount of objects in the frame." @@ -75140,6 +77146,8 @@ msgid "" "Reflection probe will update each frame. This mode is necessary to capture " "moving objects." msgstr "" +"La sonde de réfléchissement sera mise à jour à chaque trame. Ce mode est " +"nécessaire pour capturer les objets se déplaçant." #: doc/classes/VisualServer.xml msgid "Draw particles in the order that they appear in the particles array." @@ -75181,6 +77189,8 @@ msgid "" "Do not clear the background, use whatever was rendered last frame as the " "background." msgstr "" +"Ne pas nettoyer l'arrière-plan, et utilise ce qui a été rendu lors de trame " +"précédente pour l'arrière-plan." #: doc/classes/VisualServer.xml msgid "Represents the size of the [enum EnvironmentBG] enum." @@ -75199,10 +77209,12 @@ msgstr "Utiliser une qualité de flou médium." #: doc/classes/VisualServer.xml msgid "Used highest blur quality. Looks the best, but is the slowest." msgstr "" +"Le meilleur niveau de qualité de flou. Apparait comme le meilleur, mais " +"c'est aussi le plus lent." #: doc/classes/VisualServer.xml msgid "Add the effect of the glow on top of the scene." -msgstr "" +msgstr "Ajoute un effet de lueur sur la scène." #: doc/classes/VisualServer.xml msgid "" @@ -75341,6 +77353,8 @@ msgid "" "Returns the shader node instance with specified [code]type[/code] and " "[code]id[/code]." msgstr "" +"Retourne l'instance de nÅ“ud de shader avec le [code]type[/code] et " +"l'identifiant [code]id[/code] spécifiés." #: doc/classes/VisualShader.xml msgid "Returns the list of connected nodes with the specified type." @@ -75358,6 +77372,8 @@ msgstr "Retourne la position du nÅ“ud spécifié dans le graphique du nuanceur." msgid "" "Returns [code]true[/code] if the specified node and port connection exist." msgstr "" +"Retourne [code]true[/code] si le nÅ“ud et le port de connexion spécifiés " +"existent." #: doc/classes/VisualShader.xml msgid "Removes the specified node from the shader." @@ -75488,7 +77504,7 @@ msgstr "" #: doc/classes/VisualShaderNodeBooleanConstant.xml msgid "A boolean constant which represents a state of this node." -msgstr "" +msgstr "Un booléen constant qui représente l'état de ce nÅ“ud." #: doc/classes/VisualShaderNodeBooleanUniform.xml msgid "A boolean uniform to be used within the visual shader graph." @@ -75530,7 +77546,7 @@ msgstr "" #: doc/classes/VisualShaderNodeColorConstant.xml msgid "A [Color] constant which represents a state of this node." -msgstr "" +msgstr "Une [Color] constante qui représente l'état de ce nÅ“ud." #: doc/classes/VisualShaderNodeColorFunc.xml msgid "A [Color] function to be used within the visual shader graph." @@ -75541,11 +77557,15 @@ msgid "" "Accept a [Color] to the input port and transform it according to [member " "function]." msgstr "" +"Accepte une [Color] pour le port d'entrée et la transforme en fonction de " +"[member function]." #: doc/classes/VisualShaderNodeColorFunc.xml msgid "" "A function to be applied to the input color. See [enum Function] for options." msgstr "" +"Une fonction à appliquer à la couleur d'entrée. Voir [enum Function] pour " +"les options." #: doc/classes/VisualShaderNodeColorFunc.xml msgid "" @@ -75558,6 +77578,14 @@ msgid "" "return vec3(max3, max3, max3);\n" "[/codeblock]" msgstr "" +"Convertit une couleur en niveau de gris à partir de la formule suivante :\n" +"[codeblock]\n" +"vec3 c = input;\n" +"float max1 = max(c.r, c.g);\n" +"float max2 = max(max1, c.b);\n" +"float max3 = max(max1, max2);\n" +"return vec3(max3, max3, max3);\n" +"[/codeblock]" #: doc/classes/VisualShaderNodeColorFunc.xml msgid "" @@ -75570,6 +77598,14 @@ msgid "" "return vec3(r, g, b);\n" "[/codeblock]" msgstr "" +"Applique un effet sépia à partir de la formule suivante :\n" +"[codeblock]\n" +"vec3 c = input;\n" +"float r = (c.r * 0.393) + (c.g * 0.769) + (c.b * 0.189);\n" +"float g = (c.r * 0.349) + (c.g * 0.686) + (c.b * 0.168);\n" +"float b = (c.r * 0.272) + (c.g * 0.534) + (c.b * 0.131);\n" +"return vec3(r, g, b);\n" +"[/codeblock]" #: doc/classes/VisualShaderNodeColorOp.xml msgid "A [Color] operator to be used within the visual shader graph." @@ -75609,6 +77645,10 @@ msgid "" "result = min(a, b);\n" "[/codeblock]" msgstr "" +"Produit un effet d'assombrissement à partir de la formule suivante :\n" +"[codeblock]\n" +"result = min(a, b);\n" +"[/codeblock]" #: doc/classes/VisualShaderNodeColorOp.xml msgid "" @@ -75617,6 +77657,10 @@ msgid "" "result = max(a, b);\n" "[/codeblock]" msgstr "" +"Produit un effet d'éclaircissement à partir de la formule suivante :\n" +"[codeblock]\n" +"result = max(a, b);\n" +"[/codeblock]" #: doc/classes/VisualShaderNodeColorOp.xml msgid "" @@ -75708,6 +77752,8 @@ msgid "" "Extra condition which is applied if [member type] is set to [constant " "CTYPE_VECTOR]." msgstr "" +"Une condition supplémentaire qui sera appliquée si [member type] est à " +"[constant CTYPE_VECTOR]." #: doc/classes/VisualShaderNodeCompare.xml msgid "A comparison function. See [enum Function] for options." @@ -76185,6 +78231,9 @@ msgid "" "Returns a [String] description of the output ports as a colon-separated list " "using the format [code]id,type,name;[/code] (see [method add_output_port])." msgstr "" +"Retourne une [String] de description des ports sortants sous forme de liste " +"séparée par une virgule avec le format [code]identifiant,type,nom;[/code] " +"(voir [method add_output_port])." #: doc/classes/VisualShaderNodeGroupBase.xml msgid "Returns [code]true[/code] if the specified input port exists." @@ -76250,7 +78299,7 @@ msgstr "" #: doc/classes/VisualShaderNodeGroupBase.xml msgid "The size of the node in the visual shader graph." -msgstr "" +msgstr "La taille du nÅ“ud dans le graphe du visual shader." #: doc/classes/VisualShaderNodeInput.xml msgid "" @@ -76342,12 +78391,13 @@ msgstr "" #: doc/classes/VisualShaderNodeScalarDerivativeFunc.xml msgid "The derivative type. See [enum Function] for options." -msgstr "" +msgstr "Le type de dérivation. Voir [enum Function] pour les options.." #: doc/classes/VisualShaderNodeScalarDerivativeFunc.xml #: doc/classes/VisualShaderNodeVectorDerivativeFunc.xml msgid "Sum of absolute derivative in [code]x[/code] and [code]y[/code]." msgstr "" +"La somme d'une dérivation absolue dans [code]x[/code] et [code]y[/code]." #: doc/classes/VisualShaderNodeScalarDerivativeFunc.xml #: doc/classes/VisualShaderNodeVectorDerivativeFunc.xml @@ -76363,6 +78413,8 @@ msgstr "Dérive selon [code]y[/code] par différenciation locale." msgid "" "Linearly interpolates between two scalars within the visual shader graph." msgstr "" +"Produit une interpolation linéaire entre deux scalaires dans le graphe du " +"visual shader." #: doc/classes/VisualShaderNodeScalarInterp.xml msgid "Translates to [code]mix(a, b, weight)[/code] in the shader language." @@ -76391,6 +78443,8 @@ msgid "" "Returns an associated scalar if the provided boolean value is [code]true[/" "code] or [code]false[/code]." msgstr "" +"Retourne le scalaire associé si le booléen donné est [code]true[/code] ou " +"[code]false[/code]." #: doc/classes/VisualShaderNodeScalarUniform.xml msgid "" @@ -76447,6 +78501,8 @@ msgid "" "Returns an associated vector if the provided boolean value is [code]true[/" "code] or [code]false[/code]." msgstr "" +"Retourne le vecteur associé si le booléen donné est [code]true[/code] ou " +"[code]false[/code]." #: doc/classes/VisualShaderNodeTexture.xml msgid "Performs a texture lookup within the visual shader graph." @@ -76747,7 +78803,7 @@ msgstr "Un [Vector3] constant à utiliser dans le graphe de shader visuel." #: doc/classes/VisualShaderNodeVec3Constant.xml msgid "A constant [Vector3], which can be used as an input node." -msgstr "" +msgstr "Un [Vector3] constant, qui peut être utilisé comme un nÅ“ud d'entrée." #: doc/classes/VisualShaderNodeVec3Constant.xml msgid "A [Vector3] constant which represents the state of this node." @@ -76775,6 +78831,8 @@ msgstr "" #: doc/classes/VisualShaderNodeVectorCompose.xml msgid "Composes a [Vector3] from three scalars within the visual shader graph." msgstr "" +"Construit un [Vector3] à partir de trois scalaires dans le graphe de visual " +"shader." #: doc/classes/VisualShaderNodeVectorCompose.xml msgid "" @@ -76802,7 +78860,7 @@ msgstr "" #: doc/classes/VisualShaderNodeVectorDerivativeFunc.xml msgid "A derivative type. See [enum Function] for options." -msgstr "" +msgstr "Un type de dérivation. Voir [enum Function] pour les options.." #: doc/classes/VisualShaderNodeVectorDistance.xml msgid "" @@ -76823,6 +78881,8 @@ msgstr "" #: doc/classes/VisualShaderNodeVectorFunc.xml msgid "A vector function to be used within the visual shader graph." msgstr "" +"Une fonction vectorielle qui peut être utilisée dans le graphe de visual " +"shader." #: doc/classes/VisualShaderNodeVectorFunc.xml msgid "A visual shader node able to perform different functions using vectors." @@ -77009,6 +79069,7 @@ msgstr "Sera traduit en [code]length(p0)[/code] dans le code du shader." #: doc/classes/VisualShaderNodeVectorOp.xml msgid "A vector operator to be used within the visual shader graph." msgstr "" +"Un opérateur vectoriel qui peut être utilisé dans le graphe de visual shader." #: doc/classes/VisualShaderNodeVectorOp.xml msgid "" @@ -77502,6 +79563,10 @@ msgid "" "[b]Note:[/b] You cannot reuse this object for a new connection unless you " "call [method initialize]." msgstr "" +"Ferme la connexion de ce pair et tous les canaux de données lui étant " +"associés.\n" +"[b]Note :[/b] Vous ne pouvez pas réutiliser cet objet pour une nouvelle " +"connexion sans appeler [method initialize]." #: modules/webrtc/doc_classes/WebRTCPeerConnection.xml msgid "" @@ -77540,6 +79605,43 @@ msgid "" "[b]Note:[/b] You must keep a reference to channels created this way, or it " "will be closed." msgstr "" +"Retourne un nouveau [WebRTCDataChannel] (ou [code]null[/code] en cas " +"d'échec) avec le [code]label[/code] spécifié et avec le dictionnaire de " +"configuration [code]options[/code] facultatif. Cette méthode ne peut être " +"uniquement appelée quand la connexion est à l'état [constant STATE_NEW].\n" +"Il y a deux façon de créer un canal de données fonctionnant : soit appeler " +"[method create_data_channel] sur seulement un des pairs et écouter [signal " +"data_channel_received] sur les autres, ou alors appeler [method " +"create_data_channel] sur les deux pairs, avec les mêmes valeurs, et avec " +"l'option [code]negotiated[/code] à [code]true[/code].\n" +"Les [code]options[/code] valides sont :\n" +"[codeblock]\n" +"{\n" +" \"negotiated\": true, # Quand à \"true\" (désactivé par défaut), le " +"canal est négocié en dehors de la bande. \"id\" doit aussi être défini. " +"\"data_channel_received\" ne sera pas appelé.\n" +" \"id\": 1, # Quand \"negotiated\" est \"true\", cette valeur doit aussi " +"être définie avec la même valeur pour les deux pairs.\n" +"\n" +" # Seulement un des deux de maxRetransmits ou maxPacketLifeTime peut être " +"spécifié. Ils font que le canal est moins fiable (mais meilleur pour le " +"temps réel).\n" +" \"maxRetransmits\": 1, # Spécifie le nombre maximal de tentative que le " +"pair fera pour renvoyer les paquets qui n'ont pas été acceptés.\n" +" \"maxPacketLifeTime\": 100, # Spécifie le temps maximal avant " +"d'abandonner le fait de renvoyer les paquets qui n'ont pas été acceptés (in " +"milliseconds).\n" +" \"ordered\": true, # Quand un mode non fiable (que soit " +"\"maxRetransmits\" ou \"maxPacketLifetime\" est défini), " +"\"ordered\" (\"true\" par défaut) spécifie si l'ordre des paquets doit être " +"respecté.\n" +"\n" +" \"protocol\": \"my-custom-protocol\", # Un sous-protocol personnalisé " +"pour ce canal.\n" +"}\n" +"[/codeblock]\n" +"[b]Note :[/b] Vous devez garder une référence aux canaux créés de cette " +"manière, ou alors ils sont fermés." #: modules/webrtc/doc_classes/WebRTCPeerConnection.xml msgid "" @@ -77586,6 +79688,28 @@ msgid "" "}\n" "[/codeblock]" msgstr "" +"Ré-initialise la connection de ce pair, fermant une précédente connexion " +"active, et retourne à l'état [constant STATE_NEW]. Un dictionnaire de " +"[code]options[/code] peut être passé pour configurer la connexion du pair.\n" +"Les [code]options[/code] valides sont :\n" +"[codeblock]\n" +"{\n" +" \"iceServers\": [\n" +" {\n" +" \"urls\": [ \"stun:stun.example.com:3478\" ], # Un ou plusieurs " +"serveurs STUN.\n" +" },\n" +" {\n" +" \"urls\": [ \"turn:turn.example.com:3478\" ], # Un ou plusieurs " +"serveurs TURN.\n" +" \"username\": \"a_username\", # Le nom d'utilisateur facultatif " +"pour le serveur TURN.\n" +" \"credential\": \"a_password\", # Le mot de passe facultatif " +"pour le serveur TURN.\n" +" }\n" +" ]\n" +"}\n" +"[/codeblock]" #: modules/webrtc/doc_classes/WebRTCPeerConnection.xml msgid "" @@ -78630,6 +80754,8 @@ msgstr "" #: doc/classes/XMLParser.xml msgid "Gets the current line in the parsed file (currently not implemented)." msgstr "" +"Retourne l'actuelle ligne du fichier interprété (actuellement non " +"implémenté)." #: doc/classes/XMLParser.xml msgid "" diff --git a/doc/translations/gl.po b/doc/translations/gl.po index ae1ecf4fb4..65371b9f89 100644 --- a/doc/translations/gl.po +++ b/doc/translations/gl.po @@ -935,11 +935,12 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Random range, any floating point value between [code]from[/code] and " -"[code]to[/code].\n" +"Returns a random floating point value between [code]from[/code] and " +"[code]to[/code] (both endpoints inclusive).\n" "[codeblock]\n" "prints(rand_range(0, 1), rand_range(0, 1)) # Prints e.g. 0.135591 0.405263\n" -"[/codeblock]" +"[/codeblock]\n" +"[b]Note:[/b] This is equivalent to [code]randf() * (to - from) + from[/code]." msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml @@ -983,37 +984,36 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Returns an array with the given range. Range can be 1 argument [code]N[/" -"code] (0 to [code]N[/code] - 1), two arguments ([code]initial[/code], " -"[code]final - 1[/code]) or three arguments ([code]initial[/code], " -"[code]final - 1[/code], [code]increment[/code]). Returns an empty array if " -"the range isn't valid (e.g. [code]range(2, 5, -1)[/code] or [code]range(5, " -"5, 1)[/code]).\n" -"Returns an array with the given range. [code]range()[/code] can have 1 " -"argument N ([code]0[/code] to [code]N - 1[/code]), two arguments " -"([code]initial[/code], [code]final - 1[/code]) or three arguments " -"([code]initial[/code], [code]final - 1[/code], [code]increment[/code]). " -"[code]increment[/code] can be negative. If [code]increment[/code] is " -"negative, [code]final - 1[/code] will become [code]final + 1[/code]. Also, " -"the initial value must be greater than the final value for the loop to run.\n" -"[codeblock]\n" -"print(range(4))\n" -"print(range(2, 5))\n" -"print(range(0, 6, 2))\n" -"[/codeblock]\n" -"Output:\n" +"Returns an array with the given range. [method range] can be called in three " +"ways:\n" +"[code]range(n: int)[/code]: Starts from 0, increases by steps of 1, and " +"stops [i]before[/i] [code]n[/code]. The argument [code]n[/code] is " +"[b]exclusive[/b].\n" +"[code]range(b: int, n: int)[/code]: Starts from [code]b[/code], increases by " +"steps of 1, and stops [i]before[/i] [code]n[/code]. The arguments [code]b[/" +"code] and [code]n[/code] are [b]inclusive[/b] and [b]exclusive[/b], " +"respectively.\n" +"[code]range(b: int, n: int, s: int)[/code]: Starts from [code]b[/code], " +"increases/decreases by steps of [code]s[/code], and stops [i]before[/i] " +"[code]n[/code]. The arguments [code]b[/code] and [code]n[/code] are " +"[b]inclusive[/b] and [b]exclusive[/b], respectively. The argument [code]s[/" +"code] [b]can[/b] be negative, but not [code]0[/code]. If [code]s[/code] is " +"[code]0[/code], an error message is printed.\n" +"[method range] converts all arguments to [int] before processing.\n" +"[b]Note:[/b] Returns an empty array if no value meets the value constraint " +"(e.g. [code]range(2, 5, -1)[/code] or [code]range(5, 5, 1)[/code]).\n" +"Examples:\n" "[codeblock]\n" -"[0, 1, 2, 3]\n" -"[2, 3, 4]\n" -"[0, 2, 4]\n" +"print(range(4)) # Prints [0, 1, 2, 3]\n" +"print(range(2, 5)) # Prints [2, 3, 4]\n" +"print(range(0, 6, 2)) # Prints [0, 2, 4]\n" +"print(range(4, 1, -1)) # Prints [4, 3, 2]\n" "[/codeblock]\n" "To iterate over an [Array] backwards, use:\n" "[codeblock]\n" "var array = [3, 6, 9]\n" -"var i := array.size() - 1\n" -"while i >= 0:\n" -" print(array[i])\n" -" i -= 1\n" +"for i in range(array.size(), 0, -1):\n" +" print(array[i - 1])\n" "[/codeblock]\n" "Output:\n" "[codeblock]\n" @@ -4108,17 +4108,24 @@ msgid "Maximum value for the mode enum." msgstr "" #: doc/classes/AnimatedSprite.xml -msgid "Sprite node that can use multiple textures for animation." +msgid "" +"Sprite node that contains multiple textures as frames to play for animation." msgstr "" #: doc/classes/AnimatedSprite.xml msgid "" -"Animations are created using a [SpriteFrames] resource, which can be " -"configured in the editor via the SpriteFrames panel.\n" -"[b]Note:[/b] You can associate a set of normal maps by creating additional " -"[SpriteFrames] resources with a [code]_normal[/code] suffix. For example, " -"having 2 [SpriteFrames] resources [code]run[/code] and [code]run_normal[/" -"code] will make it so the [code]run[/code] animation uses the normal map." +"[AnimatedSprite] is similar to the [Sprite] node, except it carries multiple " +"textures as animation frames. Animations are created using a [SpriteFrames] " +"resource, which allows you to import image files (or a folder containing " +"said files) to provide the animation frames for the sprite. The " +"[SpriteFrames] resource can be configured in the editor via the SpriteFrames " +"bottom panel.\n" +"[b]Note:[/b] You can associate a set of normal or specular maps by creating " +"additional [SpriteFrames] resources with a [code]_normal[/code] or " +"[code]_specular[/code] suffix. For example, having 3 [SpriteFrames] " +"resources [code]run[/code], [code]run_normal[/code], and [code]run_specular[/" +"code] will make it so the [code]run[/code] animation uses normal and " +"specular maps." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml @@ -4146,9 +4153,9 @@ msgstr "" msgid "Stops the current animation (does not reset the frame counter)." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml +#: doc/classes/AnimatedSprite.xml msgid "" -"The current animation from the [code]frames[/code] resource. If this value " +"The current animation from the [member frames] resource. If this value " "changes, the [code]frame[/code] counter is reset." msgstr "" @@ -4172,8 +4179,11 @@ msgstr "" msgid "The displayed animation frame's index." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml -msgid "The [SpriteFrames] resource containing the animation(s)." +#: doc/classes/AnimatedSprite.xml +msgid "" +"The [SpriteFrames] resource containing the animation(s). Allows you the " +"option to load, edit, clear, make unique and save the states of the " +"[SpriteFrames] resource." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/Sprite.xml @@ -4225,6 +4235,16 @@ msgid "" "provided, the current animation is played." msgstr "" +#: doc/classes/AnimatedSprite3D.xml +msgid "" +"The current animation from the [code]frames[/code] resource. If this value " +"changes, the [code]frame[/code] counter is reset." +msgstr "" + +#: doc/classes/AnimatedSprite3D.xml +msgid "The [SpriteFrames] resource containing the animation(s)." +msgstr "" + #: doc/classes/AnimatedTexture.xml msgid "Proxy texture for simple frame-based animations." msgstr "" @@ -4740,11 +4760,11 @@ msgstr "" msgid "No interpolation (nearest value)." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Linear interpolation." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Cubic interpolation." msgstr "" @@ -5779,7 +5799,10 @@ msgid "" "Seeks the animation to the [code]seconds[/code] point in time (in seconds). " "If [code]update[/code] is [code]true[/code], the animation updates too, " "otherwise it updates at process time. Events between the current frame and " -"[code]seconds[/code] are skipped." +"[code]seconds[/code] are skipped.\n" +"[b]Note:[/b] Seeking to the end of the animation doesn't emit [signal " +"animation_finished]. If you want to skip animation and emit the signal, use " +"[method advance]." msgstr "" #: doc/classes/AnimationPlayer.xml @@ -6969,7 +6992,10 @@ msgid "" "[code]0[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "Returns the number of times an element is in the array." msgstr "" @@ -7014,10 +7040,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array for a value and returns its index or [code]-1[/code] if " -"not found. Optionally, the initial search index can be passed." +"not found. Optionally, the initial search index can be passed. Returns " +"[code]-1[/code] if [code]from[/code] is out of bounds." msgstr "" #: doc/classes/Array.xml @@ -7155,11 +7185,15 @@ msgid "" "[code]null[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array in reverse order. Optionally, a start search index can be " "passed. If negative, the start index is considered relative to the end of " -"the array." +"the array. If the adjusted start index is out of bounds, this method " +"searches from the end of the array." msgstr "" #: doc/classes/Array.xml @@ -8294,7 +8328,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -8516,7 +8550,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -11627,17 +11661,17 @@ msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a normal vector in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a 3D position in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml @@ -13886,7 +13920,9 @@ msgstr "" #: doc/classes/CollisionPolygon2D.xml msgid "" "If [code]true[/code], only edges that face up, relative to " -"[CollisionPolygon2D]'s rotation, will collide with other objects." +"[CollisionPolygon2D]'s rotation, will collide with other objects.\n" +"[b]Note:[/b] This property has no effect if this [CollisionPolygon2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionPolygon2D.xml @@ -13982,7 +14018,9 @@ msgstr "" #: doc/classes/CollisionShape2D.xml msgid "" "Sets whether this collision shape should only detect collision on one side " -"(top or bottom)." +"(top or bottom).\n" +"[b]Note:[/b] This property has no effect if this [CollisionShape2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionShape2D.xml @@ -22388,6 +22426,10 @@ msgid "" "same behavior." msgstr "" +#: doc/classes/EditorSpinSlider.xml +msgid "If [code]true[/code], the slider is hidden." +msgstr "" + #: doc/classes/EditorVCSInterface.xml msgid "" "Version Control System (VCS) interface, which reads and writes to the local " @@ -25969,9 +26011,22 @@ msgid "Gradient's colors returned as a [PoolColorArray]." msgstr "" #: doc/classes/Gradient.xml +msgid "" +"Defines how the colors between points of the gradient are interpolated. See " +"[enum InterpolationMode] for available modes." +msgstr "" + +#: doc/classes/Gradient.xml msgid "Gradient's offsets returned as a [PoolRealArray]." msgstr "" +#: doc/classes/Gradient.xml +msgid "" +"Constant interpolation, color changes abruptly at each point and stays " +"uniform between. This might cause visible aliasing when used for a gradient " +"texture in some cases." +msgstr "" + #: doc/classes/GradientTexture.xml msgid "Gradient-filled texture." msgstr "" @@ -34493,13 +34548,13 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used easing from [enum Tween.EaseType]. If not set, the " "default easing is used from the [SceneTreeTween] that contains this Tweener." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used transition from [enum Tween.TransitionType]. If not " "set, the default transition is used from the [SceneTreeTween] that contains " @@ -35205,6 +35260,12 @@ msgid "Creates the agent." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]agent[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" @@ -35268,6 +35329,12 @@ msgid "Create a new map." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation agents [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns the map cell size." msgstr "" @@ -35294,6 +35361,12 @@ msgid "Returns the navigation path to reach the destination from the origin." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation regions [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns [code]true[/code] if the map is active." msgstr "" @@ -35315,6 +35388,12 @@ msgid "Creates a new region." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]region[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the map for the region." msgstr "" @@ -35787,17 +35866,57 @@ msgid "Represents the size of the [enum SourceGeometryMode] enum." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "This class is responsible for creating and clearing navigation meshes." +msgid "Helper class for creating and clearing navigation meshes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml msgid "" -"Bakes the navigation mesh. This will allow you to use pathfinding with the " -"navigation system." +"This class is responsible for creating and clearing 3D navigation meshes " +"used as [NavigationMesh] resources inside [NavigationMeshInstance]. The " +"[NavigationMeshGenerator] has very limited to no use for 2D as the " +"navigation mesh baking process expects 3D node types and 3D source geometry " +"to parse.\n" +"The entire navigation mesh baking is best done in a separate thread as the " +"voxelization, collision tests and mesh optimization steps involved are very " +"performance and time hungry operations.\n" +"Navigation mesh baking happens in multiple steps and the result depends on " +"3D source geometry and properties of the [NavigationMesh] resource. In the " +"first step, starting from a root node and depending on [NavigationMesh] " +"properties all valid 3D source geometry nodes are collected from the " +"[SceneTree]. Second, all collected nodes are parsed for their relevant 3D " +"geometry data and a combined 3D mesh is build. Due to the many different " +"types of parsable objects, from normal [MeshInstance]s to [CSGShape]s or " +"various [CollisionObject]s, some operations to collect geometry data can " +"trigger [VisualServer] and [PhysicsServer] synchronizations. Server " +"synchronization can have a negative effect on baking time or framerate as it " +"often involves [Mutex] locking for thread security. Many parsable objects " +"and the continuous synchronization with other threaded Servers can increase " +"the baking time significantly. On the other hand only a few but very large " +"and complex objects will take some time to prepare for the Servers which can " +"noticeably stall the next frame render. As a general rule the total amount " +"of parsable objects and their individual size and complexity should be " +"balanced to avoid framerate issues or very long baking times. The combined " +"mesh is then passed to the Recast Navigation Object to test the source " +"geometry for walkable terrain suitable to [NavigationMesh] agent properties " +"by creating a voxel world around the meshes bounding area.\n" +"The finalized navigation mesh is then returned and stored inside the " +"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes." +msgstr "" + +#: doc/classes/NavigationMeshGenerator.xml +msgid "" +"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " +"nodes under the provided [code]root_node[/code] or a specific group of nodes " +"for potential source geometry. The parse behavior can be controlled with the " +"[member NavigationMesh.geometry/parsed_geometry_type] and [member " +"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[NavigationMesh] resource." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "Clears the navigation mesh." +msgid "" +"Removes all polygons and vertices from the provided [code]nav_mesh[/code] " +"resource." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -35818,7 +35937,10 @@ msgid "" "thread is useful because navigation baking is not a cheap operation. When it " "is completed, it automatically sets the new [NavigationMesh]. Please note " "that baking on separate thread may be very slow if geometry is parsed from " -"meshes as async access to each mesh involves heavy synchronization." +"meshes as async access to each mesh involves heavy synchronization. Also, " +"please note that baking on a separate thread is automatically disabled on " +"operating systems that cannot use threads (such as HTML5 with threads " +"disabled)." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -35864,6 +35986,10 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle.xml +msgid "Returns the [RID] of this obstacle on the [NavigationServer]." +msgstr "" + +#: doc/classes/NavigationObstacle.xml msgid "" "Sets the [Navigation] node used by the obstacle. Useful when you don't want " "to make the obstacle a child of a [Navigation] node." @@ -35900,6 +36026,10 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle2D.xml +msgid "Returns the [RID] of this obstacle on the [Navigation2DServer]." +msgstr "" + +#: doc/classes/NavigationObstacle2D.xml msgid "" "Sets the [Navigation2D] node used by the obstacle. Useful when you don't " "want to make the obstacle a child of a [Navigation2D] node." @@ -37084,7 +37214,7 @@ msgstr "" #: doc/classes/Node.xml msgid "" "Returns [code]true[/code] if the physics interpolated flag is set for this " -"Node (see [method set_physics_interpolated]).\n" +"Node (see [member physics_interpolation_mode]).\n" "[b]Note:[/b] Interpolation will only be active is both the flag is set " "[b]and[/b] physics interpolation is enabled within the [SceneTree]. This can " "be tested using [method is_physics_interpolated_and_enabled]." @@ -37092,8 +37222,8 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Returns [code]true[/code] if physics interpolation is enabled (see [method " -"set_physics_interpolated]) [b]and[/b] enabled in the [SceneTree].\n" +"Returns [code]true[/code] if physics interpolation is enabled (see [member " +"physics_interpolation_mode]) [b]and[/b] enabled in the [SceneTree].\n" "This is a convenience version of [method is_physics_interpolated] that also " "checks whether physics interpolation is enabled globally.\n" "See [member SceneTree.physics_interpolation] and [member ProjectSettings." @@ -37387,14 +37517,6 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Enables or disables physics interpolation per node, offering a finer grain " -"of control than turning physics interpolation on and off globally.\n" -"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " -"interpolation can sometimes give superior results." -msgstr "" - -#: doc/classes/Node.xml -msgid "" "Enables or disables physics (i.e. fixed framerate) processing. When a node " "is being processed, it will receive a [constant " "NOTIFICATION_PHYSICS_PROCESS] at a fixed (usually 60 FPS, see [member Engine." @@ -37527,6 +37649,15 @@ msgstr "" #: doc/classes/Node.xml msgid "" +"Allows enabling or disabling physics interpolation per node, offering a " +"finer grain of control than turning physics interpolation on and off " +"globally.\n" +"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " +"interpolation can sometimes give superior results." +msgstr "" + +#: doc/classes/Node.xml +msgid "" "The node's priority in the execution order of the enabled processing " "callbacks (i.e. [constant NOTIFICATION_PROCESS], [constant " "NOTIFICATION_PHYSICS_PROCESS] and their internal counterparts). Nodes whose " @@ -37688,6 +37819,24 @@ msgid "Continue to process regardless of the [SceneTree] pause state." msgstr "" #: doc/classes/Node.xml +msgid "" +"Inherits physics interpolation mode from the node's parent. For the root " +"node, it is equivalent to [constant PHYSICS_INTERPOLATION_MODE_ON]. Default." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn off physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn on physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml msgid "Duplicate the node's signals." msgstr "" @@ -38928,7 +39077,7 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" -"Returns the ID of the selected item, or [code]0[/code] if no item is " +"Returns the ID of the selected item, or [code]-1[/code] if no item is " "selected." msgstr "" @@ -38950,7 +39099,8 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" "Selects an item by index and makes it the current item. This will work even " -"if the item is disabled." +"if the item is disabled.\n" +"Passing [code]-1[/code] as the index deselects any currently selected item." msgstr "" #: doc/classes/OptionButton.xml @@ -44277,6 +44427,15 @@ msgid "" "should always be preferred." msgstr "" +#: doc/classes/PoolByteArray.xml doc/classes/PoolColorArray.xml +#: doc/classes/PoolIntArray.xml doc/classes/PoolRealArray.xml +#: doc/classes/PoolStringArray.xml doc/classes/PoolVector2Array.xml +#: doc/classes/PoolVector3Array.xml +msgid "" +"Returns [code]true[/code] if the array contains the given value.\n" +"[b]Note:[/b] This is equivalent to using the [code]in[/code] operator." +msgstr "" + #: doc/classes/PoolByteArray.xml msgid "" "Returns a hexadecimal representation of this array as a [String].\n" @@ -45070,6 +45229,10 @@ msgid "[Font] used for the menu items." msgstr "" #: doc/classes/PopupMenu.xml +msgid "[Font] used for the labeled separator." +msgstr "" + +#: doc/classes/PopupMenu.xml msgid "[Texture] icon for the checked checkbox items." msgstr "" @@ -48515,19 +48678,6 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used easing from [enum Tween.EaseType]. If not set, the " -"default easing is used from the [Tween] that contains this Tweener." -msgstr "" - -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used transition from [enum Tween.TransitionType]. If not " -"set, the default transition is used from the [Tween] that contains this " -"Tweener." -msgstr "" - #: doc/classes/ProximityGroup.xml msgid "General-purpose 3D proximity detection node." msgstr "" @@ -53357,8 +53507,15 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape touches another. If there are " -"no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape touches another.\n" +"If there are no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the shape to check collisions with " "([code]with_shape[/code]), and the transformation matrix of that shape " @@ -53379,8 +53536,16 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape would touch another, if a " -"given movement was applied. If there are no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape would touch another, " +"if a given movement was applied.\n" +"If there would be no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the movement to test on this shape " "([code]local_motion[/code]), the shape to check collisions with " diff --git a/doc/translations/hi.po b/doc/translations/hi.po index 7d82f6cba4..5131f43244 100644 --- a/doc/translations/hi.po +++ b/doc/translations/hi.po @@ -934,11 +934,12 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Random range, any floating point value between [code]from[/code] and " -"[code]to[/code].\n" +"Returns a random floating point value between [code]from[/code] and " +"[code]to[/code] (both endpoints inclusive).\n" "[codeblock]\n" "prints(rand_range(0, 1), rand_range(0, 1)) # Prints e.g. 0.135591 0.405263\n" -"[/codeblock]" +"[/codeblock]\n" +"[b]Note:[/b] This is equivalent to [code]randf() * (to - from) + from[/code]." msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml @@ -982,37 +983,36 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Returns an array with the given range. Range can be 1 argument [code]N[/" -"code] (0 to [code]N[/code] - 1), two arguments ([code]initial[/code], " -"[code]final - 1[/code]) or three arguments ([code]initial[/code], " -"[code]final - 1[/code], [code]increment[/code]). Returns an empty array if " -"the range isn't valid (e.g. [code]range(2, 5, -1)[/code] or [code]range(5, " -"5, 1)[/code]).\n" -"Returns an array with the given range. [code]range()[/code] can have 1 " -"argument N ([code]0[/code] to [code]N - 1[/code]), two arguments " -"([code]initial[/code], [code]final - 1[/code]) or three arguments " -"([code]initial[/code], [code]final - 1[/code], [code]increment[/code]). " -"[code]increment[/code] can be negative. If [code]increment[/code] is " -"negative, [code]final - 1[/code] will become [code]final + 1[/code]. Also, " -"the initial value must be greater than the final value for the loop to run.\n" -"[codeblock]\n" -"print(range(4))\n" -"print(range(2, 5))\n" -"print(range(0, 6, 2))\n" -"[/codeblock]\n" -"Output:\n" +"Returns an array with the given range. [method range] can be called in three " +"ways:\n" +"[code]range(n: int)[/code]: Starts from 0, increases by steps of 1, and " +"stops [i]before[/i] [code]n[/code]. The argument [code]n[/code] is " +"[b]exclusive[/b].\n" +"[code]range(b: int, n: int)[/code]: Starts from [code]b[/code], increases by " +"steps of 1, and stops [i]before[/i] [code]n[/code]. The arguments [code]b[/" +"code] and [code]n[/code] are [b]inclusive[/b] and [b]exclusive[/b], " +"respectively.\n" +"[code]range(b: int, n: int, s: int)[/code]: Starts from [code]b[/code], " +"increases/decreases by steps of [code]s[/code], and stops [i]before[/i] " +"[code]n[/code]. The arguments [code]b[/code] and [code]n[/code] are " +"[b]inclusive[/b] and [b]exclusive[/b], respectively. The argument [code]s[/" +"code] [b]can[/b] be negative, but not [code]0[/code]. If [code]s[/code] is " +"[code]0[/code], an error message is printed.\n" +"[method range] converts all arguments to [int] before processing.\n" +"[b]Note:[/b] Returns an empty array if no value meets the value constraint " +"(e.g. [code]range(2, 5, -1)[/code] or [code]range(5, 5, 1)[/code]).\n" +"Examples:\n" "[codeblock]\n" -"[0, 1, 2, 3]\n" -"[2, 3, 4]\n" -"[0, 2, 4]\n" +"print(range(4)) # Prints [0, 1, 2, 3]\n" +"print(range(2, 5)) # Prints [2, 3, 4]\n" +"print(range(0, 6, 2)) # Prints [0, 2, 4]\n" +"print(range(4, 1, -1)) # Prints [4, 3, 2]\n" "[/codeblock]\n" "To iterate over an [Array] backwards, use:\n" "[codeblock]\n" "var array = [3, 6, 9]\n" -"var i := array.size() - 1\n" -"while i >= 0:\n" -" print(array[i])\n" -" i -= 1\n" +"for i in range(array.size(), 0, -1):\n" +" print(array[i - 1])\n" "[/codeblock]\n" "Output:\n" "[codeblock]\n" @@ -4107,17 +4107,24 @@ msgid "Maximum value for the mode enum." msgstr "" #: doc/classes/AnimatedSprite.xml -msgid "Sprite node that can use multiple textures for animation." +msgid "" +"Sprite node that contains multiple textures as frames to play for animation." msgstr "" #: doc/classes/AnimatedSprite.xml msgid "" -"Animations are created using a [SpriteFrames] resource, which can be " -"configured in the editor via the SpriteFrames panel.\n" -"[b]Note:[/b] You can associate a set of normal maps by creating additional " -"[SpriteFrames] resources with a [code]_normal[/code] suffix. For example, " -"having 2 [SpriteFrames] resources [code]run[/code] and [code]run_normal[/" -"code] will make it so the [code]run[/code] animation uses the normal map." +"[AnimatedSprite] is similar to the [Sprite] node, except it carries multiple " +"textures as animation frames. Animations are created using a [SpriteFrames] " +"resource, which allows you to import image files (or a folder containing " +"said files) to provide the animation frames for the sprite. The " +"[SpriteFrames] resource can be configured in the editor via the SpriteFrames " +"bottom panel.\n" +"[b]Note:[/b] You can associate a set of normal or specular maps by creating " +"additional [SpriteFrames] resources with a [code]_normal[/code] or " +"[code]_specular[/code] suffix. For example, having 3 [SpriteFrames] " +"resources [code]run[/code], [code]run_normal[/code], and [code]run_specular[/" +"code] will make it so the [code]run[/code] animation uses normal and " +"specular maps." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml @@ -4145,9 +4152,9 @@ msgstr "" msgid "Stops the current animation (does not reset the frame counter)." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml +#: doc/classes/AnimatedSprite.xml msgid "" -"The current animation from the [code]frames[/code] resource. If this value " +"The current animation from the [member frames] resource. If this value " "changes, the [code]frame[/code] counter is reset." msgstr "" @@ -4171,8 +4178,11 @@ msgstr "" msgid "The displayed animation frame's index." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml -msgid "The [SpriteFrames] resource containing the animation(s)." +#: doc/classes/AnimatedSprite.xml +msgid "" +"The [SpriteFrames] resource containing the animation(s). Allows you the " +"option to load, edit, clear, make unique and save the states of the " +"[SpriteFrames] resource." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/Sprite.xml @@ -4224,6 +4234,16 @@ msgid "" "provided, the current animation is played." msgstr "" +#: doc/classes/AnimatedSprite3D.xml +msgid "" +"The current animation from the [code]frames[/code] resource. If this value " +"changes, the [code]frame[/code] counter is reset." +msgstr "" + +#: doc/classes/AnimatedSprite3D.xml +msgid "The [SpriteFrames] resource containing the animation(s)." +msgstr "" + #: doc/classes/AnimatedTexture.xml msgid "Proxy texture for simple frame-based animations." msgstr "" @@ -4739,11 +4759,11 @@ msgstr "" msgid "No interpolation (nearest value)." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Linear interpolation." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Cubic interpolation." msgstr "" @@ -5778,7 +5798,10 @@ msgid "" "Seeks the animation to the [code]seconds[/code] point in time (in seconds). " "If [code]update[/code] is [code]true[/code], the animation updates too, " "otherwise it updates at process time. Events between the current frame and " -"[code]seconds[/code] are skipped." +"[code]seconds[/code] are skipped.\n" +"[b]Note:[/b] Seeking to the end of the animation doesn't emit [signal " +"animation_finished]. If you want to skip animation and emit the signal, use " +"[method advance]." msgstr "" #: doc/classes/AnimationPlayer.xml @@ -6968,7 +6991,10 @@ msgid "" "[code]0[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "Returns the number of times an element is in the array." msgstr "" @@ -7013,10 +7039,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array for a value and returns its index or [code]-1[/code] if " -"not found. Optionally, the initial search index can be passed." +"not found. Optionally, the initial search index can be passed. Returns " +"[code]-1[/code] if [code]from[/code] is out of bounds." msgstr "" #: doc/classes/Array.xml @@ -7154,11 +7184,15 @@ msgid "" "[code]null[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array in reverse order. Optionally, a start search index can be " "passed. If negative, the start index is considered relative to the end of " -"the array." +"the array. If the adjusted start index is out of bounds, this method " +"searches from the end of the array." msgstr "" #: doc/classes/Array.xml @@ -8293,7 +8327,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -8515,7 +8549,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -11626,17 +11660,17 @@ msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a normal vector in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a 3D position in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml @@ -13885,7 +13919,9 @@ msgstr "" #: doc/classes/CollisionPolygon2D.xml msgid "" "If [code]true[/code], only edges that face up, relative to " -"[CollisionPolygon2D]'s rotation, will collide with other objects." +"[CollisionPolygon2D]'s rotation, will collide with other objects.\n" +"[b]Note:[/b] This property has no effect if this [CollisionPolygon2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionPolygon2D.xml @@ -13981,7 +14017,9 @@ msgstr "" #: doc/classes/CollisionShape2D.xml msgid "" "Sets whether this collision shape should only detect collision on one side " -"(top or bottom)." +"(top or bottom).\n" +"[b]Note:[/b] This property has no effect if this [CollisionShape2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionShape2D.xml @@ -22387,6 +22425,10 @@ msgid "" "same behavior." msgstr "" +#: doc/classes/EditorSpinSlider.xml +msgid "If [code]true[/code], the slider is hidden." +msgstr "" + #: doc/classes/EditorVCSInterface.xml msgid "" "Version Control System (VCS) interface, which reads and writes to the local " @@ -25968,9 +26010,22 @@ msgid "Gradient's colors returned as a [PoolColorArray]." msgstr "" #: doc/classes/Gradient.xml +msgid "" +"Defines how the colors between points of the gradient are interpolated. See " +"[enum InterpolationMode] for available modes." +msgstr "" + +#: doc/classes/Gradient.xml msgid "Gradient's offsets returned as a [PoolRealArray]." msgstr "" +#: doc/classes/Gradient.xml +msgid "" +"Constant interpolation, color changes abruptly at each point and stays " +"uniform between. This might cause visible aliasing when used for a gradient " +"texture in some cases." +msgstr "" + #: doc/classes/GradientTexture.xml msgid "Gradient-filled texture." msgstr "" @@ -34492,13 +34547,13 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used easing from [enum Tween.EaseType]. If not set, the " "default easing is used from the [SceneTreeTween] that contains this Tweener." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used transition from [enum Tween.TransitionType]. If not " "set, the default transition is used from the [SceneTreeTween] that contains " @@ -35204,6 +35259,12 @@ msgid "Creates the agent." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]agent[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" @@ -35267,6 +35328,12 @@ msgid "Create a new map." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation agents [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns the map cell size." msgstr "" @@ -35293,6 +35360,12 @@ msgid "Returns the navigation path to reach the destination from the origin." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation regions [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns [code]true[/code] if the map is active." msgstr "" @@ -35314,6 +35387,12 @@ msgid "Creates a new region." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]region[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the map for the region." msgstr "" @@ -35786,17 +35865,57 @@ msgid "Represents the size of the [enum SourceGeometryMode] enum." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "This class is responsible for creating and clearing navigation meshes." +msgid "Helper class for creating and clearing navigation meshes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml msgid "" -"Bakes the navigation mesh. This will allow you to use pathfinding with the " -"navigation system." +"This class is responsible for creating and clearing 3D navigation meshes " +"used as [NavigationMesh] resources inside [NavigationMeshInstance]. The " +"[NavigationMeshGenerator] has very limited to no use for 2D as the " +"navigation mesh baking process expects 3D node types and 3D source geometry " +"to parse.\n" +"The entire navigation mesh baking is best done in a separate thread as the " +"voxelization, collision tests and mesh optimization steps involved are very " +"performance and time hungry operations.\n" +"Navigation mesh baking happens in multiple steps and the result depends on " +"3D source geometry and properties of the [NavigationMesh] resource. In the " +"first step, starting from a root node and depending on [NavigationMesh] " +"properties all valid 3D source geometry nodes are collected from the " +"[SceneTree]. Second, all collected nodes are parsed for their relevant 3D " +"geometry data and a combined 3D mesh is build. Due to the many different " +"types of parsable objects, from normal [MeshInstance]s to [CSGShape]s or " +"various [CollisionObject]s, some operations to collect geometry data can " +"trigger [VisualServer] and [PhysicsServer] synchronizations. Server " +"synchronization can have a negative effect on baking time or framerate as it " +"often involves [Mutex] locking for thread security. Many parsable objects " +"and the continuous synchronization with other threaded Servers can increase " +"the baking time significantly. On the other hand only a few but very large " +"and complex objects will take some time to prepare for the Servers which can " +"noticeably stall the next frame render. As a general rule the total amount " +"of parsable objects and their individual size and complexity should be " +"balanced to avoid framerate issues or very long baking times. The combined " +"mesh is then passed to the Recast Navigation Object to test the source " +"geometry for walkable terrain suitable to [NavigationMesh] agent properties " +"by creating a voxel world around the meshes bounding area.\n" +"The finalized navigation mesh is then returned and stored inside the " +"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes." +msgstr "" + +#: doc/classes/NavigationMeshGenerator.xml +msgid "" +"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " +"nodes under the provided [code]root_node[/code] or a specific group of nodes " +"for potential source geometry. The parse behavior can be controlled with the " +"[member NavigationMesh.geometry/parsed_geometry_type] and [member " +"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[NavigationMesh] resource." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "Clears the navigation mesh." +msgid "" +"Removes all polygons and vertices from the provided [code]nav_mesh[/code] " +"resource." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -35817,7 +35936,10 @@ msgid "" "thread is useful because navigation baking is not a cheap operation. When it " "is completed, it automatically sets the new [NavigationMesh]. Please note " "that baking on separate thread may be very slow if geometry is parsed from " -"meshes as async access to each mesh involves heavy synchronization." +"meshes as async access to each mesh involves heavy synchronization. Also, " +"please note that baking on a separate thread is automatically disabled on " +"operating systems that cannot use threads (such as HTML5 with threads " +"disabled)." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -35863,6 +35985,10 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle.xml +msgid "Returns the [RID] of this obstacle on the [NavigationServer]." +msgstr "" + +#: doc/classes/NavigationObstacle.xml msgid "" "Sets the [Navigation] node used by the obstacle. Useful when you don't want " "to make the obstacle a child of a [Navigation] node." @@ -35899,6 +36025,10 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle2D.xml +msgid "Returns the [RID] of this obstacle on the [Navigation2DServer]." +msgstr "" + +#: doc/classes/NavigationObstacle2D.xml msgid "" "Sets the [Navigation2D] node used by the obstacle. Useful when you don't " "want to make the obstacle a child of a [Navigation2D] node." @@ -37083,7 +37213,7 @@ msgstr "" #: doc/classes/Node.xml msgid "" "Returns [code]true[/code] if the physics interpolated flag is set for this " -"Node (see [method set_physics_interpolated]).\n" +"Node (see [member physics_interpolation_mode]).\n" "[b]Note:[/b] Interpolation will only be active is both the flag is set " "[b]and[/b] physics interpolation is enabled within the [SceneTree]. This can " "be tested using [method is_physics_interpolated_and_enabled]." @@ -37091,8 +37221,8 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Returns [code]true[/code] if physics interpolation is enabled (see [method " -"set_physics_interpolated]) [b]and[/b] enabled in the [SceneTree].\n" +"Returns [code]true[/code] if physics interpolation is enabled (see [member " +"physics_interpolation_mode]) [b]and[/b] enabled in the [SceneTree].\n" "This is a convenience version of [method is_physics_interpolated] that also " "checks whether physics interpolation is enabled globally.\n" "See [member SceneTree.physics_interpolation] and [member ProjectSettings." @@ -37386,14 +37516,6 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Enables or disables physics interpolation per node, offering a finer grain " -"of control than turning physics interpolation on and off globally.\n" -"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " -"interpolation can sometimes give superior results." -msgstr "" - -#: doc/classes/Node.xml -msgid "" "Enables or disables physics (i.e. fixed framerate) processing. When a node " "is being processed, it will receive a [constant " "NOTIFICATION_PHYSICS_PROCESS] at a fixed (usually 60 FPS, see [member Engine." @@ -37526,6 +37648,15 @@ msgstr "" #: doc/classes/Node.xml msgid "" +"Allows enabling or disabling physics interpolation per node, offering a " +"finer grain of control than turning physics interpolation on and off " +"globally.\n" +"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " +"interpolation can sometimes give superior results." +msgstr "" + +#: doc/classes/Node.xml +msgid "" "The node's priority in the execution order of the enabled processing " "callbacks (i.e. [constant NOTIFICATION_PROCESS], [constant " "NOTIFICATION_PHYSICS_PROCESS] and their internal counterparts). Nodes whose " @@ -37687,6 +37818,24 @@ msgid "Continue to process regardless of the [SceneTree] pause state." msgstr "" #: doc/classes/Node.xml +msgid "" +"Inherits physics interpolation mode from the node's parent. For the root " +"node, it is equivalent to [constant PHYSICS_INTERPOLATION_MODE_ON]. Default." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn off physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn on physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml msgid "Duplicate the node's signals." msgstr "" @@ -38927,7 +39076,7 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" -"Returns the ID of the selected item, or [code]0[/code] if no item is " +"Returns the ID of the selected item, or [code]-1[/code] if no item is " "selected." msgstr "" @@ -38949,7 +39098,8 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" "Selects an item by index and makes it the current item. This will work even " -"if the item is disabled." +"if the item is disabled.\n" +"Passing [code]-1[/code] as the index deselects any currently selected item." msgstr "" #: doc/classes/OptionButton.xml @@ -44276,6 +44426,15 @@ msgid "" "should always be preferred." msgstr "" +#: doc/classes/PoolByteArray.xml doc/classes/PoolColorArray.xml +#: doc/classes/PoolIntArray.xml doc/classes/PoolRealArray.xml +#: doc/classes/PoolStringArray.xml doc/classes/PoolVector2Array.xml +#: doc/classes/PoolVector3Array.xml +msgid "" +"Returns [code]true[/code] if the array contains the given value.\n" +"[b]Note:[/b] This is equivalent to using the [code]in[/code] operator." +msgstr "" + #: doc/classes/PoolByteArray.xml msgid "" "Returns a hexadecimal representation of this array as a [String].\n" @@ -45069,6 +45228,10 @@ msgid "[Font] used for the menu items." msgstr "" #: doc/classes/PopupMenu.xml +msgid "[Font] used for the labeled separator." +msgstr "" + +#: doc/classes/PopupMenu.xml msgid "[Texture] icon for the checked checkbox items." msgstr "" @@ -48514,19 +48677,6 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used easing from [enum Tween.EaseType]. If not set, the " -"default easing is used from the [Tween] that contains this Tweener." -msgstr "" - -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used transition from [enum Tween.TransitionType]. If not " -"set, the default transition is used from the [Tween] that contains this " -"Tweener." -msgstr "" - #: doc/classes/ProximityGroup.xml msgid "General-purpose 3D proximity detection node." msgstr "" @@ -53356,8 +53506,15 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape touches another. If there are " -"no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape touches another.\n" +"If there are no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the shape to check collisions with " "([code]with_shape[/code]), and the transformation matrix of that shape " @@ -53378,8 +53535,16 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape would touch another, if a " -"given movement was applied. If there are no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape would touch another, " +"if a given movement was applied.\n" +"If there would be no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the movement to test on this shape " "([code]local_motion[/code]), the shape to check collisions with " diff --git a/doc/translations/hu.po b/doc/translations/hu.po index 24b9a5c93d..f6383a95dd 100644 --- a/doc/translations/hu.po +++ b/doc/translations/hu.po @@ -952,11 +952,12 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Random range, any floating point value between [code]from[/code] and " -"[code]to[/code].\n" +"Returns a random floating point value between [code]from[/code] and " +"[code]to[/code] (both endpoints inclusive).\n" "[codeblock]\n" "prints(rand_range(0, 1), rand_range(0, 1)) # Prints e.g. 0.135591 0.405263\n" -"[/codeblock]" +"[/codeblock]\n" +"[b]Note:[/b] This is equivalent to [code]randf() * (to - from) + from[/code]." msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml @@ -1000,37 +1001,36 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Returns an array with the given range. Range can be 1 argument [code]N[/" -"code] (0 to [code]N[/code] - 1), two arguments ([code]initial[/code], " -"[code]final - 1[/code]) or three arguments ([code]initial[/code], " -"[code]final - 1[/code], [code]increment[/code]). Returns an empty array if " -"the range isn't valid (e.g. [code]range(2, 5, -1)[/code] or [code]range(5, " -"5, 1)[/code]).\n" -"Returns an array with the given range. [code]range()[/code] can have 1 " -"argument N ([code]0[/code] to [code]N - 1[/code]), two arguments " -"([code]initial[/code], [code]final - 1[/code]) or three arguments " -"([code]initial[/code], [code]final - 1[/code], [code]increment[/code]). " -"[code]increment[/code] can be negative. If [code]increment[/code] is " -"negative, [code]final - 1[/code] will become [code]final + 1[/code]. Also, " -"the initial value must be greater than the final value for the loop to run.\n" -"[codeblock]\n" -"print(range(4))\n" -"print(range(2, 5))\n" -"print(range(0, 6, 2))\n" -"[/codeblock]\n" -"Output:\n" +"Returns an array with the given range. [method range] can be called in three " +"ways:\n" +"[code]range(n: int)[/code]: Starts from 0, increases by steps of 1, and " +"stops [i]before[/i] [code]n[/code]. The argument [code]n[/code] is " +"[b]exclusive[/b].\n" +"[code]range(b: int, n: int)[/code]: Starts from [code]b[/code], increases by " +"steps of 1, and stops [i]before[/i] [code]n[/code]. The arguments [code]b[/" +"code] and [code]n[/code] are [b]inclusive[/b] and [b]exclusive[/b], " +"respectively.\n" +"[code]range(b: int, n: int, s: int)[/code]: Starts from [code]b[/code], " +"increases/decreases by steps of [code]s[/code], and stops [i]before[/i] " +"[code]n[/code]. The arguments [code]b[/code] and [code]n[/code] are " +"[b]inclusive[/b] and [b]exclusive[/b], respectively. The argument [code]s[/" +"code] [b]can[/b] be negative, but not [code]0[/code]. If [code]s[/code] is " +"[code]0[/code], an error message is printed.\n" +"[method range] converts all arguments to [int] before processing.\n" +"[b]Note:[/b] Returns an empty array if no value meets the value constraint " +"(e.g. [code]range(2, 5, -1)[/code] or [code]range(5, 5, 1)[/code]).\n" +"Examples:\n" "[codeblock]\n" -"[0, 1, 2, 3]\n" -"[2, 3, 4]\n" -"[0, 2, 4]\n" +"print(range(4)) # Prints [0, 1, 2, 3]\n" +"print(range(2, 5)) # Prints [2, 3, 4]\n" +"print(range(0, 6, 2)) # Prints [0, 2, 4]\n" +"print(range(4, 1, -1)) # Prints [4, 3, 2]\n" "[/codeblock]\n" "To iterate over an [Array] backwards, use:\n" "[codeblock]\n" "var array = [3, 6, 9]\n" -"var i := array.size() - 1\n" -"while i >= 0:\n" -" print(array[i])\n" -" i -= 1\n" +"for i in range(array.size(), 0, -1):\n" +" print(array[i - 1])\n" "[/codeblock]\n" "Output:\n" "[codeblock]\n" @@ -4125,17 +4125,24 @@ msgid "Maximum value for the mode enum." msgstr "" #: doc/classes/AnimatedSprite.xml -msgid "Sprite node that can use multiple textures for animation." +msgid "" +"Sprite node that contains multiple textures as frames to play for animation." msgstr "" #: doc/classes/AnimatedSprite.xml msgid "" -"Animations are created using a [SpriteFrames] resource, which can be " -"configured in the editor via the SpriteFrames panel.\n" -"[b]Note:[/b] You can associate a set of normal maps by creating additional " -"[SpriteFrames] resources with a [code]_normal[/code] suffix. For example, " -"having 2 [SpriteFrames] resources [code]run[/code] and [code]run_normal[/" -"code] will make it so the [code]run[/code] animation uses the normal map." +"[AnimatedSprite] is similar to the [Sprite] node, except it carries multiple " +"textures as animation frames. Animations are created using a [SpriteFrames] " +"resource, which allows you to import image files (or a folder containing " +"said files) to provide the animation frames for the sprite. The " +"[SpriteFrames] resource can be configured in the editor via the SpriteFrames " +"bottom panel.\n" +"[b]Note:[/b] You can associate a set of normal or specular maps by creating " +"additional [SpriteFrames] resources with a [code]_normal[/code] or " +"[code]_specular[/code] suffix. For example, having 3 [SpriteFrames] " +"resources [code]run[/code], [code]run_normal[/code], and [code]run_specular[/" +"code] will make it so the [code]run[/code] animation uses normal and " +"specular maps." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml @@ -4163,9 +4170,9 @@ msgstr "" msgid "Stops the current animation (does not reset the frame counter)." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml +#: doc/classes/AnimatedSprite.xml msgid "" -"The current animation from the [code]frames[/code] resource. If this value " +"The current animation from the [member frames] resource. If this value " "changes, the [code]frame[/code] counter is reset." msgstr "" @@ -4189,8 +4196,11 @@ msgstr "" msgid "The displayed animation frame's index." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml -msgid "The [SpriteFrames] resource containing the animation(s)." +#: doc/classes/AnimatedSprite.xml +msgid "" +"The [SpriteFrames] resource containing the animation(s). Allows you the " +"option to load, edit, clear, make unique and save the states of the " +"[SpriteFrames] resource." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/Sprite.xml @@ -4242,6 +4252,16 @@ msgid "" "provided, the current animation is played." msgstr "" +#: doc/classes/AnimatedSprite3D.xml +msgid "" +"The current animation from the [code]frames[/code] resource. If this value " +"changes, the [code]frame[/code] counter is reset." +msgstr "" + +#: doc/classes/AnimatedSprite3D.xml +msgid "The [SpriteFrames] resource containing the animation(s)." +msgstr "" + #: doc/classes/AnimatedTexture.xml msgid "Proxy texture for simple frame-based animations." msgstr "" @@ -4757,11 +4777,11 @@ msgstr "" msgid "No interpolation (nearest value)." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Linear interpolation." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Cubic interpolation." msgstr "" @@ -5796,7 +5816,10 @@ msgid "" "Seeks the animation to the [code]seconds[/code] point in time (in seconds). " "If [code]update[/code] is [code]true[/code], the animation updates too, " "otherwise it updates at process time. Events between the current frame and " -"[code]seconds[/code] are skipped." +"[code]seconds[/code] are skipped.\n" +"[b]Note:[/b] Seeking to the end of the animation doesn't emit [signal " +"animation_finished]. If you want to skip animation and emit the signal, use " +"[method advance]." msgstr "" #: doc/classes/AnimationPlayer.xml @@ -6986,7 +7009,10 @@ msgid "" "[code]0[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "Returns the number of times an element is in the array." msgstr "" @@ -7031,10 +7057,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array for a value and returns its index or [code]-1[/code] if " -"not found. Optionally, the initial search index can be passed." +"not found. Optionally, the initial search index can be passed. Returns " +"[code]-1[/code] if [code]from[/code] is out of bounds." msgstr "" #: doc/classes/Array.xml @@ -7172,11 +7202,15 @@ msgid "" "[code]null[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array in reverse order. Optionally, a start search index can be " "passed. If negative, the start index is considered relative to the end of " -"the array." +"the array. If the adjusted start index is out of bounds, this method " +"searches from the end of the array." msgstr "" #: doc/classes/Array.xml @@ -8311,7 +8345,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -8533,7 +8567,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -11644,17 +11678,17 @@ msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a normal vector in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a 3D position in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml @@ -13903,7 +13937,9 @@ msgstr "" #: doc/classes/CollisionPolygon2D.xml msgid "" "If [code]true[/code], only edges that face up, relative to " -"[CollisionPolygon2D]'s rotation, will collide with other objects." +"[CollisionPolygon2D]'s rotation, will collide with other objects.\n" +"[b]Note:[/b] This property has no effect if this [CollisionPolygon2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionPolygon2D.xml @@ -13999,7 +14035,9 @@ msgstr "" #: doc/classes/CollisionShape2D.xml msgid "" "Sets whether this collision shape should only detect collision on one side " -"(top or bottom)." +"(top or bottom).\n" +"[b]Note:[/b] This property has no effect if this [CollisionShape2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionShape2D.xml @@ -22405,6 +22443,10 @@ msgid "" "same behavior." msgstr "" +#: doc/classes/EditorSpinSlider.xml +msgid "If [code]true[/code], the slider is hidden." +msgstr "" + #: doc/classes/EditorVCSInterface.xml msgid "" "Version Control System (VCS) interface, which reads and writes to the local " @@ -25986,9 +26028,22 @@ msgid "Gradient's colors returned as a [PoolColorArray]." msgstr "" #: doc/classes/Gradient.xml +msgid "" +"Defines how the colors between points of the gradient are interpolated. See " +"[enum InterpolationMode] for available modes." +msgstr "" + +#: doc/classes/Gradient.xml msgid "Gradient's offsets returned as a [PoolRealArray]." msgstr "" +#: doc/classes/Gradient.xml +msgid "" +"Constant interpolation, color changes abruptly at each point and stays " +"uniform between. This might cause visible aliasing when used for a gradient " +"texture in some cases." +msgstr "" + #: doc/classes/GradientTexture.xml msgid "Gradient-filled texture." msgstr "" @@ -34510,13 +34565,13 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used easing from [enum Tween.EaseType]. If not set, the " "default easing is used from the [SceneTreeTween] that contains this Tweener." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used transition from [enum Tween.TransitionType]. If not " "set, the default transition is used from the [SceneTreeTween] that contains " @@ -35222,6 +35277,12 @@ msgid "Creates the agent." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]agent[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" @@ -35285,6 +35346,12 @@ msgid "Create a new map." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation agents [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns the map cell size." msgstr "" @@ -35311,6 +35378,12 @@ msgid "Returns the navigation path to reach the destination from the origin." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation regions [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns [code]true[/code] if the map is active." msgstr "" @@ -35332,6 +35405,12 @@ msgid "Creates a new region." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]region[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the map for the region." msgstr "" @@ -35804,17 +35883,57 @@ msgid "Represents the size of the [enum SourceGeometryMode] enum." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "This class is responsible for creating and clearing navigation meshes." +msgid "Helper class for creating and clearing navigation meshes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml msgid "" -"Bakes the navigation mesh. This will allow you to use pathfinding with the " -"navigation system." +"This class is responsible for creating and clearing 3D navigation meshes " +"used as [NavigationMesh] resources inside [NavigationMeshInstance]. The " +"[NavigationMeshGenerator] has very limited to no use for 2D as the " +"navigation mesh baking process expects 3D node types and 3D source geometry " +"to parse.\n" +"The entire navigation mesh baking is best done in a separate thread as the " +"voxelization, collision tests and mesh optimization steps involved are very " +"performance and time hungry operations.\n" +"Navigation mesh baking happens in multiple steps and the result depends on " +"3D source geometry and properties of the [NavigationMesh] resource. In the " +"first step, starting from a root node and depending on [NavigationMesh] " +"properties all valid 3D source geometry nodes are collected from the " +"[SceneTree]. Second, all collected nodes are parsed for their relevant 3D " +"geometry data and a combined 3D mesh is build. Due to the many different " +"types of parsable objects, from normal [MeshInstance]s to [CSGShape]s or " +"various [CollisionObject]s, some operations to collect geometry data can " +"trigger [VisualServer] and [PhysicsServer] synchronizations. Server " +"synchronization can have a negative effect on baking time or framerate as it " +"often involves [Mutex] locking for thread security. Many parsable objects " +"and the continuous synchronization with other threaded Servers can increase " +"the baking time significantly. On the other hand only a few but very large " +"and complex objects will take some time to prepare for the Servers which can " +"noticeably stall the next frame render. As a general rule the total amount " +"of parsable objects and their individual size and complexity should be " +"balanced to avoid framerate issues or very long baking times. The combined " +"mesh is then passed to the Recast Navigation Object to test the source " +"geometry for walkable terrain suitable to [NavigationMesh] agent properties " +"by creating a voxel world around the meshes bounding area.\n" +"The finalized navigation mesh is then returned and stored inside the " +"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes." +msgstr "" + +#: doc/classes/NavigationMeshGenerator.xml +msgid "" +"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " +"nodes under the provided [code]root_node[/code] or a specific group of nodes " +"for potential source geometry. The parse behavior can be controlled with the " +"[member NavigationMesh.geometry/parsed_geometry_type] and [member " +"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[NavigationMesh] resource." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "Clears the navigation mesh." +msgid "" +"Removes all polygons and vertices from the provided [code]nav_mesh[/code] " +"resource." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -35835,7 +35954,10 @@ msgid "" "thread is useful because navigation baking is not a cheap operation. When it " "is completed, it automatically sets the new [NavigationMesh]. Please note " "that baking on separate thread may be very slow if geometry is parsed from " -"meshes as async access to each mesh involves heavy synchronization." +"meshes as async access to each mesh involves heavy synchronization. Also, " +"please note that baking on a separate thread is automatically disabled on " +"operating systems that cannot use threads (such as HTML5 with threads " +"disabled)." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -35881,6 +36003,10 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle.xml +msgid "Returns the [RID] of this obstacle on the [NavigationServer]." +msgstr "" + +#: doc/classes/NavigationObstacle.xml msgid "" "Sets the [Navigation] node used by the obstacle. Useful when you don't want " "to make the obstacle a child of a [Navigation] node." @@ -35917,6 +36043,10 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle2D.xml +msgid "Returns the [RID] of this obstacle on the [Navigation2DServer]." +msgstr "" + +#: doc/classes/NavigationObstacle2D.xml msgid "" "Sets the [Navigation2D] node used by the obstacle. Useful when you don't " "want to make the obstacle a child of a [Navigation2D] node." @@ -37101,7 +37231,7 @@ msgstr "" #: doc/classes/Node.xml msgid "" "Returns [code]true[/code] if the physics interpolated flag is set for this " -"Node (see [method set_physics_interpolated]).\n" +"Node (see [member physics_interpolation_mode]).\n" "[b]Note:[/b] Interpolation will only be active is both the flag is set " "[b]and[/b] physics interpolation is enabled within the [SceneTree]. This can " "be tested using [method is_physics_interpolated_and_enabled]." @@ -37109,8 +37239,8 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Returns [code]true[/code] if physics interpolation is enabled (see [method " -"set_physics_interpolated]) [b]and[/b] enabled in the [SceneTree].\n" +"Returns [code]true[/code] if physics interpolation is enabled (see [member " +"physics_interpolation_mode]) [b]and[/b] enabled in the [SceneTree].\n" "This is a convenience version of [method is_physics_interpolated] that also " "checks whether physics interpolation is enabled globally.\n" "See [member SceneTree.physics_interpolation] and [member ProjectSettings." @@ -37404,14 +37534,6 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Enables or disables physics interpolation per node, offering a finer grain " -"of control than turning physics interpolation on and off globally.\n" -"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " -"interpolation can sometimes give superior results." -msgstr "" - -#: doc/classes/Node.xml -msgid "" "Enables or disables physics (i.e. fixed framerate) processing. When a node " "is being processed, it will receive a [constant " "NOTIFICATION_PHYSICS_PROCESS] at a fixed (usually 60 FPS, see [member Engine." @@ -37544,6 +37666,15 @@ msgstr "" #: doc/classes/Node.xml msgid "" +"Allows enabling or disabling physics interpolation per node, offering a " +"finer grain of control than turning physics interpolation on and off " +"globally.\n" +"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " +"interpolation can sometimes give superior results." +msgstr "" + +#: doc/classes/Node.xml +msgid "" "The node's priority in the execution order of the enabled processing " "callbacks (i.e. [constant NOTIFICATION_PROCESS], [constant " "NOTIFICATION_PHYSICS_PROCESS] and their internal counterparts). Nodes whose " @@ -37705,6 +37836,24 @@ msgid "Continue to process regardless of the [SceneTree] pause state." msgstr "" #: doc/classes/Node.xml +msgid "" +"Inherits physics interpolation mode from the node's parent. For the root " +"node, it is equivalent to [constant PHYSICS_INTERPOLATION_MODE_ON]. Default." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn off physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn on physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml msgid "Duplicate the node's signals." msgstr "" @@ -38945,7 +39094,7 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" -"Returns the ID of the selected item, or [code]0[/code] if no item is " +"Returns the ID of the selected item, or [code]-1[/code] if no item is " "selected." msgstr "" @@ -38967,7 +39116,8 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" "Selects an item by index and makes it the current item. This will work even " -"if the item is disabled." +"if the item is disabled.\n" +"Passing [code]-1[/code] as the index deselects any currently selected item." msgstr "" #: doc/classes/OptionButton.xml @@ -44294,6 +44444,15 @@ msgid "" "should always be preferred." msgstr "" +#: doc/classes/PoolByteArray.xml doc/classes/PoolColorArray.xml +#: doc/classes/PoolIntArray.xml doc/classes/PoolRealArray.xml +#: doc/classes/PoolStringArray.xml doc/classes/PoolVector2Array.xml +#: doc/classes/PoolVector3Array.xml +msgid "" +"Returns [code]true[/code] if the array contains the given value.\n" +"[b]Note:[/b] This is equivalent to using the [code]in[/code] operator." +msgstr "" + #: doc/classes/PoolByteArray.xml msgid "" "Returns a hexadecimal representation of this array as a [String].\n" @@ -45087,6 +45246,10 @@ msgid "[Font] used for the menu items." msgstr "" #: doc/classes/PopupMenu.xml +msgid "[Font] used for the labeled separator." +msgstr "" + +#: doc/classes/PopupMenu.xml msgid "[Texture] icon for the checked checkbox items." msgstr "" @@ -48532,19 +48695,6 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used easing from [enum Tween.EaseType]. If not set, the " -"default easing is used from the [Tween] that contains this Tweener." -msgstr "" - -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used transition from [enum Tween.TransitionType]. If not " -"set, the default transition is used from the [Tween] that contains this " -"Tweener." -msgstr "" - #: doc/classes/ProximityGroup.xml msgid "General-purpose 3D proximity detection node." msgstr "" @@ -53374,8 +53524,15 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape touches another. If there are " -"no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape touches another.\n" +"If there are no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the shape to check collisions with " "([code]with_shape[/code]), and the transformation matrix of that shape " @@ -53396,8 +53553,16 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape would touch another, if a " -"given movement was applied. If there are no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape would touch another, " +"if a given movement was applied.\n" +"If there would be no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the movement to test on this shape " "([code]local_motion[/code]), the shape to check collisions with " diff --git a/doc/translations/id.po b/doc/translations/id.po index 8c9d0937bf..c2b6000173 100644 --- a/doc/translations/id.po +++ b/doc/translations/id.po @@ -14,12 +14,13 @@ # zephyroths <ridho.hikaru@gmail.com>, 2022. # ProgrammerIndonesia 44 <elo.jhy@gmail.com>, 2022. # Reza Almanda <rezaalmanda27@gmail.com>, 2022. +# Tsaqib Fadhlurrahman Soka <sokatsaqib@gmail.com>, 2022. msgid "" msgstr "" "Project-Id-Version: Godot Engine class reference\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" -"PO-Revision-Date: 2022-04-08 07:11+0000\n" -"Last-Translator: Reza Almanda <rezaalmanda27@gmail.com>\n" +"PO-Revision-Date: 2022-05-15 09:38+0000\n" +"Last-Translator: Tsaqib Fadhlurrahman Soka <sokatsaqib@gmail.com>\n" "Language-Team: Indonesian <https://hosted.weblate.org/projects/godot-engine/" "godot-class-reference/id/>\n" "Language: id\n" @@ -27,7 +28,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.12-dev\n" +"X-Generator: Weblate 4.13-dev\n" #: doc/tools/make_rst.py msgid "Description" @@ -43,7 +44,7 @@ msgstr "Properti" #: doc/tools/make_rst.py msgid "Methods" -msgstr "Metode" +msgstr "Method" #: doc/tools/make_rst.py msgid "Theme Properties" @@ -59,7 +60,7 @@ msgstr "Enumerasi" #: doc/tools/make_rst.py msgid "Constants" -msgstr "Konstanta" +msgstr "konstan" #: doc/tools/make_rst.py msgid "Property Descriptions" @@ -91,7 +92,7 @@ msgstr "Bawaan" #: doc/tools/make_rst.py msgid "Setter" -msgstr "" +msgstr "Setter" #: doc/tools/make_rst.py msgid "value" @@ -99,7 +100,7 @@ msgstr "nilai" #: doc/tools/make_rst.py msgid "Getter" -msgstr "" +msgstr "Pengumpul" #: doc/tools/make_rst.py msgid "" @@ -1322,11 +1323,12 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml #, fuzzy msgid "" -"Random range, any floating point value between [code]from[/code] and " -"[code]to[/code].\n" +"Returns a random floating point value between [code]from[/code] and " +"[code]to[/code] (both endpoints inclusive).\n" "[codeblock]\n" "prints(rand_range(0, 1), rand_range(0, 1)) # Prints e.g. 0.135591 0.405263\n" -"[/codeblock]" +"[/codeblock]\n" +"[b]Note:[/b] This is equivalent to [code]randf() * (to - from) + from[/code]." msgstr "" "Rentang acak, setiap nilai floating point antara [code]from[/code] dan " "[code]to[/code].\n" @@ -1380,37 +1382,36 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Returns an array with the given range. Range can be 1 argument [code]N[/" -"code] (0 to [code]N[/code] - 1), two arguments ([code]initial[/code], " -"[code]final - 1[/code]) or three arguments ([code]initial[/code], " -"[code]final - 1[/code], [code]increment[/code]). Returns an empty array if " -"the range isn't valid (e.g. [code]range(2, 5, -1)[/code] or [code]range(5, " -"5, 1)[/code]).\n" -"Returns an array with the given range. [code]range()[/code] can have 1 " -"argument N ([code]0[/code] to [code]N - 1[/code]), two arguments " -"([code]initial[/code], [code]final - 1[/code]) or three arguments " -"([code]initial[/code], [code]final - 1[/code], [code]increment[/code]). " -"[code]increment[/code] can be negative. If [code]increment[/code] is " -"negative, [code]final - 1[/code] will become [code]final + 1[/code]. Also, " -"the initial value must be greater than the final value for the loop to run.\n" -"[codeblock]\n" -"print(range(4))\n" -"print(range(2, 5))\n" -"print(range(0, 6, 2))\n" -"[/codeblock]\n" -"Output:\n" +"Returns an array with the given range. [method range] can be called in three " +"ways:\n" +"[code]range(n: int)[/code]: Starts from 0, increases by steps of 1, and " +"stops [i]before[/i] [code]n[/code]. The argument [code]n[/code] is " +"[b]exclusive[/b].\n" +"[code]range(b: int, n: int)[/code]: Starts from [code]b[/code], increases by " +"steps of 1, and stops [i]before[/i] [code]n[/code]. The arguments [code]b[/" +"code] and [code]n[/code] are [b]inclusive[/b] and [b]exclusive[/b], " +"respectively.\n" +"[code]range(b: int, n: int, s: int)[/code]: Starts from [code]b[/code], " +"increases/decreases by steps of [code]s[/code], and stops [i]before[/i] " +"[code]n[/code]. The arguments [code]b[/code] and [code]n[/code] are " +"[b]inclusive[/b] and [b]exclusive[/b], respectively. The argument [code]s[/" +"code] [b]can[/b] be negative, but not [code]0[/code]. If [code]s[/code] is " +"[code]0[/code], an error message is printed.\n" +"[method range] converts all arguments to [int] before processing.\n" +"[b]Note:[/b] Returns an empty array if no value meets the value constraint " +"(e.g. [code]range(2, 5, -1)[/code] or [code]range(5, 5, 1)[/code]).\n" +"Examples:\n" "[codeblock]\n" -"[0, 1, 2, 3]\n" -"[2, 3, 4]\n" -"[0, 2, 4]\n" +"print(range(4)) # Prints [0, 1, 2, 3]\n" +"print(range(2, 5)) # Prints [2, 3, 4]\n" +"print(range(0, 6, 2)) # Prints [0, 2, 4]\n" +"print(range(4, 1, -1)) # Prints [4, 3, 2]\n" "[/codeblock]\n" "To iterate over an [Array] backwards, use:\n" "[codeblock]\n" "var array = [3, 6, 9]\n" -"var i := array.size() - 1\n" -"while i >= 0:\n" -" print(array[i])\n" -" i -= 1\n" +"for i in range(array.size(), 0, -1):\n" +" print(array[i - 1])\n" "[/codeblock]\n" "Output:\n" "[codeblock]\n" @@ -4518,17 +4519,24 @@ msgid "Maximum value for the mode enum." msgstr "" #: doc/classes/AnimatedSprite.xml -msgid "Sprite node that can use multiple textures for animation." +msgid "" +"Sprite node that contains multiple textures as frames to play for animation." msgstr "" #: doc/classes/AnimatedSprite.xml msgid "" -"Animations are created using a [SpriteFrames] resource, which can be " -"configured in the editor via the SpriteFrames panel.\n" -"[b]Note:[/b] You can associate a set of normal maps by creating additional " -"[SpriteFrames] resources with a [code]_normal[/code] suffix. For example, " -"having 2 [SpriteFrames] resources [code]run[/code] and [code]run_normal[/" -"code] will make it so the [code]run[/code] animation uses the normal map." +"[AnimatedSprite] is similar to the [Sprite] node, except it carries multiple " +"textures as animation frames. Animations are created using a [SpriteFrames] " +"resource, which allows you to import image files (or a folder containing " +"said files) to provide the animation frames for the sprite. The " +"[SpriteFrames] resource can be configured in the editor via the SpriteFrames " +"bottom panel.\n" +"[b]Note:[/b] You can associate a set of normal or specular maps by creating " +"additional [SpriteFrames] resources with a [code]_normal[/code] or " +"[code]_specular[/code] suffix. For example, having 3 [SpriteFrames] " +"resources [code]run[/code], [code]run_normal[/code], and [code]run_specular[/" +"code] will make it so the [code]run[/code] animation uses normal and " +"specular maps." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml @@ -4556,9 +4564,9 @@ msgstr "" msgid "Stops the current animation (does not reset the frame counter)." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml +#: doc/classes/AnimatedSprite.xml msgid "" -"The current animation from the [code]frames[/code] resource. If this value " +"The current animation from the [member frames] resource. If this value " "changes, the [code]frame[/code] counter is reset." msgstr "" @@ -4582,8 +4590,11 @@ msgstr "" msgid "The displayed animation frame's index." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml -msgid "The [SpriteFrames] resource containing the animation(s)." +#: doc/classes/AnimatedSprite.xml +msgid "" +"The [SpriteFrames] resource containing the animation(s). Allows you the " +"option to load, edit, clear, make unique and save the states of the " +"[SpriteFrames] resource." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/Sprite.xml @@ -4635,6 +4646,16 @@ msgid "" "provided, the current animation is played." msgstr "" +#: doc/classes/AnimatedSprite3D.xml +msgid "" +"The current animation from the [code]frames[/code] resource. If this value " +"changes, the [code]frame[/code] counter is reset." +msgstr "" + +#: doc/classes/AnimatedSprite3D.xml +msgid "The [SpriteFrames] resource containing the animation(s)." +msgstr "" + #: doc/classes/AnimatedTexture.xml msgid "Proxy texture for simple frame-based animations." msgstr "" @@ -5150,11 +5171,11 @@ msgstr "" msgid "No interpolation (nearest value)." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Linear interpolation." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Cubic interpolation." msgstr "" @@ -6190,7 +6211,10 @@ msgid "" "Seeks the animation to the [code]seconds[/code] point in time (in seconds). " "If [code]update[/code] is [code]true[/code], the animation updates too, " "otherwise it updates at process time. Events between the current frame and " -"[code]seconds[/code] are skipped." +"[code]seconds[/code] are skipped.\n" +"[b]Note:[/b] Seeking to the end of the animation doesn't emit [signal " +"animation_finished]. If you want to skip animation and emit the signal, use " +"[method advance]." msgstr "" #: doc/classes/AnimationPlayer.xml @@ -7380,7 +7404,10 @@ msgid "" "[code]0[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "Returns the number of times an element is in the array." msgstr "" @@ -7425,10 +7452,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array for a value and returns its index or [code]-1[/code] if " -"not found. Optionally, the initial search index can be passed." +"not found. Optionally, the initial search index can be passed. Returns " +"[code]-1[/code] if [code]from[/code] is out of bounds." msgstr "" #: doc/classes/Array.xml @@ -7566,11 +7597,15 @@ msgid "" "[code]null[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array in reverse order. Optionally, a start search index can be " "passed. If negative, the start index is considered relative to the end of " -"the array." +"the array. If the adjusted start index is out of bounds, this method " +"searches from the end of the array." msgstr "" #: doc/classes/Array.xml @@ -8705,7 +8740,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -8927,7 +8962,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -12038,17 +12073,17 @@ msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a normal vector in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a 3D position in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml @@ -14298,7 +14333,9 @@ msgstr "" #: doc/classes/CollisionPolygon2D.xml msgid "" "If [code]true[/code], only edges that face up, relative to " -"[CollisionPolygon2D]'s rotation, will collide with other objects." +"[CollisionPolygon2D]'s rotation, will collide with other objects.\n" +"[b]Note:[/b] This property has no effect if this [CollisionPolygon2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionPolygon2D.xml @@ -14394,7 +14431,9 @@ msgstr "" #: doc/classes/CollisionShape2D.xml msgid "" "Sets whether this collision shape should only detect collision on one side " -"(top or bottom)." +"(top or bottom).\n" +"[b]Note:[/b] This property has no effect if this [CollisionShape2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionShape2D.xml @@ -22800,6 +22839,10 @@ msgid "" "same behavior." msgstr "" +#: doc/classes/EditorSpinSlider.xml +msgid "If [code]true[/code], the slider is hidden." +msgstr "" + #: doc/classes/EditorVCSInterface.xml msgid "" "Version Control System (VCS) interface, which reads and writes to the local " @@ -26387,9 +26430,22 @@ msgid "Gradient's colors returned as a [PoolColorArray]." msgstr "" #: doc/classes/Gradient.xml +msgid "" +"Defines how the colors between points of the gradient are interpolated. See " +"[enum InterpolationMode] for available modes." +msgstr "" + +#: doc/classes/Gradient.xml msgid "Gradient's offsets returned as a [PoolRealArray]." msgstr "" +#: doc/classes/Gradient.xml +msgid "" +"Constant interpolation, color changes abruptly at each point and stays " +"uniform between. This might cause visible aliasing when used for a gradient " +"texture in some cases." +msgstr "" + #: doc/classes/GradientTexture.xml msgid "Gradient-filled texture." msgstr "" @@ -34912,13 +34968,13 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used easing from [enum Tween.EaseType]. If not set, the " "default easing is used from the [SceneTreeTween] that contains this Tweener." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used transition from [enum Tween.TransitionType]. If not " "set, the default transition is used from the [SceneTreeTween] that contains " @@ -35630,6 +35686,12 @@ msgid "Creates the agent." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]agent[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" @@ -35696,6 +35758,12 @@ msgid "Create a new map." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation agents [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns the map cell size." msgstr "Mengembalikan nilai hiperbolik tangen dari parameter." @@ -35723,6 +35791,12 @@ msgid "Returns the navigation path to reach the destination from the origin." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation regions [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns [code]true[/code] if the map is active." msgstr "" @@ -35744,6 +35818,12 @@ msgid "Creates a new region." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]region[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Sets the map for the region." msgstr "Mengembalikan nilai hiperbolik tangen dari parameter." @@ -36218,17 +36298,57 @@ msgid "Represents the size of the [enum SourceGeometryMode] enum." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "This class is responsible for creating and clearing navigation meshes." +msgid "Helper class for creating and clearing navigation meshes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml msgid "" -"Bakes the navigation mesh. This will allow you to use pathfinding with the " -"navigation system." +"This class is responsible for creating and clearing 3D navigation meshes " +"used as [NavigationMesh] resources inside [NavigationMeshInstance]. The " +"[NavigationMeshGenerator] has very limited to no use for 2D as the " +"navigation mesh baking process expects 3D node types and 3D source geometry " +"to parse.\n" +"The entire navigation mesh baking is best done in a separate thread as the " +"voxelization, collision tests and mesh optimization steps involved are very " +"performance and time hungry operations.\n" +"Navigation mesh baking happens in multiple steps and the result depends on " +"3D source geometry and properties of the [NavigationMesh] resource. In the " +"first step, starting from a root node and depending on [NavigationMesh] " +"properties all valid 3D source geometry nodes are collected from the " +"[SceneTree]. Second, all collected nodes are parsed for their relevant 3D " +"geometry data and a combined 3D mesh is build. Due to the many different " +"types of parsable objects, from normal [MeshInstance]s to [CSGShape]s or " +"various [CollisionObject]s, some operations to collect geometry data can " +"trigger [VisualServer] and [PhysicsServer] synchronizations. Server " +"synchronization can have a negative effect on baking time or framerate as it " +"often involves [Mutex] locking for thread security. Many parsable objects " +"and the continuous synchronization with other threaded Servers can increase " +"the baking time significantly. On the other hand only a few but very large " +"and complex objects will take some time to prepare for the Servers which can " +"noticeably stall the next frame render. As a general rule the total amount " +"of parsable objects and their individual size and complexity should be " +"balanced to avoid framerate issues or very long baking times. The combined " +"mesh is then passed to the Recast Navigation Object to test the source " +"geometry for walkable terrain suitable to [NavigationMesh] agent properties " +"by creating a voxel world around the meshes bounding area.\n" +"The finalized navigation mesh is then returned and stored inside the " +"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "Clears the navigation mesh." +msgid "" +"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " +"nodes under the provided [code]root_node[/code] or a specific group of nodes " +"for potential source geometry. The parse behavior can be controlled with the " +"[member NavigationMesh.geometry/parsed_geometry_type] and [member " +"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[NavigationMesh] resource." +msgstr "" + +#: doc/classes/NavigationMeshGenerator.xml +msgid "" +"Removes all polygons and vertices from the provided [code]nav_mesh[/code] " +"resource." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -36249,7 +36369,10 @@ msgid "" "thread is useful because navigation baking is not a cheap operation. When it " "is completed, it automatically sets the new [NavigationMesh]. Please note " "that baking on separate thread may be very slow if geometry is parsed from " -"meshes as async access to each mesh involves heavy synchronization." +"meshes as async access to each mesh involves heavy synchronization. Also, " +"please note that baking on a separate thread is automatically disabled on " +"operating systems that cannot use threads (such as HTML5 with threads " +"disabled)." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -36295,6 +36418,10 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle.xml +msgid "Returns the [RID] of this obstacle on the [NavigationServer]." +msgstr "" + +#: doc/classes/NavigationObstacle.xml msgid "" "Sets the [Navigation] node used by the obstacle. Useful when you don't want " "to make the obstacle a child of a [Navigation] node." @@ -36331,6 +36458,10 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle2D.xml +msgid "Returns the [RID] of this obstacle on the [Navigation2DServer]." +msgstr "" + +#: doc/classes/NavigationObstacle2D.xml msgid "" "Sets the [Navigation2D] node used by the obstacle. Useful when you don't " "want to make the obstacle a child of a [Navigation2D] node." @@ -37070,7 +37201,7 @@ msgstr "" #: doc/classes/Node.xml msgid "Nodes and Scenes" -msgstr "" +msgstr "Node dan Scene" #: doc/classes/Node.xml msgid "All Demos" @@ -37517,7 +37648,7 @@ msgstr "" #: doc/classes/Node.xml msgid "" "Returns [code]true[/code] if the physics interpolated flag is set for this " -"Node (see [method set_physics_interpolated]).\n" +"Node (see [member physics_interpolation_mode]).\n" "[b]Note:[/b] Interpolation will only be active is both the flag is set " "[b]and[/b] physics interpolation is enabled within the [SceneTree]. This can " "be tested using [method is_physics_interpolated_and_enabled]." @@ -37525,8 +37656,8 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Returns [code]true[/code] if physics interpolation is enabled (see [method " -"set_physics_interpolated]) [b]and[/b] enabled in the [SceneTree].\n" +"Returns [code]true[/code] if physics interpolation is enabled (see [member " +"physics_interpolation_mode]) [b]and[/b] enabled in the [SceneTree].\n" "This is a convenience version of [method is_physics_interpolated] that also " "checks whether physics interpolation is enabled globally.\n" "See [member SceneTree.physics_interpolation] and [member ProjectSettings." @@ -37820,14 +37951,6 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Enables or disables physics interpolation per node, offering a finer grain " -"of control than turning physics interpolation on and off globally.\n" -"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " -"interpolation can sometimes give superior results." -msgstr "" - -#: doc/classes/Node.xml -msgid "" "Enables or disables physics (i.e. fixed framerate) processing. When a node " "is being processed, it will receive a [constant " "NOTIFICATION_PHYSICS_PROCESS] at a fixed (usually 60 FPS, see [member Engine." @@ -37960,6 +38083,15 @@ msgstr "" #: doc/classes/Node.xml msgid "" +"Allows enabling or disabling physics interpolation per node, offering a " +"finer grain of control than turning physics interpolation on and off " +"globally.\n" +"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " +"interpolation can sometimes give superior results." +msgstr "" + +#: doc/classes/Node.xml +msgid "" "The node's priority in the execution order of the enabled processing " "callbacks (i.e. [constant NOTIFICATION_PROCESS], [constant " "NOTIFICATION_PHYSICS_PROCESS] and their internal counterparts). Nodes whose " @@ -38121,6 +38253,24 @@ msgid "Continue to process regardless of the [SceneTree] pause state." msgstr "" #: doc/classes/Node.xml +msgid "" +"Inherits physics interpolation mode from the node's parent. For the root " +"node, it is equivalent to [constant PHYSICS_INTERPOLATION_MODE_ON]. Default." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn off physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn on physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml msgid "Duplicate the node's signals." msgstr "" @@ -39362,7 +39512,7 @@ msgstr "Mengembalikan nilai hiperbolik tangen dari parameter." #: doc/classes/OptionButton.xml msgid "" -"Returns the ID of the selected item, or [code]0[/code] if no item is " +"Returns the ID of the selected item, or [code]-1[/code] if no item is " "selected." msgstr "" @@ -39384,7 +39534,8 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" "Selects an item by index and makes it the current item. This will work even " -"if the item is disabled." +"if the item is disabled.\n" +"Passing [code]-1[/code] as the index deselects any currently selected item." msgstr "" #: doc/classes/OptionButton.xml @@ -44728,6 +44879,15 @@ msgid "" "should always be preferred." msgstr "" +#: doc/classes/PoolByteArray.xml doc/classes/PoolColorArray.xml +#: doc/classes/PoolIntArray.xml doc/classes/PoolRealArray.xml +#: doc/classes/PoolStringArray.xml doc/classes/PoolVector2Array.xml +#: doc/classes/PoolVector3Array.xml +msgid "" +"Returns [code]true[/code] if the array contains the given value.\n" +"[b]Note:[/b] This is equivalent to using the [code]in[/code] operator." +msgstr "" + #: doc/classes/PoolByteArray.xml msgid "" "Returns a hexadecimal representation of this array as a [String].\n" @@ -45522,6 +45682,10 @@ msgid "[Font] used for the menu items." msgstr "" #: doc/classes/PopupMenu.xml +msgid "[Font] used for the labeled separator." +msgstr "" + +#: doc/classes/PopupMenu.xml msgid "[Texture] icon for the checked checkbox items." msgstr "" @@ -48967,19 +49131,6 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used easing from [enum Tween.EaseType]. If not set, the " -"default easing is used from the [Tween] that contains this Tweener." -msgstr "" - -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used transition from [enum Tween.TransitionType]. If not " -"set, the default transition is used from the [Tween] that contains this " -"Tweener." -msgstr "" - #: doc/classes/ProximityGroup.xml msgid "General-purpose 3D proximity detection node." msgstr "" @@ -53810,8 +53961,15 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape touches another. If there are " -"no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape touches another.\n" +"If there are no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the shape to check collisions with " "([code]with_shape[/code]), and the transformation matrix of that shape " @@ -53832,8 +53990,16 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape would touch another, if a " -"given movement was applied. If there are no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape would touch another, " +"if a given movement was applied.\n" +"If there would be no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the movement to test on this shape " "([code]local_motion[/code]), the shape to check collisions with " diff --git a/doc/translations/is.po b/doc/translations/is.po index 90fb6e951b..59dc923b45 100644 --- a/doc/translations/is.po +++ b/doc/translations/is.po @@ -934,11 +934,12 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Random range, any floating point value between [code]from[/code] and " -"[code]to[/code].\n" +"Returns a random floating point value between [code]from[/code] and " +"[code]to[/code] (both endpoints inclusive).\n" "[codeblock]\n" "prints(rand_range(0, 1), rand_range(0, 1)) # Prints e.g. 0.135591 0.405263\n" -"[/codeblock]" +"[/codeblock]\n" +"[b]Note:[/b] This is equivalent to [code]randf() * (to - from) + from[/code]." msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml @@ -982,37 +983,36 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Returns an array with the given range. Range can be 1 argument [code]N[/" -"code] (0 to [code]N[/code] - 1), two arguments ([code]initial[/code], " -"[code]final - 1[/code]) or three arguments ([code]initial[/code], " -"[code]final - 1[/code], [code]increment[/code]). Returns an empty array if " -"the range isn't valid (e.g. [code]range(2, 5, -1)[/code] or [code]range(5, " -"5, 1)[/code]).\n" -"Returns an array with the given range. [code]range()[/code] can have 1 " -"argument N ([code]0[/code] to [code]N - 1[/code]), two arguments " -"([code]initial[/code], [code]final - 1[/code]) or three arguments " -"([code]initial[/code], [code]final - 1[/code], [code]increment[/code]). " -"[code]increment[/code] can be negative. If [code]increment[/code] is " -"negative, [code]final - 1[/code] will become [code]final + 1[/code]. Also, " -"the initial value must be greater than the final value for the loop to run.\n" -"[codeblock]\n" -"print(range(4))\n" -"print(range(2, 5))\n" -"print(range(0, 6, 2))\n" -"[/codeblock]\n" -"Output:\n" +"Returns an array with the given range. [method range] can be called in three " +"ways:\n" +"[code]range(n: int)[/code]: Starts from 0, increases by steps of 1, and " +"stops [i]before[/i] [code]n[/code]. The argument [code]n[/code] is " +"[b]exclusive[/b].\n" +"[code]range(b: int, n: int)[/code]: Starts from [code]b[/code], increases by " +"steps of 1, and stops [i]before[/i] [code]n[/code]. The arguments [code]b[/" +"code] and [code]n[/code] are [b]inclusive[/b] and [b]exclusive[/b], " +"respectively.\n" +"[code]range(b: int, n: int, s: int)[/code]: Starts from [code]b[/code], " +"increases/decreases by steps of [code]s[/code], and stops [i]before[/i] " +"[code]n[/code]. The arguments [code]b[/code] and [code]n[/code] are " +"[b]inclusive[/b] and [b]exclusive[/b], respectively. The argument [code]s[/" +"code] [b]can[/b] be negative, but not [code]0[/code]. If [code]s[/code] is " +"[code]0[/code], an error message is printed.\n" +"[method range] converts all arguments to [int] before processing.\n" +"[b]Note:[/b] Returns an empty array if no value meets the value constraint " +"(e.g. [code]range(2, 5, -1)[/code] or [code]range(5, 5, 1)[/code]).\n" +"Examples:\n" "[codeblock]\n" -"[0, 1, 2, 3]\n" -"[2, 3, 4]\n" -"[0, 2, 4]\n" +"print(range(4)) # Prints [0, 1, 2, 3]\n" +"print(range(2, 5)) # Prints [2, 3, 4]\n" +"print(range(0, 6, 2)) # Prints [0, 2, 4]\n" +"print(range(4, 1, -1)) # Prints [4, 3, 2]\n" "[/codeblock]\n" "To iterate over an [Array] backwards, use:\n" "[codeblock]\n" "var array = [3, 6, 9]\n" -"var i := array.size() - 1\n" -"while i >= 0:\n" -" print(array[i])\n" -" i -= 1\n" +"for i in range(array.size(), 0, -1):\n" +" print(array[i - 1])\n" "[/codeblock]\n" "Output:\n" "[codeblock]\n" @@ -4107,17 +4107,24 @@ msgid "Maximum value for the mode enum." msgstr "" #: doc/classes/AnimatedSprite.xml -msgid "Sprite node that can use multiple textures for animation." +msgid "" +"Sprite node that contains multiple textures as frames to play for animation." msgstr "" #: doc/classes/AnimatedSprite.xml msgid "" -"Animations are created using a [SpriteFrames] resource, which can be " -"configured in the editor via the SpriteFrames panel.\n" -"[b]Note:[/b] You can associate a set of normal maps by creating additional " -"[SpriteFrames] resources with a [code]_normal[/code] suffix. For example, " -"having 2 [SpriteFrames] resources [code]run[/code] and [code]run_normal[/" -"code] will make it so the [code]run[/code] animation uses the normal map." +"[AnimatedSprite] is similar to the [Sprite] node, except it carries multiple " +"textures as animation frames. Animations are created using a [SpriteFrames] " +"resource, which allows you to import image files (or a folder containing " +"said files) to provide the animation frames for the sprite. The " +"[SpriteFrames] resource can be configured in the editor via the SpriteFrames " +"bottom panel.\n" +"[b]Note:[/b] You can associate a set of normal or specular maps by creating " +"additional [SpriteFrames] resources with a [code]_normal[/code] or " +"[code]_specular[/code] suffix. For example, having 3 [SpriteFrames] " +"resources [code]run[/code], [code]run_normal[/code], and [code]run_specular[/" +"code] will make it so the [code]run[/code] animation uses normal and " +"specular maps." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml @@ -4145,9 +4152,9 @@ msgstr "" msgid "Stops the current animation (does not reset the frame counter)." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml +#: doc/classes/AnimatedSprite.xml msgid "" -"The current animation from the [code]frames[/code] resource. If this value " +"The current animation from the [member frames] resource. If this value " "changes, the [code]frame[/code] counter is reset." msgstr "" @@ -4171,8 +4178,11 @@ msgstr "" msgid "The displayed animation frame's index." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml -msgid "The [SpriteFrames] resource containing the animation(s)." +#: doc/classes/AnimatedSprite.xml +msgid "" +"The [SpriteFrames] resource containing the animation(s). Allows you the " +"option to load, edit, clear, make unique and save the states of the " +"[SpriteFrames] resource." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/Sprite.xml @@ -4224,6 +4234,16 @@ msgid "" "provided, the current animation is played." msgstr "" +#: doc/classes/AnimatedSprite3D.xml +msgid "" +"The current animation from the [code]frames[/code] resource. If this value " +"changes, the [code]frame[/code] counter is reset." +msgstr "" + +#: doc/classes/AnimatedSprite3D.xml +msgid "The [SpriteFrames] resource containing the animation(s)." +msgstr "" + #: doc/classes/AnimatedTexture.xml msgid "Proxy texture for simple frame-based animations." msgstr "" @@ -4739,11 +4759,11 @@ msgstr "" msgid "No interpolation (nearest value)." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Linear interpolation." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Cubic interpolation." msgstr "" @@ -5778,7 +5798,10 @@ msgid "" "Seeks the animation to the [code]seconds[/code] point in time (in seconds). " "If [code]update[/code] is [code]true[/code], the animation updates too, " "otherwise it updates at process time. Events between the current frame and " -"[code]seconds[/code] are skipped." +"[code]seconds[/code] are skipped.\n" +"[b]Note:[/b] Seeking to the end of the animation doesn't emit [signal " +"animation_finished]. If you want to skip animation and emit the signal, use " +"[method advance]." msgstr "" #: doc/classes/AnimationPlayer.xml @@ -6968,7 +6991,10 @@ msgid "" "[code]0[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "Returns the number of times an element is in the array." msgstr "" @@ -7013,10 +7039,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array for a value and returns its index or [code]-1[/code] if " -"not found. Optionally, the initial search index can be passed." +"not found. Optionally, the initial search index can be passed. Returns " +"[code]-1[/code] if [code]from[/code] is out of bounds." msgstr "" #: doc/classes/Array.xml @@ -7154,11 +7184,15 @@ msgid "" "[code]null[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array in reverse order. Optionally, a start search index can be " "passed. If negative, the start index is considered relative to the end of " -"the array." +"the array. If the adjusted start index is out of bounds, this method " +"searches from the end of the array." msgstr "" #: doc/classes/Array.xml @@ -8293,7 +8327,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -8515,7 +8549,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -11626,17 +11660,17 @@ msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a normal vector in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a 3D position in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml @@ -13885,7 +13919,9 @@ msgstr "" #: doc/classes/CollisionPolygon2D.xml msgid "" "If [code]true[/code], only edges that face up, relative to " -"[CollisionPolygon2D]'s rotation, will collide with other objects." +"[CollisionPolygon2D]'s rotation, will collide with other objects.\n" +"[b]Note:[/b] This property has no effect if this [CollisionPolygon2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionPolygon2D.xml @@ -13981,7 +14017,9 @@ msgstr "" #: doc/classes/CollisionShape2D.xml msgid "" "Sets whether this collision shape should only detect collision on one side " -"(top or bottom)." +"(top or bottom).\n" +"[b]Note:[/b] This property has no effect if this [CollisionShape2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionShape2D.xml @@ -22387,6 +22425,10 @@ msgid "" "same behavior." msgstr "" +#: doc/classes/EditorSpinSlider.xml +msgid "If [code]true[/code], the slider is hidden." +msgstr "" + #: doc/classes/EditorVCSInterface.xml msgid "" "Version Control System (VCS) interface, which reads and writes to the local " @@ -25968,9 +26010,22 @@ msgid "Gradient's colors returned as a [PoolColorArray]." msgstr "" #: doc/classes/Gradient.xml +msgid "" +"Defines how the colors between points of the gradient are interpolated. See " +"[enum InterpolationMode] for available modes." +msgstr "" + +#: doc/classes/Gradient.xml msgid "Gradient's offsets returned as a [PoolRealArray]." msgstr "" +#: doc/classes/Gradient.xml +msgid "" +"Constant interpolation, color changes abruptly at each point and stays " +"uniform between. This might cause visible aliasing when used for a gradient " +"texture in some cases." +msgstr "" + #: doc/classes/GradientTexture.xml msgid "Gradient-filled texture." msgstr "" @@ -34492,13 +34547,13 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used easing from [enum Tween.EaseType]. If not set, the " "default easing is used from the [SceneTreeTween] that contains this Tweener." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used transition from [enum Tween.TransitionType]. If not " "set, the default transition is used from the [SceneTreeTween] that contains " @@ -35204,6 +35259,12 @@ msgid "Creates the agent." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]agent[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" @@ -35267,6 +35328,12 @@ msgid "Create a new map." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation agents [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns the map cell size." msgstr "" @@ -35293,6 +35360,12 @@ msgid "Returns the navigation path to reach the destination from the origin." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation regions [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns [code]true[/code] if the map is active." msgstr "" @@ -35314,6 +35387,12 @@ msgid "Creates a new region." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]region[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the map for the region." msgstr "" @@ -35786,17 +35865,57 @@ msgid "Represents the size of the [enum SourceGeometryMode] enum." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "This class is responsible for creating and clearing navigation meshes." +msgid "Helper class for creating and clearing navigation meshes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml msgid "" -"Bakes the navigation mesh. This will allow you to use pathfinding with the " -"navigation system." +"This class is responsible for creating and clearing 3D navigation meshes " +"used as [NavigationMesh] resources inside [NavigationMeshInstance]. The " +"[NavigationMeshGenerator] has very limited to no use for 2D as the " +"navigation mesh baking process expects 3D node types and 3D source geometry " +"to parse.\n" +"The entire navigation mesh baking is best done in a separate thread as the " +"voxelization, collision tests and mesh optimization steps involved are very " +"performance and time hungry operations.\n" +"Navigation mesh baking happens in multiple steps and the result depends on " +"3D source geometry and properties of the [NavigationMesh] resource. In the " +"first step, starting from a root node and depending on [NavigationMesh] " +"properties all valid 3D source geometry nodes are collected from the " +"[SceneTree]. Second, all collected nodes are parsed for their relevant 3D " +"geometry data and a combined 3D mesh is build. Due to the many different " +"types of parsable objects, from normal [MeshInstance]s to [CSGShape]s or " +"various [CollisionObject]s, some operations to collect geometry data can " +"trigger [VisualServer] and [PhysicsServer] synchronizations. Server " +"synchronization can have a negative effect on baking time or framerate as it " +"often involves [Mutex] locking for thread security. Many parsable objects " +"and the continuous synchronization with other threaded Servers can increase " +"the baking time significantly. On the other hand only a few but very large " +"and complex objects will take some time to prepare for the Servers which can " +"noticeably stall the next frame render. As a general rule the total amount " +"of parsable objects and their individual size and complexity should be " +"balanced to avoid framerate issues or very long baking times. The combined " +"mesh is then passed to the Recast Navigation Object to test the source " +"geometry for walkable terrain suitable to [NavigationMesh] agent properties " +"by creating a voxel world around the meshes bounding area.\n" +"The finalized navigation mesh is then returned and stored inside the " +"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes." +msgstr "" + +#: doc/classes/NavigationMeshGenerator.xml +msgid "" +"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " +"nodes under the provided [code]root_node[/code] or a specific group of nodes " +"for potential source geometry. The parse behavior can be controlled with the " +"[member NavigationMesh.geometry/parsed_geometry_type] and [member " +"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[NavigationMesh] resource." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "Clears the navigation mesh." +msgid "" +"Removes all polygons and vertices from the provided [code]nav_mesh[/code] " +"resource." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -35817,7 +35936,10 @@ msgid "" "thread is useful because navigation baking is not a cheap operation. When it " "is completed, it automatically sets the new [NavigationMesh]. Please note " "that baking on separate thread may be very slow if geometry is parsed from " -"meshes as async access to each mesh involves heavy synchronization." +"meshes as async access to each mesh involves heavy synchronization. Also, " +"please note that baking on a separate thread is automatically disabled on " +"operating systems that cannot use threads (such as HTML5 with threads " +"disabled)." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -35863,6 +35985,10 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle.xml +msgid "Returns the [RID] of this obstacle on the [NavigationServer]." +msgstr "" + +#: doc/classes/NavigationObstacle.xml msgid "" "Sets the [Navigation] node used by the obstacle. Useful when you don't want " "to make the obstacle a child of a [Navigation] node." @@ -35899,6 +36025,10 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle2D.xml +msgid "Returns the [RID] of this obstacle on the [Navigation2DServer]." +msgstr "" + +#: doc/classes/NavigationObstacle2D.xml msgid "" "Sets the [Navigation2D] node used by the obstacle. Useful when you don't " "want to make the obstacle a child of a [Navigation2D] node." @@ -37083,7 +37213,7 @@ msgstr "" #: doc/classes/Node.xml msgid "" "Returns [code]true[/code] if the physics interpolated flag is set for this " -"Node (see [method set_physics_interpolated]).\n" +"Node (see [member physics_interpolation_mode]).\n" "[b]Note:[/b] Interpolation will only be active is both the flag is set " "[b]and[/b] physics interpolation is enabled within the [SceneTree]. This can " "be tested using [method is_physics_interpolated_and_enabled]." @@ -37091,8 +37221,8 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Returns [code]true[/code] if physics interpolation is enabled (see [method " -"set_physics_interpolated]) [b]and[/b] enabled in the [SceneTree].\n" +"Returns [code]true[/code] if physics interpolation is enabled (see [member " +"physics_interpolation_mode]) [b]and[/b] enabled in the [SceneTree].\n" "This is a convenience version of [method is_physics_interpolated] that also " "checks whether physics interpolation is enabled globally.\n" "See [member SceneTree.physics_interpolation] and [member ProjectSettings." @@ -37386,14 +37516,6 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Enables or disables physics interpolation per node, offering a finer grain " -"of control than turning physics interpolation on and off globally.\n" -"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " -"interpolation can sometimes give superior results." -msgstr "" - -#: doc/classes/Node.xml -msgid "" "Enables or disables physics (i.e. fixed framerate) processing. When a node " "is being processed, it will receive a [constant " "NOTIFICATION_PHYSICS_PROCESS] at a fixed (usually 60 FPS, see [member Engine." @@ -37526,6 +37648,15 @@ msgstr "" #: doc/classes/Node.xml msgid "" +"Allows enabling or disabling physics interpolation per node, offering a " +"finer grain of control than turning physics interpolation on and off " +"globally.\n" +"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " +"interpolation can sometimes give superior results." +msgstr "" + +#: doc/classes/Node.xml +msgid "" "The node's priority in the execution order of the enabled processing " "callbacks (i.e. [constant NOTIFICATION_PROCESS], [constant " "NOTIFICATION_PHYSICS_PROCESS] and their internal counterparts). Nodes whose " @@ -37687,6 +37818,24 @@ msgid "Continue to process regardless of the [SceneTree] pause state." msgstr "" #: doc/classes/Node.xml +msgid "" +"Inherits physics interpolation mode from the node's parent. For the root " +"node, it is equivalent to [constant PHYSICS_INTERPOLATION_MODE_ON]. Default." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn off physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn on physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml msgid "Duplicate the node's signals." msgstr "" @@ -38927,7 +39076,7 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" -"Returns the ID of the selected item, or [code]0[/code] if no item is " +"Returns the ID of the selected item, or [code]-1[/code] if no item is " "selected." msgstr "" @@ -38949,7 +39098,8 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" "Selects an item by index and makes it the current item. This will work even " -"if the item is disabled." +"if the item is disabled.\n" +"Passing [code]-1[/code] as the index deselects any currently selected item." msgstr "" #: doc/classes/OptionButton.xml @@ -44276,6 +44426,15 @@ msgid "" "should always be preferred." msgstr "" +#: doc/classes/PoolByteArray.xml doc/classes/PoolColorArray.xml +#: doc/classes/PoolIntArray.xml doc/classes/PoolRealArray.xml +#: doc/classes/PoolStringArray.xml doc/classes/PoolVector2Array.xml +#: doc/classes/PoolVector3Array.xml +msgid "" +"Returns [code]true[/code] if the array contains the given value.\n" +"[b]Note:[/b] This is equivalent to using the [code]in[/code] operator." +msgstr "" + #: doc/classes/PoolByteArray.xml msgid "" "Returns a hexadecimal representation of this array as a [String].\n" @@ -45069,6 +45228,10 @@ msgid "[Font] used for the menu items." msgstr "" #: doc/classes/PopupMenu.xml +msgid "[Font] used for the labeled separator." +msgstr "" + +#: doc/classes/PopupMenu.xml msgid "[Texture] icon for the checked checkbox items." msgstr "" @@ -48514,19 +48677,6 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used easing from [enum Tween.EaseType]. If not set, the " -"default easing is used from the [Tween] that contains this Tweener." -msgstr "" - -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used transition from [enum Tween.TransitionType]. If not " -"set, the default transition is used from the [Tween] that contains this " -"Tweener." -msgstr "" - #: doc/classes/ProximityGroup.xml msgid "General-purpose 3D proximity detection node." msgstr "" @@ -53356,8 +53506,15 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape touches another. If there are " -"no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape touches another.\n" +"If there are no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the shape to check collisions with " "([code]with_shape[/code]), and the transformation matrix of that shape " @@ -53378,8 +53535,16 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape would touch another, if a " -"given movement was applied. If there are no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape would touch another, " +"if a given movement was applied.\n" +"If there would be no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the movement to test on this shape " "([code]local_motion[/code]), the shape to check collisions with " diff --git a/doc/translations/it.po b/doc/translations/it.po index f5f588a6ae..31cfb31aca 100644 --- a/doc/translations/it.po +++ b/doc/translations/it.po @@ -1508,12 +1508,14 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml +#, fuzzy msgid "" -"Random range, any floating point value between [code]from[/code] and " -"[code]to[/code].\n" +"Returns a random floating point value between [code]from[/code] and " +"[code]to[/code] (both endpoints inclusive).\n" "[codeblock]\n" "prints(rand_range(0, 1), rand_range(0, 1)) # Prints e.g. 0.135591 0.405263\n" -"[/codeblock]" +"[/codeblock]\n" +"[b]Note:[/b] This is equivalent to [code]randf() * (to - from) + from[/code]." msgstr "" "Un range casuale, un qualsiasi numero in virgola mobile tra [code]from[/" "code] e [code]to[/code]\n" @@ -1588,37 +1590,36 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Returns an array with the given range. Range can be 1 argument [code]N[/" -"code] (0 to [code]N[/code] - 1), two arguments ([code]initial[/code], " -"[code]final - 1[/code]) or three arguments ([code]initial[/code], " -"[code]final - 1[/code], [code]increment[/code]). Returns an empty array if " -"the range isn't valid (e.g. [code]range(2, 5, -1)[/code] or [code]range(5, " -"5, 1)[/code]).\n" -"Returns an array with the given range. [code]range()[/code] can have 1 " -"argument N ([code]0[/code] to [code]N - 1[/code]), two arguments " -"([code]initial[/code], [code]final - 1[/code]) or three arguments " -"([code]initial[/code], [code]final - 1[/code], [code]increment[/code]). " -"[code]increment[/code] can be negative. If [code]increment[/code] is " -"negative, [code]final - 1[/code] will become [code]final + 1[/code]. Also, " -"the initial value must be greater than the final value for the loop to run.\n" -"[codeblock]\n" -"print(range(4))\n" -"print(range(2, 5))\n" -"print(range(0, 6, 2))\n" -"[/codeblock]\n" -"Output:\n" +"Returns an array with the given range. [method range] can be called in three " +"ways:\n" +"[code]range(n: int)[/code]: Starts from 0, increases by steps of 1, and " +"stops [i]before[/i] [code]n[/code]. The argument [code]n[/code] is " +"[b]exclusive[/b].\n" +"[code]range(b: int, n: int)[/code]: Starts from [code]b[/code], increases by " +"steps of 1, and stops [i]before[/i] [code]n[/code]. The arguments [code]b[/" +"code] and [code]n[/code] are [b]inclusive[/b] and [b]exclusive[/b], " +"respectively.\n" +"[code]range(b: int, n: int, s: int)[/code]: Starts from [code]b[/code], " +"increases/decreases by steps of [code]s[/code], and stops [i]before[/i] " +"[code]n[/code]. The arguments [code]b[/code] and [code]n[/code] are " +"[b]inclusive[/b] and [b]exclusive[/b], respectively. The argument [code]s[/" +"code] [b]can[/b] be negative, but not [code]0[/code]. If [code]s[/code] is " +"[code]0[/code], an error message is printed.\n" +"[method range] converts all arguments to [int] before processing.\n" +"[b]Note:[/b] Returns an empty array if no value meets the value constraint " +"(e.g. [code]range(2, 5, -1)[/code] or [code]range(5, 5, 1)[/code]).\n" +"Examples:\n" "[codeblock]\n" -"[0, 1, 2, 3]\n" -"[2, 3, 4]\n" -"[0, 2, 4]\n" +"print(range(4)) # Prints [0, 1, 2, 3]\n" +"print(range(2, 5)) # Prints [2, 3, 4]\n" +"print(range(0, 6, 2)) # Prints [0, 2, 4]\n" +"print(range(4, 1, -1)) # Prints [4, 3, 2]\n" "[/codeblock]\n" "To iterate over an [Array] backwards, use:\n" "[codeblock]\n" "var array = [3, 6, 9]\n" -"var i := array.size() - 1\n" -"while i >= 0:\n" -" print(array[i])\n" -" i -= 1\n" +"for i in range(array.size(), 0, -1):\n" +" print(array[i - 1])\n" "[/codeblock]\n" "Output:\n" "[codeblock]\n" @@ -5100,17 +5101,24 @@ msgid "Maximum value for the mode enum." msgstr "" #: doc/classes/AnimatedSprite.xml -msgid "Sprite node that can use multiple textures for animation." +msgid "" +"Sprite node that contains multiple textures as frames to play for animation." msgstr "" #: doc/classes/AnimatedSprite.xml msgid "" -"Animations are created using a [SpriteFrames] resource, which can be " -"configured in the editor via the SpriteFrames panel.\n" -"[b]Note:[/b] You can associate a set of normal maps by creating additional " -"[SpriteFrames] resources with a [code]_normal[/code] suffix. For example, " -"having 2 [SpriteFrames] resources [code]run[/code] and [code]run_normal[/" -"code] will make it so the [code]run[/code] animation uses the normal map." +"[AnimatedSprite] is similar to the [Sprite] node, except it carries multiple " +"textures as animation frames. Animations are created using a [SpriteFrames] " +"resource, which allows you to import image files (or a folder containing " +"said files) to provide the animation frames for the sprite. The " +"[SpriteFrames] resource can be configured in the editor via the SpriteFrames " +"bottom panel.\n" +"[b]Note:[/b] You can associate a set of normal or specular maps by creating " +"additional [SpriteFrames] resources with a [code]_normal[/code] or " +"[code]_specular[/code] suffix. For example, having 3 [SpriteFrames] " +"resources [code]run[/code], [code]run_normal[/code], and [code]run_specular[/" +"code] will make it so the [code]run[/code] animation uses normal and " +"specular maps." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml @@ -5138,9 +5146,9 @@ msgstr "" msgid "Stops the current animation (does not reset the frame counter)." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml +#: doc/classes/AnimatedSprite.xml msgid "" -"The current animation from the [code]frames[/code] resource. If this value " +"The current animation from the [member frames] resource. If this value " "changes, the [code]frame[/code] counter is reset." msgstr "" @@ -5164,8 +5172,11 @@ msgstr "" msgid "The displayed animation frame's index." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml -msgid "The [SpriteFrames] resource containing the animation(s)." +#: doc/classes/AnimatedSprite.xml +msgid "" +"The [SpriteFrames] resource containing the animation(s). Allows you the " +"option to load, edit, clear, make unique and save the states of the " +"[SpriteFrames] resource." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/Sprite.xml @@ -5217,6 +5228,16 @@ msgid "" "provided, the current animation is played." msgstr "" +#: doc/classes/AnimatedSprite3D.xml +msgid "" +"The current animation from the [code]frames[/code] resource. If this value " +"changes, the [code]frame[/code] counter is reset." +msgstr "" + +#: doc/classes/AnimatedSprite3D.xml +msgid "The [SpriteFrames] resource containing the animation(s)." +msgstr "" + #: doc/classes/AnimatedTexture.xml msgid "Proxy texture for simple frame-based animations." msgstr "" @@ -5733,12 +5754,12 @@ msgstr "" msgid "No interpolation (nearest value)." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml #, fuzzy msgid "Linear interpolation." msgstr "Interpolazione lineare." -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml #, fuzzy msgid "Cubic interpolation." msgstr "Interpolazione cubica." @@ -6775,7 +6796,10 @@ msgid "" "Seeks the animation to the [code]seconds[/code] point in time (in seconds). " "If [code]update[/code] is [code]true[/code], the animation updates too, " "otherwise it updates at process time. Events between the current frame and " -"[code]seconds[/code] are skipped." +"[code]seconds[/code] are skipped.\n" +"[b]Note:[/b] Seeking to the end of the animation doesn't emit [signal " +"animation_finished]. If you want to skip animation and emit the signal, use " +"[method advance]." msgstr "" #: doc/classes/AnimationPlayer.xml @@ -7981,7 +8005,10 @@ msgid "" "[code]0[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "Returns the number of times an element is in the array." msgstr "" @@ -8026,10 +8053,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array for a value and returns its index or [code]-1[/code] if " -"not found. Optionally, the initial search index can be passed." +"not found. Optionally, the initial search index can be passed. Returns " +"[code]-1[/code] if [code]from[/code] is out of bounds." msgstr "" #: doc/classes/Array.xml @@ -8167,11 +8198,15 @@ msgid "" "[code]null[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array in reverse order. Optionally, a start search index can be " "passed. If negative, the start index is considered relative to the end of " -"the array." +"the array. If the adjusted start index is out of bounds, this method " +"searches from the end of the array." msgstr "" #: doc/classes/Array.xml @@ -9310,7 +9345,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -9532,7 +9567,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -12654,17 +12689,17 @@ msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a normal vector in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a 3D position in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml @@ -14924,7 +14959,9 @@ msgstr "" #: doc/classes/CollisionPolygon2D.xml msgid "" "If [code]true[/code], only edges that face up, relative to " -"[CollisionPolygon2D]'s rotation, will collide with other objects." +"[CollisionPolygon2D]'s rotation, will collide with other objects.\n" +"[b]Note:[/b] This property has no effect if this [CollisionPolygon2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionPolygon2D.xml @@ -15021,7 +15058,9 @@ msgstr "" #: doc/classes/CollisionShape2D.xml msgid "" "Sets whether this collision shape should only detect collision on one side " -"(top or bottom)." +"(top or bottom).\n" +"[b]Note:[/b] This property has no effect if this [CollisionShape2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionShape2D.xml @@ -23531,6 +23570,11 @@ msgid "" "same behavior." msgstr "" +#: doc/classes/EditorSpinSlider.xml +#, fuzzy +msgid "If [code]true[/code], the slider is hidden." +msgstr "Ritorna [code]true[/code] se [Rect2i] è piano o vuoto." + #: doc/classes/EditorVCSInterface.xml msgid "" "Version Control System (VCS) interface, which reads and writes to the local " @@ -27129,9 +27173,22 @@ msgid "Gradient's colors returned as a [PoolColorArray]." msgstr "" #: doc/classes/Gradient.xml +msgid "" +"Defines how the colors between points of the gradient are interpolated. See " +"[enum InterpolationMode] for available modes." +msgstr "" + +#: doc/classes/Gradient.xml msgid "Gradient's offsets returned as a [PoolRealArray]." msgstr "" +#: doc/classes/Gradient.xml +msgid "" +"Constant interpolation, color changes abruptly at each point and stays " +"uniform between. This might cause visible aliasing when used for a gradient " +"texture in some cases." +msgstr "" + #: doc/classes/GradientTexture.xml msgid "Gradient-filled texture." msgstr "" @@ -35686,13 +35743,13 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used easing from [enum Tween.EaseType]. If not set, the " "default easing is used from the [SceneTreeTween] that contains this Tweener." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used transition from [enum Tween.TransitionType]. If not " "set, the default transition is used from the [SceneTreeTween] that contains " @@ -36405,6 +36462,12 @@ msgid "Creates the agent." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]agent[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "Ritorna [code]true[/code] se [Rect2i] contiene un punto." @@ -36475,6 +36538,12 @@ msgid "Create a new map." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation agents [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns the map cell size." msgstr "Restituisce l'arco-seno del parametro." @@ -36502,6 +36571,12 @@ msgid "Returns the navigation path to reach the destination from the origin." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation regions [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns [code]true[/code] if the map is active." msgstr "Ritorna [code]true[/code] se [Rect2i] è piano o vuoto." @@ -36525,6 +36600,12 @@ msgid "Creates a new region." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]region[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Sets the map for the region." msgstr "Restituisce il seno del parametro." @@ -37010,19 +37091,60 @@ msgid "Represents the size of the [enum SourceGeometryMode] enum." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "This class is responsible for creating and clearing navigation meshes." +msgid "Helper class for creating and clearing navigation meshes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml msgid "" -"Bakes the navigation mesh. This will allow you to use pathfinding with the " -"navigation system." +"This class is responsible for creating and clearing 3D navigation meshes " +"used as [NavigationMesh] resources inside [NavigationMeshInstance]. The " +"[NavigationMeshGenerator] has very limited to no use for 2D as the " +"navigation mesh baking process expects 3D node types and 3D source geometry " +"to parse.\n" +"The entire navigation mesh baking is best done in a separate thread as the " +"voxelization, collision tests and mesh optimization steps involved are very " +"performance and time hungry operations.\n" +"Navigation mesh baking happens in multiple steps and the result depends on " +"3D source geometry and properties of the [NavigationMesh] resource. In the " +"first step, starting from a root node and depending on [NavigationMesh] " +"properties all valid 3D source geometry nodes are collected from the " +"[SceneTree]. Second, all collected nodes are parsed for their relevant 3D " +"geometry data and a combined 3D mesh is build. Due to the many different " +"types of parsable objects, from normal [MeshInstance]s to [CSGShape]s or " +"various [CollisionObject]s, some operations to collect geometry data can " +"trigger [VisualServer] and [PhysicsServer] synchronizations. Server " +"synchronization can have a negative effect on baking time or framerate as it " +"often involves [Mutex] locking for thread security. Many parsable objects " +"and the continuous synchronization with other threaded Servers can increase " +"the baking time significantly. On the other hand only a few but very large " +"and complex objects will take some time to prepare for the Servers which can " +"noticeably stall the next frame render. As a general rule the total amount " +"of parsable objects and their individual size and complexity should be " +"balanced to avoid framerate issues or very long baking times. The combined " +"mesh is then passed to the Recast Navigation Object to test the source " +"geometry for walkable terrain suitable to [NavigationMesh] agent properties " +"by creating a voxel world around the meshes bounding area.\n" +"The finalized navigation mesh is then returned and stored inside the " +"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "Clears the navigation mesh." +msgid "" +"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " +"nodes under the provided [code]root_node[/code] or a specific group of nodes " +"for potential source geometry. The parse behavior can be controlled with the " +"[member NavigationMesh.geometry/parsed_geometry_type] and [member " +"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[NavigationMesh] resource." msgstr "" +#: doc/classes/NavigationMeshGenerator.xml +#, fuzzy +msgid "" +"Removes all polygons and vertices from the provided [code]nav_mesh[/code] " +"resource." +msgstr "Calcola il prodotto vettoriale di questo vettore e [code]with[/code]." + #: doc/classes/NavigationMeshInstance.xml msgid "An instance of a [NavigationMesh]." msgstr "" @@ -37041,7 +37163,10 @@ msgid "" "thread is useful because navigation baking is not a cheap operation. When it " "is completed, it automatically sets the new [NavigationMesh]. Please note " "that baking on separate thread may be very slow if geometry is parsed from " -"meshes as async access to each mesh involves heavy synchronization." +"meshes as async access to each mesh involves heavy synchronization. Also, " +"please note that baking on a separate thread is automatically disabled on " +"operating systems that cannot use threads (such as HTML5 with threads " +"disabled)." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -37088,6 +37213,11 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle.xml +#, fuzzy +msgid "Returns the [RID] of this obstacle on the [NavigationServer]." +msgstr "Restituisce il seno del parametro." + +#: doc/classes/NavigationObstacle.xml msgid "" "Sets the [Navigation] node used by the obstacle. Useful when you don't want " "to make the obstacle a child of a [Navigation] node." @@ -37124,6 +37254,11 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle2D.xml +#, fuzzy +msgid "Returns the [RID] of this obstacle on the [Navigation2DServer]." +msgstr "Restituisce il seno del parametro." + +#: doc/classes/NavigationObstacle2D.xml msgid "" "Sets the [Navigation2D] node used by the obstacle. Useful when you don't " "want to make the obstacle a child of a [Navigation2D] node." @@ -38313,7 +38448,7 @@ msgstr "" #: doc/classes/Node.xml msgid "" "Returns [code]true[/code] if the physics interpolated flag is set for this " -"Node (see [method set_physics_interpolated]).\n" +"Node (see [member physics_interpolation_mode]).\n" "[b]Note:[/b] Interpolation will only be active is both the flag is set " "[b]and[/b] physics interpolation is enabled within the [SceneTree]. This can " "be tested using [method is_physics_interpolated_and_enabled]." @@ -38321,8 +38456,8 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Returns [code]true[/code] if physics interpolation is enabled (see [method " -"set_physics_interpolated]) [b]and[/b] enabled in the [SceneTree].\n" +"Returns [code]true[/code] if physics interpolation is enabled (see [member " +"physics_interpolation_mode]) [b]and[/b] enabled in the [SceneTree].\n" "This is a convenience version of [method is_physics_interpolated] that also " "checks whether physics interpolation is enabled globally.\n" "See [member SceneTree.physics_interpolation] and [member ProjectSettings." @@ -38616,14 +38751,6 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Enables or disables physics interpolation per node, offering a finer grain " -"of control than turning physics interpolation on and off globally.\n" -"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " -"interpolation can sometimes give superior results." -msgstr "" - -#: doc/classes/Node.xml -msgid "" "Enables or disables physics (i.e. fixed framerate) processing. When a node " "is being processed, it will receive a [constant " "NOTIFICATION_PHYSICS_PROCESS] at a fixed (usually 60 FPS, see [member Engine." @@ -38756,6 +38883,15 @@ msgstr "" #: doc/classes/Node.xml msgid "" +"Allows enabling or disabling physics interpolation per node, offering a " +"finer grain of control than turning physics interpolation on and off " +"globally.\n" +"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " +"interpolation can sometimes give superior results." +msgstr "" + +#: doc/classes/Node.xml +msgid "" "The node's priority in the execution order of the enabled processing " "callbacks (i.e. [constant NOTIFICATION_PROCESS], [constant " "NOTIFICATION_PHYSICS_PROCESS] and their internal counterparts). Nodes whose " @@ -38917,6 +39053,24 @@ msgid "Continue to process regardless of the [SceneTree] pause state." msgstr "" #: doc/classes/Node.xml +msgid "" +"Inherits physics interpolation mode from the node's parent. For the root " +"node, it is equivalent to [constant PHYSICS_INTERPOLATION_MODE_ON]. Default." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn off physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn on physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml msgid "Duplicate the node's signals." msgstr "" @@ -40165,7 +40319,7 @@ msgstr "Calcola il prodotto vettoriale di questo vettore e [code]b[/code]." #: doc/classes/OptionButton.xml msgid "" -"Returns the ID of the selected item, or [code]0[/code] if no item is " +"Returns the ID of the selected item, or [code]-1[/code] if no item is " "selected." msgstr "" @@ -40187,7 +40341,8 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" "Selects an item by index and makes it the current item. This will work even " -"if the item is disabled." +"if the item is disabled.\n" +"Passing [code]-1[/code] as the index deselects any currently selected item." msgstr "" #: doc/classes/OptionButton.xml @@ -45558,6 +45713,16 @@ msgid "" "should always be preferred." msgstr "" +#: doc/classes/PoolByteArray.xml doc/classes/PoolColorArray.xml +#: doc/classes/PoolIntArray.xml doc/classes/PoolRealArray.xml +#: doc/classes/PoolStringArray.xml doc/classes/PoolVector2Array.xml +#: doc/classes/PoolVector3Array.xml +#, fuzzy +msgid "" +"Returns [code]true[/code] if the array contains the given value.\n" +"[b]Note:[/b] This is equivalent to using the [code]in[/code] operator." +msgstr "Ritorna [code]true[/code] se [code]s[/code] è zero o quasi zero." + #: doc/classes/PoolByteArray.xml msgid "" "Returns a hexadecimal representation of this array as a [String].\n" @@ -46354,6 +46519,10 @@ msgid "[Font] used for the menu items." msgstr "" #: doc/classes/PopupMenu.xml +msgid "[Font] used for the labeled separator." +msgstr "" + +#: doc/classes/PopupMenu.xml msgid "[Texture] icon for the checked checkbox items." msgstr "" @@ -49800,19 +49969,6 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used easing from [enum Tween.EaseType]. If not set, the " -"default easing is used from the [Tween] that contains this Tweener." -msgstr "" - -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used transition from [enum Tween.TransitionType]. If not " -"set, the default transition is used from the [Tween] that contains this " -"Tweener." -msgstr "" - #: doc/classes/ProximityGroup.xml msgid "General-purpose 3D proximity detection node." msgstr "" @@ -54653,8 +54809,15 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape touches another. If there are " -"no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape touches another.\n" +"If there are no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the shape to check collisions with " "([code]with_shape[/code]), and the transformation matrix of that shape " @@ -54675,8 +54838,16 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape would touch another, if a " -"given movement was applied. If there are no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape would touch another, " +"if a given movement was applied.\n" +"If there would be no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the movement to test on this shape " "([code]local_motion[/code]), the shape to check collisions with " diff --git a/doc/translations/ja.po b/doc/translations/ja.po index 463133444e..1b5c884316 100644 --- a/doc/translations/ja.po +++ b/doc/translations/ja.po @@ -1463,12 +1463,14 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml +#, fuzzy msgid "" -"Random range, any floating point value between [code]from[/code] and " -"[code]to[/code].\n" +"Returns a random floating point value between [code]from[/code] and " +"[code]to[/code] (both endpoints inclusive).\n" "[codeblock]\n" "prints(rand_range(0, 1), rand_range(0, 1)) # Prints e.g. 0.135591 0.405263\n" -"[/codeblock]" +"[/codeblock]\n" +"[b]Note:[/b] This is equivalent to [code]randf() * (to - from) + from[/code]." msgstr "" "[code]from[/code] ã‹ã‚‰ [code]to[/code] ã¾ã§ã®é–“ã§ã€ãƒ©ãƒ³ãƒ€ãƒ ãªå€¤ã‚’æµ®å‹•å°æ•°ç‚¹æ•°" "ã¨ã—ã¦ç”Ÿæˆã—ã¾ã™ã€‚\n" @@ -1538,39 +1540,37 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml -#, fuzzy msgid "" -"Returns an array with the given range. Range can be 1 argument [code]N[/" -"code] (0 to [code]N[/code] - 1), two arguments ([code]initial[/code], " -"[code]final - 1[/code]) or three arguments ([code]initial[/code], " -"[code]final - 1[/code], [code]increment[/code]). Returns an empty array if " -"the range isn't valid (e.g. [code]range(2, 5, -1)[/code] or [code]range(5, " -"5, 1)[/code]).\n" -"Returns an array with the given range. [code]range()[/code] can have 1 " -"argument N ([code]0[/code] to [code]N - 1[/code]), two arguments " -"([code]initial[/code], [code]final - 1[/code]) or three arguments " -"([code]initial[/code], [code]final - 1[/code], [code]increment[/code]). " -"[code]increment[/code] can be negative. If [code]increment[/code] is " -"negative, [code]final - 1[/code] will become [code]final + 1[/code]. Also, " -"the initial value must be greater than the final value for the loop to run.\n" -"[codeblock]\n" -"print(range(4))\n" -"print(range(2, 5))\n" -"print(range(0, 6, 2))\n" -"[/codeblock]\n" -"Output:\n" +"Returns an array with the given range. [method range] can be called in three " +"ways:\n" +"[code]range(n: int)[/code]: Starts from 0, increases by steps of 1, and " +"stops [i]before[/i] [code]n[/code]. The argument [code]n[/code] is " +"[b]exclusive[/b].\n" +"[code]range(b: int, n: int)[/code]: Starts from [code]b[/code], increases by " +"steps of 1, and stops [i]before[/i] [code]n[/code]. The arguments [code]b[/" +"code] and [code]n[/code] are [b]inclusive[/b] and [b]exclusive[/b], " +"respectively.\n" +"[code]range(b: int, n: int, s: int)[/code]: Starts from [code]b[/code], " +"increases/decreases by steps of [code]s[/code], and stops [i]before[/i] " +"[code]n[/code]. The arguments [code]b[/code] and [code]n[/code] are " +"[b]inclusive[/b] and [b]exclusive[/b], respectively. The argument [code]s[/" +"code] [b]can[/b] be negative, but not [code]0[/code]. If [code]s[/code] is " +"[code]0[/code], an error message is printed.\n" +"[method range] converts all arguments to [int] before processing.\n" +"[b]Note:[/b] Returns an empty array if no value meets the value constraint " +"(e.g. [code]range(2, 5, -1)[/code] or [code]range(5, 5, 1)[/code]).\n" +"Examples:\n" "[codeblock]\n" -"[0, 1, 2, 3]\n" -"[2, 3, 4]\n" -"[0, 2, 4]\n" +"print(range(4)) # Prints [0, 1, 2, 3]\n" +"print(range(2, 5)) # Prints [2, 3, 4]\n" +"print(range(0, 6, 2)) # Prints [0, 2, 4]\n" +"print(range(4, 1, -1)) # Prints [4, 3, 2]\n" "[/codeblock]\n" "To iterate over an [Array] backwards, use:\n" "[codeblock]\n" "var array = [3, 6, 9]\n" -"var i := array.size() - 1\n" -"while i >= 0:\n" -" print(array[i])\n" -" i -= 1\n" +"for i in range(array.size(), 0, -1):\n" +" print(array[i - 1])\n" "[/codeblock]\n" "Output:\n" "[codeblock]\n" @@ -1579,45 +1579,6 @@ msgid "" "3\n" "[/codeblock]" msgstr "" -"与ãˆã‚‰ã‚ŒãŸç¯„囲ã§ã®é…列を返ã—ã¾ã™ã€‚ ç¯„å›²ã®æŒ‡å®šã«ã¯1ã¤ã®å¼•æ•° [code]N[/code] (0 " -"ã‹ã‚‰ [code]N[/code] - 1 ã¾ã§) ã€2ã¤ã®å¼•æ•°([code]initial[/code], [code]final " -"- 1[/code]) ã¾ãŸã¯3ã¤ã®å¼•æ•°([code]initial[/code], [code]final - 1[/code], " -"[code]increment[/code]) ãŒã‚りã¾ã™ã€‚ã‚‚ã—範囲ãŒä¸æ£ãªå€¤ (例ãˆã° " -"[code]range(2, 5, -1)[/code] ã‚„ [code]range(5, 5, 1)[/code]) ã ã£ãŸå ´åˆã¯ç©ºã®" -"é…列ãŒè¿”ã•れã¾ã™ã€‚\n" -"与ãˆã‚‰ã‚ŒãŸç¯„囲ã§ã®é…列を返ã—ã¾ã™ã€‚ [code]range()[/code] ã¯1ã¤ã®å¼•æ•°N " -"([code]0[/code] ã‹ã‚‰ [code]N - 1[/code] ã¾ã§) ã€äºŒã¤ã®å¼•æ•° ([code]initial[/" -"code], [code]final - 1[/code]) ã¾ãŸã¯3ã¤ã®å¼•æ•° ([code]initial[/code], " -"[code]final - 1[/code], [code]increment[/code]) ã‚’ã‚‚ã¡ã¾ã™ã€‚ " -"[code]increment[/code] ã¯è² ã®å€¤ã«ã‚‚ãªã‚Šã¾ã™ã€‚ã‚‚ã— [code]increment[/code] ãŒè² " -"ã®å€¤ãªã‚‰ã°ã€ [code]final - 1[/code] 㯠[code]final + 1[/code] ã«ãªã‚Šã¾ã™ã€‚ã¾" -"ãŸã€ãã® initial ã®å€¤ã‚‚ループを実行ã™ã‚‹ãŸã‚ã« final ã®å€¤ã‚ˆã‚Šå¤§ãããªã‘れã°ã„" -"ã‘ã¾ã›ã‚“。\n" -"[codeblock]\n" -"print(range(4))\n" -"print(range(2, 5))\n" -"print(range(0, 6, 2))\n" -"[/codeblock]\n" -"出力:\n" -"[codeblock]\n" -"[0, 1, 2, 3]\n" -"[2, 3, 4]\n" -"[0, 2, 4]\n" -"[/codeblock]\n" -"[Array] ã‚’é€†é †ã§å‡ºåŠ›ã™ã‚‹ã«ã¯ã€ã“ã®ã‚ˆã†ã«ä½¿ç”¨ã—ã¦ãã ã•ã„:\n" -"[codeblock]\n" -"var array = [3, 6, 9]\n" -"var i := array.size() - 1\n" -"while i >= 0:\n" -" print(array[i])\n" -" i -= 1\n" -"[/codeblock]\n" -"出力:\n" -"[codeblock]\n" -"9\n" -"6\n" -"3\n" -"[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" @@ -5269,17 +5230,25 @@ msgid "Maximum value for the mode enum." msgstr "モード用enumã®æœ€å¤§å€¤ã€‚" #: doc/classes/AnimatedSprite.xml -msgid "Sprite node that can use multiple textures for animation." +#, fuzzy +msgid "" +"Sprite node that contains multiple textures as frames to play for animation." msgstr "アニメーション用ã«è¤‡æ•°ã®ãƒ†ã‚¯ã‚¹ãƒãƒ£ã‚’使用ã§ãã‚‹Spriteノード。" #: doc/classes/AnimatedSprite.xml msgid "" -"Animations are created using a [SpriteFrames] resource, which can be " -"configured in the editor via the SpriteFrames panel.\n" -"[b]Note:[/b] You can associate a set of normal maps by creating additional " -"[SpriteFrames] resources with a [code]_normal[/code] suffix. For example, " -"having 2 [SpriteFrames] resources [code]run[/code] and [code]run_normal[/" -"code] will make it so the [code]run[/code] animation uses the normal map." +"[AnimatedSprite] is similar to the [Sprite] node, except it carries multiple " +"textures as animation frames. Animations are created using a [SpriteFrames] " +"resource, which allows you to import image files (or a folder containing " +"said files) to provide the animation frames for the sprite. The " +"[SpriteFrames] resource can be configured in the editor via the SpriteFrames " +"bottom panel.\n" +"[b]Note:[/b] You can associate a set of normal or specular maps by creating " +"additional [SpriteFrames] resources with a [code]_normal[/code] or " +"[code]_specular[/code] suffix. For example, having 3 [SpriteFrames] " +"resources [code]run[/code], [code]run_normal[/code], and [code]run_specular[/" +"code] will make it so the [code]run[/code] animation uses normal and " +"specular maps." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml @@ -5311,9 +5280,10 @@ msgstr "" msgid "Stops the current animation (does not reset the frame counter)." msgstr "ç¾åœ¨ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’åœæ¢ã—ã¾ã™ (frameカウンターã¯ãƒªã‚»ãƒƒãƒˆã•れãªã„)。" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml +#: doc/classes/AnimatedSprite.xml +#, fuzzy msgid "" -"The current animation from the [code]frames[/code] resource. If this value " +"The current animation from the [member frames] resource. If this value " "changes, the [code]frame[/code] counter is reset." msgstr "" "[code]frames[/code] リソースã‹ã‚‰ã®ç¾åœ¨ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã€‚ã“ã®å€¤ãŒå¤‰ã‚ã‚‹ã¨ã€" @@ -5339,9 +5309,12 @@ msgstr "[code]true[/code] ã§ã‚れã°ã€ãƒ†ã‚¯ã‚¹ãƒãƒ£ã¯åž‚ç›´ã«å転ã•れ msgid "The displayed animation frame's index." msgstr "表示ã•れã¦ã„るアニメーションフレームã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã€‚" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml -msgid "The [SpriteFrames] resource containing the animation(s)." -msgstr "ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’æ ¼ç´ã—ã¦ã„ã‚‹ [SpriteFrames] リソース。" +#: doc/classes/AnimatedSprite.xml +msgid "" +"The [SpriteFrames] resource containing the animation(s). Allows you the " +"option to load, edit, clear, make unique and save the states of the " +"[SpriteFrames] resource." +msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/Sprite.xml #: doc/classes/SpriteBase3D.xml @@ -5401,6 +5374,18 @@ msgstr "" "[code]anim[/code] ã¨ã„ã†åå‰ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’å†ç”Ÿã—ã¾ã™ã€‚[code]anim[/code] " "ãŒæŒ‡å®šã•れã¦ã„ãªã„å ´åˆã¯ã€ç¾åœ¨ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’å†ç”Ÿã—ã¾ã™ã€‚" +#: doc/classes/AnimatedSprite3D.xml +msgid "" +"The current animation from the [code]frames[/code] resource. If this value " +"changes, the [code]frame[/code] counter is reset." +msgstr "" +"[code]frames[/code] リソースã‹ã‚‰ã®ç¾åœ¨ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã€‚ã“ã®å€¤ãŒå¤‰ã‚ã‚‹ã¨ã€" +"[code]frame[/code] カウンタã¯ãƒªã‚»ãƒƒãƒˆã•れã¾ã™ã€‚" + +#: doc/classes/AnimatedSprite3D.xml +msgid "The [SpriteFrames] resource containing the animation(s)." +msgstr "ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’æ ¼ç´ã—ã¦ã„ã‚‹ [SpriteFrames] リソース。" + #: doc/classes/AnimatedTexture.xml msgid "Proxy texture for simple frame-based animations." msgstr "シンプルãªãƒ•レームベース アニメーションã®ãŸã‚ã®ãƒ—ãƒã‚ã‚· テクスãƒãƒ£ã€‚" @@ -6112,11 +6097,11 @@ msgstr "" msgid "No interpolation (nearest value)." msgstr "補間ãªã— (ç›´è¿‘ã®å€¤) 。" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Linear interpolation." msgstr "線形補間。" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Cubic interpolation." msgstr "ã‚ュービック補間。" @@ -7413,11 +7398,15 @@ msgstr "" "code] ã«å¤‰æ›´ã—ã¾ã™ã€‚" #: doc/classes/AnimationPlayer.xml +#, fuzzy msgid "" "Seeks the animation to the [code]seconds[/code] point in time (in seconds). " "If [code]update[/code] is [code]true[/code], the animation updates too, " "otherwise it updates at process time. Events between the current frame and " -"[code]seconds[/code] are skipped." +"[code]seconds[/code] are skipped.\n" +"[b]Note:[/b] Seeking to the end of the animation doesn't emit [signal " +"animation_finished]. If you want to skip animation and emit the signal, use " +"[method advance]." msgstr "" "アニメーションを [code]seconds[/code] (ç§’) 時点ã¾ã§ã‚·ãƒ¼ã‚¯ã—ã¾ã™ã€‚ã‚‚ã— " "[code]update[/code] ㌠[code]true[/code] ã§ã‚れã°ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚‚åŒæ™‚æ›´æ–°ã•" @@ -9056,7 +9045,10 @@ msgstr "" "é…列をクリアã—ã¾ã™ã€‚ã“れã¯ã€[code]0[/code]ã®ã‚µã‚¤ã‚ºã§[method resize]を使用ã™ã‚‹" "ã®ã¨åŒã˜ã§ã™ã€‚" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "Returns the number of times an element is in the array." msgstr "è¦ç´ ã®é…列内ã§ã®å‡ºç¾å›žæ•°ã‚’è¿”ã—ã¾ã™ã€‚" @@ -9107,10 +9099,15 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml +#, fuzzy msgid "" "Searches the array for a value and returns its index or [code]-1[/code] if " -"not found. Optionally, the initial search index can be passed." +"not found. Optionally, the initial search index can be passed. Returns " +"[code]-1[/code] if [code]from[/code] is out of bounds." msgstr "" "é…列ã®å€¤ã‚’検索ã—ã€ãã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã‚’è¿”ã™ã‹ã€è¦‹ã¤ã‹ã‚‰ãªã‹ã£ãŸå ´åˆã¯ [code]-1[/" "code] ã‚’è¿”ã—ã¾ã™ã€‚オプションã§ã€æ¤œç´¢ã®é–‹å§‹ä½ç½®ã‚’渡ã›ã¾ã™ã€‚" @@ -9278,11 +9275,16 @@ msgstr "" "ãã™ã‚Œã°ã€è¦ç´ ã¯é™¤åŽ»ã•れã€å¤§ããã™ã‚Œã°ã€æ–°ã—ã„è¦ç´ ã¯[code]null[/code]ã«ãªã‚Šã¾" "ã™ã€‚" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml +#, fuzzy msgid "" "Searches the array in reverse order. Optionally, a start search index can be " "passed. If negative, the start index is considered relative to the end of " -"the array." +"the array. If the adjusted start index is out of bounds, this method " +"searches from the end of the array." msgstr "" "é…åˆ—ã‚’é€†é †ã«æ¤œç´¢ã—ã¾ã™ã€‚オプションã§ã€æ¤œç´¢é–‹å§‹ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã‚’渡ã™ã“ã¨ãŒã§ãã¾" "ã™ã€‚è² ã®å€¤ã‚’指定ã—ãŸå ´åˆã€é–‹å§‹ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã¯é…åˆ—ã®æœ«å°¾ã‹ã‚‰ã®ç›¸å¯¾çš„ãªã‚‚ã®ã¨ã¿" @@ -10592,7 +10594,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -10912,7 +10914,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -14611,17 +14613,17 @@ msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a normal vector in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a 3D position in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml @@ -16949,7 +16951,9 @@ msgstr "" #: doc/classes/CollisionPolygon2D.xml msgid "" "If [code]true[/code], only edges that face up, relative to " -"[CollisionPolygon2D]'s rotation, will collide with other objects." +"[CollisionPolygon2D]'s rotation, will collide with other objects.\n" +"[b]Note:[/b] This property has no effect if this [CollisionPolygon2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionPolygon2D.xml @@ -17046,7 +17050,9 @@ msgstr "" #: doc/classes/CollisionShape2D.xml msgid "" "Sets whether this collision shape should only detect collision on one side " -"(top or bottom)." +"(top or bottom).\n" +"[b]Note:[/b] This property has no effect if this [CollisionShape2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionShape2D.xml @@ -25561,6 +25567,11 @@ msgid "" "same behavior." msgstr "" +#: doc/classes/EditorSpinSlider.xml +#, fuzzy +msgid "If [code]true[/code], the slider is hidden." +msgstr "[code]true[/code]ã®å ´åˆã€ãƒ•ィードãƒãƒƒã‚¯ãŒæœ‰åйã«ãªã‚Šã¾ã™ã€‚" + #: doc/classes/EditorVCSInterface.xml msgid "" "Version Control System (VCS) interface, which reads and writes to the local " @@ -29186,9 +29197,22 @@ msgid "Gradient's colors returned as a [PoolColorArray]." msgstr "" #: doc/classes/Gradient.xml +msgid "" +"Defines how the colors between points of the gradient are interpolated. See " +"[enum InterpolationMode] for available modes." +msgstr "" + +#: doc/classes/Gradient.xml msgid "Gradient's offsets returned as a [PoolRealArray]." msgstr "" +#: doc/classes/Gradient.xml +msgid "" +"Constant interpolation, color changes abruptly at each point and stays " +"uniform between. This might cause visible aliasing when used for a gradient " +"texture in some cases." +msgstr "" + #: doc/classes/GradientTexture.xml msgid "Gradient-filled texture." msgstr "" @@ -37805,13 +37829,13 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used easing from [enum Tween.EaseType]. If not set, the " "default easing is used from the [SceneTreeTween] that contains this Tweener." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used transition from [enum Tween.TransitionType]. If not " "set, the default transition is used from the [SceneTreeTween] that contains " @@ -38529,6 +38553,15 @@ msgstr "指定ã•れãŸãƒŽãƒ¼ãƒ‰ã®åå‰ã‚’変ãˆã¾ã™ã€‚" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy +msgid "" +"Returns the navigation map [RID] the requested [code]agent[/code] is " +"currently assigned to." +msgstr "" +"ã‚ー [code]name[/code] ã‚’æŒã¤ [Animation] ã‚’è¿”ã™ã‹ã€è¦‹ã¤ã‹ã‚‰ãªã„å ´åˆã¯ " +"[code]null[/code] ã‚’è¿”ã—ã¾ã™ã€‚" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "与ãˆã‚‰ã‚ŒãŸãƒŽãƒ¼ãƒ‰ã‚’å«ã‚€ã‚°ãƒ©ãƒ•ã®å ´åˆã€[code]true[/code] ã‚’è¿”ã—ã¾ã™ã€‚" @@ -38599,6 +38632,12 @@ msgid "Create a new map." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation agents [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns the map cell size." msgstr "グラフã®çµ‚端ノードを返ã—ã¾ã™ã€‚" @@ -38629,6 +38668,12 @@ msgid "Returns the navigation path to reach the destination from the origin." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation regions [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns [code]true[/code] if the map is active." msgstr "é…列ãŒç©ºã®å ´åˆã¯[code]true[/code]ã‚’è¿”ã—ã¾ã™ã€‚" @@ -38652,6 +38697,12 @@ msgid "Creates a new region." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]region[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Sets the map for the region." msgstr "行列ã®é€†è¡Œåˆ—ã‚’è¿”ã—ã¾ã™ã€‚" @@ -39144,19 +39195,59 @@ msgid "Represents the size of the [enum SourceGeometryMode] enum." msgstr "[enum Feature] enum ã®ã‚µã‚¤ã‚ºã‚’表ã—ã¾ã™ã€‚" #: doc/classes/NavigationMeshGenerator.xml -msgid "This class is responsible for creating and clearing navigation meshes." +msgid "Helper class for creating and clearing navigation meshes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml msgid "" -"Bakes the navigation mesh. This will allow you to use pathfinding with the " -"navigation system." +"This class is responsible for creating and clearing 3D navigation meshes " +"used as [NavigationMesh] resources inside [NavigationMeshInstance]. The " +"[NavigationMeshGenerator] has very limited to no use for 2D as the " +"navigation mesh baking process expects 3D node types and 3D source geometry " +"to parse.\n" +"The entire navigation mesh baking is best done in a separate thread as the " +"voxelization, collision tests and mesh optimization steps involved are very " +"performance and time hungry operations.\n" +"Navigation mesh baking happens in multiple steps and the result depends on " +"3D source geometry and properties of the [NavigationMesh] resource. In the " +"first step, starting from a root node and depending on [NavigationMesh] " +"properties all valid 3D source geometry nodes are collected from the " +"[SceneTree]. Second, all collected nodes are parsed for their relevant 3D " +"geometry data and a combined 3D mesh is build. Due to the many different " +"types of parsable objects, from normal [MeshInstance]s to [CSGShape]s or " +"various [CollisionObject]s, some operations to collect geometry data can " +"trigger [VisualServer] and [PhysicsServer] synchronizations. Server " +"synchronization can have a negative effect on baking time or framerate as it " +"often involves [Mutex] locking for thread security. Many parsable objects " +"and the continuous synchronization with other threaded Servers can increase " +"the baking time significantly. On the other hand only a few but very large " +"and complex objects will take some time to prepare for the Servers which can " +"noticeably stall the next frame render. As a general rule the total amount " +"of parsable objects and their individual size and complexity should be " +"balanced to avoid framerate issues or very long baking times. The combined " +"mesh is then passed to the Recast Navigation Object to test the source " +"geometry for walkable terrain suitable to [NavigationMesh] agent properties " +"by creating a voxel world around the meshes bounding area.\n" +"The finalized navigation mesh is then returned and stored inside the " +"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes." +msgstr "" + +#: doc/classes/NavigationMeshGenerator.xml +msgid "" +"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " +"nodes under the provided [code]root_node[/code] or a specific group of nodes " +"for potential source geometry. The parse behavior can be controlled with the " +"[member NavigationMesh.geometry/parsed_geometry_type] and [member " +"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[NavigationMesh] resource." msgstr "" #: doc/classes/NavigationMeshGenerator.xml #, fuzzy -msgid "Clears the navigation mesh." -msgstr "ã™ã¹ã¦ã®ç‚¹ãŠã‚ˆã³ã‚»ã‚°ãƒ¡ãƒ³ãƒˆã‚’クリアã—ã¾ã™ã€‚" +msgid "" +"Removes all polygons and vertices from the provided [code]nav_mesh[/code] " +"resource." +msgstr "ã‚ーå [code]name[/code] ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’削除ã—ã¾ã™ã€‚" #: doc/classes/NavigationMeshInstance.xml msgid "An instance of a [NavigationMesh]." @@ -39176,7 +39267,10 @@ msgid "" "thread is useful because navigation baking is not a cheap operation. When it " "is completed, it automatically sets the new [NavigationMesh]. Please note " "that baking on separate thread may be very slow if geometry is parsed from " -"meshes as async access to each mesh involves heavy synchronization." +"meshes as async access to each mesh involves heavy synchronization. Also, " +"please note that baking on a separate thread is automatically disabled on " +"operating systems that cannot use threads (such as HTML5 with threads " +"disabled)." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -39226,6 +39320,11 @@ msgid "" msgstr "指定ã•れãŸåå‰ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ãƒŽãƒ¼ãƒ‰ã‚’è¿”ã—ã¾ã™ã€‚" #: doc/classes/NavigationObstacle.xml +#, fuzzy +msgid "Returns the [RID] of this obstacle on the [NavigationServer]." +msgstr "アニメーションã®ãƒˆãƒ©ãƒƒã‚¯æ•°ã‚’è¿”ã—ã¾ã™ã€‚" + +#: doc/classes/NavigationObstacle.xml msgid "" "Sets the [Navigation] node used by the obstacle. Useful when you don't want " "to make the obstacle a child of a [Navigation] node." @@ -39262,6 +39361,11 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle2D.xml +#, fuzzy +msgid "Returns the [RID] of this obstacle on the [Navigation2DServer]." +msgstr "アニメーションã®ãƒˆãƒ©ãƒƒã‚¯æ•°ã‚’è¿”ã—ã¾ã™ã€‚" + +#: doc/classes/NavigationObstacle2D.xml msgid "" "Sets the [Navigation2D] node used by the obstacle. Useful when you don't " "want to make the obstacle a child of a [Navigation2D] node." @@ -40455,7 +40559,7 @@ msgstr "" #: doc/classes/Node.xml msgid "" "Returns [code]true[/code] if the physics interpolated flag is set for this " -"Node (see [method set_physics_interpolated]).\n" +"Node (see [member physics_interpolation_mode]).\n" "[b]Note:[/b] Interpolation will only be active is both the flag is set " "[b]and[/b] physics interpolation is enabled within the [SceneTree]. This can " "be tested using [method is_physics_interpolated_and_enabled]." @@ -40463,8 +40567,8 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Returns [code]true[/code] if physics interpolation is enabled (see [method " -"set_physics_interpolated]) [b]and[/b] enabled in the [SceneTree].\n" +"Returns [code]true[/code] if physics interpolation is enabled (see [member " +"physics_interpolation_mode]) [b]and[/b] enabled in the [SceneTree].\n" "This is a convenience version of [method is_physics_interpolated] that also " "checks whether physics interpolation is enabled globally.\n" "See [member SceneTree.physics_interpolation] and [member ProjectSettings." @@ -40758,14 +40862,6 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Enables or disables physics interpolation per node, offering a finer grain " -"of control than turning physics interpolation on and off globally.\n" -"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " -"interpolation can sometimes give superior results." -msgstr "" - -#: doc/classes/Node.xml -msgid "" "Enables or disables physics (i.e. fixed framerate) processing. When a node " "is being processed, it will receive a [constant " "NOTIFICATION_PHYSICS_PROCESS] at a fixed (usually 60 FPS, see [member Engine." @@ -40898,6 +40994,15 @@ msgstr "" #: doc/classes/Node.xml msgid "" +"Allows enabling or disabling physics interpolation per node, offering a " +"finer grain of control than turning physics interpolation on and off " +"globally.\n" +"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " +"interpolation can sometimes give superior results." +msgstr "" + +#: doc/classes/Node.xml +msgid "" "The node's priority in the execution order of the enabled processing " "callbacks (i.e. [constant NOTIFICATION_PROCESS], [constant " "NOTIFICATION_PHYSICS_PROCESS] and their internal counterparts). Nodes whose " @@ -41059,6 +41164,24 @@ msgid "Continue to process regardless of the [SceneTree] pause state." msgstr "" #: doc/classes/Node.xml +msgid "" +"Inherits physics interpolation mode from the node's parent. For the root " +"node, it is equivalent to [constant PHYSICS_INTERPOLATION_MODE_ON]. Default." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn off physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn on physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml msgid "Duplicate the node's signals." msgstr "" @@ -42307,10 +42430,13 @@ msgid "Returns the tooltip of the item at index [code]idx[/code]." msgstr "インデックス [code]bus_idx[/code] ã®ãƒã‚¹ã®éŸ³é‡ã‚’ dB ã§è¿”ã—ã¾ã™ã€‚" #: doc/classes/OptionButton.xml +#, fuzzy msgid "" -"Returns the ID of the selected item, or [code]0[/code] if no item is " +"Returns the ID of the selected item, or [code]-1[/code] if no item is " "selected." msgstr "" +"é…åˆ—ã®æœ€åˆã®è¦ç´ を削除ã—ã¦è¿”ã—ã¾ã™ã€‚é…列ãŒç©ºã®å ´åˆã¯[code]null[/code]ã‚’è¿”ã—ã¾" +"ã™ã€‚" #: doc/classes/OptionButton.xml msgid "" @@ -42330,7 +42456,8 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" "Selects an item by index and makes it the current item. This will work even " -"if the item is disabled." +"if the item is disabled.\n" +"Passing [code]-1[/code] as the index deselects any currently selected item." msgstr "" #: doc/classes/OptionButton.xml @@ -47719,6 +47846,17 @@ msgid "" "should always be preferred." msgstr "" +#: doc/classes/PoolByteArray.xml doc/classes/PoolColorArray.xml +#: doc/classes/PoolIntArray.xml doc/classes/PoolRealArray.xml +#: doc/classes/PoolStringArray.xml doc/classes/PoolVector2Array.xml +#: doc/classes/PoolVector3Array.xml +#, fuzzy +msgid "" +"Returns [code]true[/code] if the array contains the given value.\n" +"[b]Note:[/b] This is equivalent to using the [code]in[/code] operator." +msgstr "" +"æ–‡å—列ã®é•·ã•㌠[code]0[/code] ã«ç‰ã—ã‘れ㰠[code]true[/code] ã‚’è¿”ã—ã¾ã™ã€‚" + #: doc/classes/PoolByteArray.xml msgid "" "Returns a hexadecimal representation of this array as a [String].\n" @@ -48532,6 +48670,11 @@ msgid "[Font] used for the menu items." msgstr "" #: doc/classes/PopupMenu.xml +#, fuzzy +msgid "[Font] used for the labeled separator." +msgstr "編集済ã¿ãƒ—ãƒãƒ‘ティ用ã®ãƒ’ントãªã—。" + +#: doc/classes/PopupMenu.xml msgid "[Texture] icon for the checked checkbox items." msgstr "" @@ -51997,19 +52140,6 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used easing from [enum Tween.EaseType]. If not set, the " -"default easing is used from the [Tween] that contains this Tweener." -msgstr "" - -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used transition from [enum Tween.TransitionType]. If not " -"set, the default transition is used from the [Tween] that contains this " -"Tweener." -msgstr "" - #: doc/classes/ProximityGroup.xml msgid "General-purpose 3D proximity detection node." msgstr "" @@ -56876,8 +57006,15 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape touches another. If there are " -"no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape touches another.\n" +"If there are no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the shape to check collisions with " "([code]with_shape[/code]), and the transformation matrix of that shape " @@ -56898,8 +57035,16 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape would touch another, if a " -"given movement was applied. If there are no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape would touch another, " +"if a given movement was applied.\n" +"If there would be no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the movement to test on this shape " "([code]local_motion[/code]), the shape to check collisions with " diff --git a/doc/translations/ko.po b/doc/translations/ko.po index c6e5552649..f567ed125c 100644 --- a/doc/translations/ko.po +++ b/doc/translations/ko.po @@ -13,12 +13,13 @@ # dewcked <dewcked@protonmail.ch>, 2021. # ì‹ ë™ê·œ <rlsl0422@gmail.com>, 2021. # whatthesamuel <alex01763@gmail.com>, 2021. +# 한수현 <shh1473@ajou.ac.kr>, 2022. msgid "" msgstr "" "Project-Id-Version: Godot Engine class reference\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" -"PO-Revision-Date: 2021-11-19 08:44+0000\n" -"Last-Translator: Myeongjin Lee <aranet100@gmail.com>\n" +"PO-Revision-Date: 2022-05-15 09:38+0000\n" +"Last-Translator: 한수현 <shh1473@ajou.ac.kr>\n" "Language-Team: Korean <https://hosted.weblate.org/projects/godot-engine/" "godot-class-reference/ko/>\n" "Language: ko\n" @@ -26,11 +27,11 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.9.1-dev\n" +"X-Generator: Weblate 4.13-dev\n" #: doc/tools/make_rst.py msgid "Description" -msgstr "설명" +msgstr "ì„œìˆ " #: doc/tools/make_rst.py msgid "Tutorials" @@ -50,7 +51,7 @@ msgstr "테마 ì†ì„±ë“¤" #: doc/tools/make_rst.py msgid "Signals" -msgstr "시그ë„" +msgstr "ì‹ í˜¸" #: doc/tools/make_rst.py msgid "Enumerations" @@ -91,7 +92,7 @@ msgstr "" #: doc/tools/make_rst.py msgid "Setter" -msgstr "" +msgstr "Setter" #: doc/tools/make_rst.py msgid "value" @@ -99,7 +100,7 @@ msgstr "" #: doc/tools/make_rst.py msgid "Getter" -msgstr "" +msgstr "Getter" #: doc/tools/make_rst.py msgid "" @@ -1046,11 +1047,12 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Random range, any floating point value between [code]from[/code] and " -"[code]to[/code].\n" +"Returns a random floating point value between [code]from[/code] and " +"[code]to[/code] (both endpoints inclusive).\n" "[codeblock]\n" "prints(rand_range(0, 1), rand_range(0, 1)) # Prints e.g. 0.135591 0.405263\n" -"[/codeblock]" +"[/codeblock]\n" +"[b]Note:[/b] This is equivalent to [code]randf() * (to - from) + from[/code]." msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml @@ -1103,37 +1105,36 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Returns an array with the given range. Range can be 1 argument [code]N[/" -"code] (0 to [code]N[/code] - 1), two arguments ([code]initial[/code], " -"[code]final - 1[/code]) or three arguments ([code]initial[/code], " -"[code]final - 1[/code], [code]increment[/code]). Returns an empty array if " -"the range isn't valid (e.g. [code]range(2, 5, -1)[/code] or [code]range(5, " -"5, 1)[/code]).\n" -"Returns an array with the given range. [code]range()[/code] can have 1 " -"argument N ([code]0[/code] to [code]N - 1[/code]), two arguments " -"([code]initial[/code], [code]final - 1[/code]) or three arguments " -"([code]initial[/code], [code]final - 1[/code], [code]increment[/code]). " -"[code]increment[/code] can be negative. If [code]increment[/code] is " -"negative, [code]final - 1[/code] will become [code]final + 1[/code]. Also, " -"the initial value must be greater than the final value for the loop to run.\n" -"[codeblock]\n" -"print(range(4))\n" -"print(range(2, 5))\n" -"print(range(0, 6, 2))\n" -"[/codeblock]\n" -"Output:\n" +"Returns an array with the given range. [method range] can be called in three " +"ways:\n" +"[code]range(n: int)[/code]: Starts from 0, increases by steps of 1, and " +"stops [i]before[/i] [code]n[/code]. The argument [code]n[/code] is " +"[b]exclusive[/b].\n" +"[code]range(b: int, n: int)[/code]: Starts from [code]b[/code], increases by " +"steps of 1, and stops [i]before[/i] [code]n[/code]. The arguments [code]b[/" +"code] and [code]n[/code] are [b]inclusive[/b] and [b]exclusive[/b], " +"respectively.\n" +"[code]range(b: int, n: int, s: int)[/code]: Starts from [code]b[/code], " +"increases/decreases by steps of [code]s[/code], and stops [i]before[/i] " +"[code]n[/code]. The arguments [code]b[/code] and [code]n[/code] are " +"[b]inclusive[/b] and [b]exclusive[/b], respectively. The argument [code]s[/" +"code] [b]can[/b] be negative, but not [code]0[/code]. If [code]s[/code] is " +"[code]0[/code], an error message is printed.\n" +"[method range] converts all arguments to [int] before processing.\n" +"[b]Note:[/b] Returns an empty array if no value meets the value constraint " +"(e.g. [code]range(2, 5, -1)[/code] or [code]range(5, 5, 1)[/code]).\n" +"Examples:\n" "[codeblock]\n" -"[0, 1, 2, 3]\n" -"[2, 3, 4]\n" -"[0, 2, 4]\n" +"print(range(4)) # Prints [0, 1, 2, 3]\n" +"print(range(2, 5)) # Prints [2, 3, 4]\n" +"print(range(0, 6, 2)) # Prints [0, 2, 4]\n" +"print(range(4, 1, -1)) # Prints [4, 3, 2]\n" "[/codeblock]\n" "To iterate over an [Array] backwards, use:\n" "[codeblock]\n" "var array = [3, 6, 9]\n" -"var i := array.size() - 1\n" -"while i >= 0:\n" -" print(array[i])\n" -" i -= 1\n" +"for i in range(array.size(), 0, -1):\n" +" print(array[i - 1])\n" "[/codeblock]\n" "Output:\n" "[codeblock]\n" @@ -4234,17 +4235,24 @@ msgid "Maximum value for the mode enum." msgstr "" #: doc/classes/AnimatedSprite.xml -msgid "Sprite node that can use multiple textures for animation." +msgid "" +"Sprite node that contains multiple textures as frames to play for animation." msgstr "" #: doc/classes/AnimatedSprite.xml msgid "" -"Animations are created using a [SpriteFrames] resource, which can be " -"configured in the editor via the SpriteFrames panel.\n" -"[b]Note:[/b] You can associate a set of normal maps by creating additional " -"[SpriteFrames] resources with a [code]_normal[/code] suffix. For example, " -"having 2 [SpriteFrames] resources [code]run[/code] and [code]run_normal[/" -"code] will make it so the [code]run[/code] animation uses the normal map." +"[AnimatedSprite] is similar to the [Sprite] node, except it carries multiple " +"textures as animation frames. Animations are created using a [SpriteFrames] " +"resource, which allows you to import image files (or a folder containing " +"said files) to provide the animation frames for the sprite. The " +"[SpriteFrames] resource can be configured in the editor via the SpriteFrames " +"bottom panel.\n" +"[b]Note:[/b] You can associate a set of normal or specular maps by creating " +"additional [SpriteFrames] resources with a [code]_normal[/code] or " +"[code]_specular[/code] suffix. For example, having 3 [SpriteFrames] " +"resources [code]run[/code], [code]run_normal[/code], and [code]run_specular[/" +"code] will make it so the [code]run[/code] animation uses normal and " +"specular maps." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml @@ -4272,9 +4280,9 @@ msgstr "" msgid "Stops the current animation (does not reset the frame counter)." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml +#: doc/classes/AnimatedSprite.xml msgid "" -"The current animation from the [code]frames[/code] resource. If this value " +"The current animation from the [member frames] resource. If this value " "changes, the [code]frame[/code] counter is reset." msgstr "" @@ -4298,8 +4306,11 @@ msgstr "" msgid "The displayed animation frame's index." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml -msgid "The [SpriteFrames] resource containing the animation(s)." +#: doc/classes/AnimatedSprite.xml +msgid "" +"The [SpriteFrames] resource containing the animation(s). Allows you the " +"option to load, edit, clear, make unique and save the states of the " +"[SpriteFrames] resource." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/Sprite.xml @@ -4351,6 +4362,16 @@ msgid "" "provided, the current animation is played." msgstr "" +#: doc/classes/AnimatedSprite3D.xml +msgid "" +"The current animation from the [code]frames[/code] resource. If this value " +"changes, the [code]frame[/code] counter is reset." +msgstr "" + +#: doc/classes/AnimatedSprite3D.xml +msgid "The [SpriteFrames] resource containing the animation(s)." +msgstr "" + #: doc/classes/AnimatedTexture.xml msgid "Proxy texture for simple frame-based animations." msgstr "" @@ -4867,11 +4888,11 @@ msgstr "" msgid "No interpolation (nearest value)." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Linear interpolation." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Cubic interpolation." msgstr "" @@ -5907,7 +5928,10 @@ msgid "" "Seeks the animation to the [code]seconds[/code] point in time (in seconds). " "If [code]update[/code] is [code]true[/code], the animation updates too, " "otherwise it updates at process time. Events between the current frame and " -"[code]seconds[/code] are skipped." +"[code]seconds[/code] are skipped.\n" +"[b]Note:[/b] Seeking to the end of the animation doesn't emit [signal " +"animation_finished]. If you want to skip animation and emit the signal, use " +"[method advance]." msgstr "" #: doc/classes/AnimationPlayer.xml @@ -7098,7 +7122,10 @@ msgid "" "[code]0[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "Returns the number of times an element is in the array." msgstr "" @@ -7143,10 +7170,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array for a value and returns its index or [code]-1[/code] if " -"not found. Optionally, the initial search index can be passed." +"not found. Optionally, the initial search index can be passed. Returns " +"[code]-1[/code] if [code]from[/code] is out of bounds." msgstr "" #: doc/classes/Array.xml @@ -7284,11 +7315,15 @@ msgid "" "[code]null[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array in reverse order. Optionally, a start search index can be " "passed. If negative, the start index is considered relative to the end of " -"the array." +"the array. If the adjusted start index is out of bounds, this method " +"searches from the end of the array." msgstr "" #: doc/classes/Array.xml @@ -8423,7 +8458,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -8645,7 +8680,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -11759,17 +11794,17 @@ msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a normal vector in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a 3D position in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml @@ -14022,7 +14057,9 @@ msgstr "" #: doc/classes/CollisionPolygon2D.xml msgid "" "If [code]true[/code], only edges that face up, relative to " -"[CollisionPolygon2D]'s rotation, will collide with other objects." +"[CollisionPolygon2D]'s rotation, will collide with other objects.\n" +"[b]Note:[/b] This property has no effect if this [CollisionPolygon2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionPolygon2D.xml @@ -14118,7 +14155,9 @@ msgstr "" #: doc/classes/CollisionShape2D.xml msgid "" "Sets whether this collision shape should only detect collision on one side " -"(top or bottom)." +"(top or bottom).\n" +"[b]Note:[/b] This property has no effect if this [CollisionShape2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionShape2D.xml @@ -22624,6 +22663,11 @@ msgid "" "same behavior." msgstr "" +#: doc/classes/EditorSpinSlider.xml +#, fuzzy +msgid "If [code]true[/code], the slider is hidden." +msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì½”ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤." + #: doc/classes/EditorVCSInterface.xml msgid "" "Version Control System (VCS) interface, which reads and writes to the local " @@ -26212,9 +26256,22 @@ msgid "Gradient's colors returned as a [PoolColorArray]." msgstr "" #: doc/classes/Gradient.xml +msgid "" +"Defines how the colors between points of the gradient are interpolated. See " +"[enum InterpolationMode] for available modes." +msgstr "" + +#: doc/classes/Gradient.xml msgid "Gradient's offsets returned as a [PoolRealArray]." msgstr "" +#: doc/classes/Gradient.xml +msgid "" +"Constant interpolation, color changes abruptly at each point and stays " +"uniform between. This might cause visible aliasing when used for a gradient " +"texture in some cases." +msgstr "" + #: doc/classes/GradientTexture.xml msgid "Gradient-filled texture." msgstr "" @@ -34751,13 +34808,13 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used easing from [enum Tween.EaseType]. If not set, the " "default easing is used from the [SceneTreeTween] that contains this Tweener." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used transition from [enum Tween.TransitionType]. If not " "set, the default transition is used from the [SceneTreeTween] that contains " @@ -35469,6 +35526,12 @@ msgid "Creates the agent." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]agent[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" @@ -35538,6 +35601,12 @@ msgid "Create a new map." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation agents [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns the map cell size." msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì•„í¬ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤." @@ -35565,6 +35634,12 @@ msgid "Returns the navigation path to reach the destination from the origin." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation regions [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns [code]true[/code] if the map is active." msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì½”ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤." @@ -35588,6 +35663,12 @@ msgid "Creates a new region." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]region[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Sets the map for the region." msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤." @@ -36066,19 +36147,60 @@ msgid "Represents the size of the [enum SourceGeometryMode] enum." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "This class is responsible for creating and clearing navigation meshes." +msgid "Helper class for creating and clearing navigation meshes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml msgid "" -"Bakes the navigation mesh. This will allow you to use pathfinding with the " -"navigation system." +"This class is responsible for creating and clearing 3D navigation meshes " +"used as [NavigationMesh] resources inside [NavigationMeshInstance]. The " +"[NavigationMeshGenerator] has very limited to no use for 2D as the " +"navigation mesh baking process expects 3D node types and 3D source geometry " +"to parse.\n" +"The entire navigation mesh baking is best done in a separate thread as the " +"voxelization, collision tests and mesh optimization steps involved are very " +"performance and time hungry operations.\n" +"Navigation mesh baking happens in multiple steps and the result depends on " +"3D source geometry and properties of the [NavigationMesh] resource. In the " +"first step, starting from a root node and depending on [NavigationMesh] " +"properties all valid 3D source geometry nodes are collected from the " +"[SceneTree]. Second, all collected nodes are parsed for their relevant 3D " +"geometry data and a combined 3D mesh is build. Due to the many different " +"types of parsable objects, from normal [MeshInstance]s to [CSGShape]s or " +"various [CollisionObject]s, some operations to collect geometry data can " +"trigger [VisualServer] and [PhysicsServer] synchronizations. Server " +"synchronization can have a negative effect on baking time or framerate as it " +"often involves [Mutex] locking for thread security. Many parsable objects " +"and the continuous synchronization with other threaded Servers can increase " +"the baking time significantly. On the other hand only a few but very large " +"and complex objects will take some time to prepare for the Servers which can " +"noticeably stall the next frame render. As a general rule the total amount " +"of parsable objects and their individual size and complexity should be " +"balanced to avoid framerate issues or very long baking times. The combined " +"mesh is then passed to the Recast Navigation Object to test the source " +"geometry for walkable terrain suitable to [NavigationMesh] agent properties " +"by creating a voxel world around the meshes bounding area.\n" +"The finalized navigation mesh is then returned and stored inside the " +"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "Clears the navigation mesh." +msgid "" +"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " +"nodes under the provided [code]root_node[/code] or a specific group of nodes " +"for potential source geometry. The parse behavior can be controlled with the " +"[member NavigationMesh.geometry/parsed_geometry_type] and [member " +"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[NavigationMesh] resource." msgstr "" +#: doc/classes/NavigationMeshGenerator.xml +#, fuzzy +msgid "" +"Removes all polygons and vertices from the provided [code]nav_mesh[/code] " +"resource." +msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤." + #: doc/classes/NavigationMeshInstance.xml msgid "An instance of a [NavigationMesh]." msgstr "" @@ -36097,7 +36219,10 @@ msgid "" "thread is useful because navigation baking is not a cheap operation. When it " "is completed, it automatically sets the new [NavigationMesh]. Please note " "that baking on separate thread may be very slow if geometry is parsed from " -"meshes as async access to each mesh involves heavy synchronization." +"meshes as async access to each mesh involves heavy synchronization. Also, " +"please note that baking on a separate thread is automatically disabled on " +"operating systems that cannot use threads (such as HTML5 with threads " +"disabled)." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -36143,6 +36268,11 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle.xml +#, fuzzy +msgid "Returns the [RID] of this obstacle on the [NavigationServer]." +msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤." + +#: doc/classes/NavigationObstacle.xml msgid "" "Sets the [Navigation] node used by the obstacle. Useful when you don't want " "to make the obstacle a child of a [Navigation] node." @@ -36179,6 +36309,11 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle2D.xml +#, fuzzy +msgid "Returns the [RID] of this obstacle on the [Navigation2DServer]." +msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤." + +#: doc/classes/NavigationObstacle2D.xml msgid "" "Sets the [Navigation2D] node used by the obstacle. Useful when you don't " "want to make the obstacle a child of a [Navigation2D] node." @@ -36971,7 +37106,7 @@ msgstr "" #: doc/classes/Node.xml msgid "Nodes and Scenes" -msgstr "" +msgstr "노드와 씬" #: doc/classes/Node.xml msgid "All Demos" @@ -37492,7 +37627,7 @@ msgstr "" #: doc/classes/Node.xml msgid "" "Returns [code]true[/code] if the physics interpolated flag is set for this " -"Node (see [method set_physics_interpolated]).\n" +"Node (see [member physics_interpolation_mode]).\n" "[b]Note:[/b] Interpolation will only be active is both the flag is set " "[b]and[/b] physics interpolation is enabled within the [SceneTree]. This can " "be tested using [method is_physics_interpolated_and_enabled]." @@ -37500,8 +37635,8 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Returns [code]true[/code] if physics interpolation is enabled (see [method " -"set_physics_interpolated]) [b]and[/b] enabled in the [SceneTree].\n" +"Returns [code]true[/code] if physics interpolation is enabled (see [member " +"physics_interpolation_mode]) [b]and[/b] enabled in the [SceneTree].\n" "This is a convenience version of [method is_physics_interpolated] that also " "checks whether physics interpolation is enabled globally.\n" "See [member SceneTree.physics_interpolation] and [member ProjectSettings." @@ -37795,14 +37930,6 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Enables or disables physics interpolation per node, offering a finer grain " -"of control than turning physics interpolation on and off globally.\n" -"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " -"interpolation can sometimes give superior results." -msgstr "" - -#: doc/classes/Node.xml -msgid "" "Enables or disables physics (i.e. fixed framerate) processing. When a node " "is being processed, it will receive a [constant " "NOTIFICATION_PHYSICS_PROCESS] at a fixed (usually 60 FPS, see [member Engine." @@ -37935,6 +38062,15 @@ msgstr "" #: doc/classes/Node.xml msgid "" +"Allows enabling or disabling physics interpolation per node, offering a " +"finer grain of control than turning physics interpolation on and off " +"globally.\n" +"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " +"interpolation can sometimes give superior results." +msgstr "" + +#: doc/classes/Node.xml +msgid "" "The node's priority in the execution order of the enabled processing " "callbacks (i.e. [constant NOTIFICATION_PROCESS], [constant " "NOTIFICATION_PHYSICS_PROCESS] and their internal counterparts). Nodes whose " @@ -38096,6 +38232,24 @@ msgid "Continue to process regardless of the [SceneTree] pause state." msgstr "" #: doc/classes/Node.xml +msgid "" +"Inherits physics interpolation mode from the node's parent. For the root " +"node, it is equivalent to [constant PHYSICS_INTERPOLATION_MODE_ON]. Default." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn off physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn on physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml msgid "Duplicate the node's signals." msgstr "" @@ -39338,7 +39492,7 @@ msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤." #: doc/classes/OptionButton.xml msgid "" -"Returns the ID of the selected item, or [code]0[/code] if no item is " +"Returns the ID of the selected item, or [code]-1[/code] if no item is " "selected." msgstr "" @@ -39360,7 +39514,8 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" "Selects an item by index and makes it the current item. This will work even " -"if the item is disabled." +"if the item is disabled.\n" +"Passing [code]-1[/code] as the index deselects any currently selected item." msgstr "" #: doc/classes/OptionButton.xml @@ -44712,6 +44867,15 @@ msgid "" "should always be preferred." msgstr "" +#: doc/classes/PoolByteArray.xml doc/classes/PoolColorArray.xml +#: doc/classes/PoolIntArray.xml doc/classes/PoolRealArray.xml +#: doc/classes/PoolStringArray.xml doc/classes/PoolVector2Array.xml +#: doc/classes/PoolVector3Array.xml +msgid "" +"Returns [code]true[/code] if the array contains the given value.\n" +"[b]Note:[/b] This is equivalent to using the [code]in[/code] operator." +msgstr "" + #: doc/classes/PoolByteArray.xml msgid "" "Returns a hexadecimal representation of this array as a [String].\n" @@ -45506,6 +45670,10 @@ msgid "[Font] used for the menu items." msgstr "" #: doc/classes/PopupMenu.xml +msgid "[Font] used for the labeled separator." +msgstr "" + +#: doc/classes/PopupMenu.xml msgid "[Texture] icon for the checked checkbox items." msgstr "" @@ -48952,19 +49120,6 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used easing from [enum Tween.EaseType]. If not set, the " -"default easing is used from the [Tween] that contains this Tweener." -msgstr "" - -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used transition from [enum Tween.TransitionType]. If not " -"set, the default transition is used from the [Tween] that contains this " -"Tweener." -msgstr "" - #: doc/classes/ProximityGroup.xml msgid "General-purpose 3D proximity detection node." msgstr "" @@ -53796,8 +53951,15 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape touches another. If there are " -"no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape touches another.\n" +"If there are no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the shape to check collisions with " "([code]with_shape[/code]), and the transformation matrix of that shape " @@ -53818,8 +53980,16 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape would touch another, if a " -"given movement was applied. If there are no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape would touch another, " +"if a given movement was applied.\n" +"If there would be no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the movement to test on this shape " "([code]local_motion[/code]), the shape to check collisions with " diff --git a/doc/translations/lv.po b/doc/translations/lv.po index d77a24b111..1c5f5ef158 100644 --- a/doc/translations/lv.po +++ b/doc/translations/lv.po @@ -949,11 +949,12 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Random range, any floating point value between [code]from[/code] and " -"[code]to[/code].\n" +"Returns a random floating point value between [code]from[/code] and " +"[code]to[/code] (both endpoints inclusive).\n" "[codeblock]\n" "prints(rand_range(0, 1), rand_range(0, 1)) # Prints e.g. 0.135591 0.405263\n" -"[/codeblock]" +"[/codeblock]\n" +"[b]Note:[/b] This is equivalent to [code]randf() * (to - from) + from[/code]." msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml @@ -997,37 +998,36 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Returns an array with the given range. Range can be 1 argument [code]N[/" -"code] (0 to [code]N[/code] - 1), two arguments ([code]initial[/code], " -"[code]final - 1[/code]) or three arguments ([code]initial[/code], " -"[code]final - 1[/code], [code]increment[/code]). Returns an empty array if " -"the range isn't valid (e.g. [code]range(2, 5, -1)[/code] or [code]range(5, " -"5, 1)[/code]).\n" -"Returns an array with the given range. [code]range()[/code] can have 1 " -"argument N ([code]0[/code] to [code]N - 1[/code]), two arguments " -"([code]initial[/code], [code]final - 1[/code]) or three arguments " -"([code]initial[/code], [code]final - 1[/code], [code]increment[/code]). " -"[code]increment[/code] can be negative. If [code]increment[/code] is " -"negative, [code]final - 1[/code] will become [code]final + 1[/code]. Also, " -"the initial value must be greater than the final value for the loop to run.\n" -"[codeblock]\n" -"print(range(4))\n" -"print(range(2, 5))\n" -"print(range(0, 6, 2))\n" -"[/codeblock]\n" -"Output:\n" +"Returns an array with the given range. [method range] can be called in three " +"ways:\n" +"[code]range(n: int)[/code]: Starts from 0, increases by steps of 1, and " +"stops [i]before[/i] [code]n[/code]. The argument [code]n[/code] is " +"[b]exclusive[/b].\n" +"[code]range(b: int, n: int)[/code]: Starts from [code]b[/code], increases by " +"steps of 1, and stops [i]before[/i] [code]n[/code]. The arguments [code]b[/" +"code] and [code]n[/code] are [b]inclusive[/b] and [b]exclusive[/b], " +"respectively.\n" +"[code]range(b: int, n: int, s: int)[/code]: Starts from [code]b[/code], " +"increases/decreases by steps of [code]s[/code], and stops [i]before[/i] " +"[code]n[/code]. The arguments [code]b[/code] and [code]n[/code] are " +"[b]inclusive[/b] and [b]exclusive[/b], respectively. The argument [code]s[/" +"code] [b]can[/b] be negative, but not [code]0[/code]. If [code]s[/code] is " +"[code]0[/code], an error message is printed.\n" +"[method range] converts all arguments to [int] before processing.\n" +"[b]Note:[/b] Returns an empty array if no value meets the value constraint " +"(e.g. [code]range(2, 5, -1)[/code] or [code]range(5, 5, 1)[/code]).\n" +"Examples:\n" "[codeblock]\n" -"[0, 1, 2, 3]\n" -"[2, 3, 4]\n" -"[0, 2, 4]\n" +"print(range(4)) # Prints [0, 1, 2, 3]\n" +"print(range(2, 5)) # Prints [2, 3, 4]\n" +"print(range(0, 6, 2)) # Prints [0, 2, 4]\n" +"print(range(4, 1, -1)) # Prints [4, 3, 2]\n" "[/codeblock]\n" "To iterate over an [Array] backwards, use:\n" "[codeblock]\n" "var array = [3, 6, 9]\n" -"var i := array.size() - 1\n" -"while i >= 0:\n" -" print(array[i])\n" -" i -= 1\n" +"for i in range(array.size(), 0, -1):\n" +" print(array[i - 1])\n" "[/codeblock]\n" "Output:\n" "[codeblock]\n" @@ -4122,17 +4122,24 @@ msgid "Maximum value for the mode enum." msgstr "" #: doc/classes/AnimatedSprite.xml -msgid "Sprite node that can use multiple textures for animation." +msgid "" +"Sprite node that contains multiple textures as frames to play for animation." msgstr "" #: doc/classes/AnimatedSprite.xml msgid "" -"Animations are created using a [SpriteFrames] resource, which can be " -"configured in the editor via the SpriteFrames panel.\n" -"[b]Note:[/b] You can associate a set of normal maps by creating additional " -"[SpriteFrames] resources with a [code]_normal[/code] suffix. For example, " -"having 2 [SpriteFrames] resources [code]run[/code] and [code]run_normal[/" -"code] will make it so the [code]run[/code] animation uses the normal map." +"[AnimatedSprite] is similar to the [Sprite] node, except it carries multiple " +"textures as animation frames. Animations are created using a [SpriteFrames] " +"resource, which allows you to import image files (or a folder containing " +"said files) to provide the animation frames for the sprite. The " +"[SpriteFrames] resource can be configured in the editor via the SpriteFrames " +"bottom panel.\n" +"[b]Note:[/b] You can associate a set of normal or specular maps by creating " +"additional [SpriteFrames] resources with a [code]_normal[/code] or " +"[code]_specular[/code] suffix. For example, having 3 [SpriteFrames] " +"resources [code]run[/code], [code]run_normal[/code], and [code]run_specular[/" +"code] will make it so the [code]run[/code] animation uses normal and " +"specular maps." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml @@ -4160,9 +4167,9 @@ msgstr "" msgid "Stops the current animation (does not reset the frame counter)." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml +#: doc/classes/AnimatedSprite.xml msgid "" -"The current animation from the [code]frames[/code] resource. If this value " +"The current animation from the [member frames] resource. If this value " "changes, the [code]frame[/code] counter is reset." msgstr "" @@ -4186,8 +4193,11 @@ msgstr "" msgid "The displayed animation frame's index." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml -msgid "The [SpriteFrames] resource containing the animation(s)." +#: doc/classes/AnimatedSprite.xml +msgid "" +"The [SpriteFrames] resource containing the animation(s). Allows you the " +"option to load, edit, clear, make unique and save the states of the " +"[SpriteFrames] resource." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/Sprite.xml @@ -4239,6 +4249,16 @@ msgid "" "provided, the current animation is played." msgstr "" +#: doc/classes/AnimatedSprite3D.xml +msgid "" +"The current animation from the [code]frames[/code] resource. If this value " +"changes, the [code]frame[/code] counter is reset." +msgstr "" + +#: doc/classes/AnimatedSprite3D.xml +msgid "The [SpriteFrames] resource containing the animation(s)." +msgstr "" + #: doc/classes/AnimatedTexture.xml msgid "Proxy texture for simple frame-based animations." msgstr "" @@ -4754,11 +4774,11 @@ msgstr "" msgid "No interpolation (nearest value)." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Linear interpolation." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Cubic interpolation." msgstr "" @@ -5793,7 +5813,10 @@ msgid "" "Seeks the animation to the [code]seconds[/code] point in time (in seconds). " "If [code]update[/code] is [code]true[/code], the animation updates too, " "otherwise it updates at process time. Events between the current frame and " -"[code]seconds[/code] are skipped." +"[code]seconds[/code] are skipped.\n" +"[b]Note:[/b] Seeking to the end of the animation doesn't emit [signal " +"animation_finished]. If you want to skip animation and emit the signal, use " +"[method advance]." msgstr "" #: doc/classes/AnimationPlayer.xml @@ -6983,7 +7006,10 @@ msgid "" "[code]0[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "Returns the number of times an element is in the array." msgstr "" @@ -7028,10 +7054,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array for a value and returns its index or [code]-1[/code] if " -"not found. Optionally, the initial search index can be passed." +"not found. Optionally, the initial search index can be passed. Returns " +"[code]-1[/code] if [code]from[/code] is out of bounds." msgstr "" #: doc/classes/Array.xml @@ -7169,11 +7199,15 @@ msgid "" "[code]null[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array in reverse order. Optionally, a start search index can be " "passed. If negative, the start index is considered relative to the end of " -"the array." +"the array. If the adjusted start index is out of bounds, this method " +"searches from the end of the array." msgstr "" #: doc/classes/Array.xml @@ -8308,7 +8342,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -8530,7 +8564,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -11641,17 +11675,17 @@ msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a normal vector in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a 3D position in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml @@ -13900,7 +13934,9 @@ msgstr "" #: doc/classes/CollisionPolygon2D.xml msgid "" "If [code]true[/code], only edges that face up, relative to " -"[CollisionPolygon2D]'s rotation, will collide with other objects." +"[CollisionPolygon2D]'s rotation, will collide with other objects.\n" +"[b]Note:[/b] This property has no effect if this [CollisionPolygon2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionPolygon2D.xml @@ -13996,7 +14032,9 @@ msgstr "" #: doc/classes/CollisionShape2D.xml msgid "" "Sets whether this collision shape should only detect collision on one side " -"(top or bottom)." +"(top or bottom).\n" +"[b]Note:[/b] This property has no effect if this [CollisionShape2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionShape2D.xml @@ -22402,6 +22440,10 @@ msgid "" "same behavior." msgstr "" +#: doc/classes/EditorSpinSlider.xml +msgid "If [code]true[/code], the slider is hidden." +msgstr "" + #: doc/classes/EditorVCSInterface.xml msgid "" "Version Control System (VCS) interface, which reads and writes to the local " @@ -25986,9 +26028,22 @@ msgid "Gradient's colors returned as a [PoolColorArray]." msgstr "" #: doc/classes/Gradient.xml +msgid "" +"Defines how the colors between points of the gradient are interpolated. See " +"[enum InterpolationMode] for available modes." +msgstr "" + +#: doc/classes/Gradient.xml msgid "Gradient's offsets returned as a [PoolRealArray]." msgstr "" +#: doc/classes/Gradient.xml +msgid "" +"Constant interpolation, color changes abruptly at each point and stays " +"uniform between. This might cause visible aliasing when used for a gradient " +"texture in some cases." +msgstr "" + #: doc/classes/GradientTexture.xml msgid "Gradient-filled texture." msgstr "" @@ -34510,13 +34565,13 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used easing from [enum Tween.EaseType]. If not set, the " "default easing is used from the [SceneTreeTween] that contains this Tweener." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used transition from [enum Tween.TransitionType]. If not " "set, the default transition is used from the [SceneTreeTween] that contains " @@ -35222,6 +35277,12 @@ msgid "Creates the agent." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]agent[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" @@ -35285,6 +35346,12 @@ msgid "Create a new map." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation agents [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns the map cell size." msgstr "" @@ -35311,6 +35378,12 @@ msgid "Returns the navigation path to reach the destination from the origin." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation regions [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns [code]true[/code] if the map is active." msgstr "" @@ -35332,6 +35405,12 @@ msgid "Creates a new region." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]region[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the map for the region." msgstr "" @@ -35804,17 +35883,57 @@ msgid "Represents the size of the [enum SourceGeometryMode] enum." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "This class is responsible for creating and clearing navigation meshes." +msgid "Helper class for creating and clearing navigation meshes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml msgid "" -"Bakes the navigation mesh. This will allow you to use pathfinding with the " -"navigation system." +"This class is responsible for creating and clearing 3D navigation meshes " +"used as [NavigationMesh] resources inside [NavigationMeshInstance]. The " +"[NavigationMeshGenerator] has very limited to no use for 2D as the " +"navigation mesh baking process expects 3D node types and 3D source geometry " +"to parse.\n" +"The entire navigation mesh baking is best done in a separate thread as the " +"voxelization, collision tests and mesh optimization steps involved are very " +"performance and time hungry operations.\n" +"Navigation mesh baking happens in multiple steps and the result depends on " +"3D source geometry and properties of the [NavigationMesh] resource. In the " +"first step, starting from a root node and depending on [NavigationMesh] " +"properties all valid 3D source geometry nodes are collected from the " +"[SceneTree]. Second, all collected nodes are parsed for their relevant 3D " +"geometry data and a combined 3D mesh is build. Due to the many different " +"types of parsable objects, from normal [MeshInstance]s to [CSGShape]s or " +"various [CollisionObject]s, some operations to collect geometry data can " +"trigger [VisualServer] and [PhysicsServer] synchronizations. Server " +"synchronization can have a negative effect on baking time or framerate as it " +"often involves [Mutex] locking for thread security. Many parsable objects " +"and the continuous synchronization with other threaded Servers can increase " +"the baking time significantly. On the other hand only a few but very large " +"and complex objects will take some time to prepare for the Servers which can " +"noticeably stall the next frame render. As a general rule the total amount " +"of parsable objects and their individual size and complexity should be " +"balanced to avoid framerate issues or very long baking times. The combined " +"mesh is then passed to the Recast Navigation Object to test the source " +"geometry for walkable terrain suitable to [NavigationMesh] agent properties " +"by creating a voxel world around the meshes bounding area.\n" +"The finalized navigation mesh is then returned and stored inside the " +"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes." +msgstr "" + +#: doc/classes/NavigationMeshGenerator.xml +msgid "" +"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " +"nodes under the provided [code]root_node[/code] or a specific group of nodes " +"for potential source geometry. The parse behavior can be controlled with the " +"[member NavigationMesh.geometry/parsed_geometry_type] and [member " +"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[NavigationMesh] resource." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "Clears the navigation mesh." +msgid "" +"Removes all polygons and vertices from the provided [code]nav_mesh[/code] " +"resource." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -35835,7 +35954,10 @@ msgid "" "thread is useful because navigation baking is not a cheap operation. When it " "is completed, it automatically sets the new [NavigationMesh]. Please note " "that baking on separate thread may be very slow if geometry is parsed from " -"meshes as async access to each mesh involves heavy synchronization." +"meshes as async access to each mesh involves heavy synchronization. Also, " +"please note that baking on a separate thread is automatically disabled on " +"operating systems that cannot use threads (such as HTML5 with threads " +"disabled)." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -35881,6 +36003,10 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle.xml +msgid "Returns the [RID] of this obstacle on the [NavigationServer]." +msgstr "" + +#: doc/classes/NavigationObstacle.xml msgid "" "Sets the [Navigation] node used by the obstacle. Useful when you don't want " "to make the obstacle a child of a [Navigation] node." @@ -35917,6 +36043,10 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle2D.xml +msgid "Returns the [RID] of this obstacle on the [Navigation2DServer]." +msgstr "" + +#: doc/classes/NavigationObstacle2D.xml msgid "" "Sets the [Navigation2D] node used by the obstacle. Useful when you don't " "want to make the obstacle a child of a [Navigation2D] node." @@ -37101,7 +37231,7 @@ msgstr "" #: doc/classes/Node.xml msgid "" "Returns [code]true[/code] if the physics interpolated flag is set for this " -"Node (see [method set_physics_interpolated]).\n" +"Node (see [member physics_interpolation_mode]).\n" "[b]Note:[/b] Interpolation will only be active is both the flag is set " "[b]and[/b] physics interpolation is enabled within the [SceneTree]. This can " "be tested using [method is_physics_interpolated_and_enabled]." @@ -37109,8 +37239,8 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Returns [code]true[/code] if physics interpolation is enabled (see [method " -"set_physics_interpolated]) [b]and[/b] enabled in the [SceneTree].\n" +"Returns [code]true[/code] if physics interpolation is enabled (see [member " +"physics_interpolation_mode]) [b]and[/b] enabled in the [SceneTree].\n" "This is a convenience version of [method is_physics_interpolated] that also " "checks whether physics interpolation is enabled globally.\n" "See [member SceneTree.physics_interpolation] and [member ProjectSettings." @@ -37404,14 +37534,6 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Enables or disables physics interpolation per node, offering a finer grain " -"of control than turning physics interpolation on and off globally.\n" -"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " -"interpolation can sometimes give superior results." -msgstr "" - -#: doc/classes/Node.xml -msgid "" "Enables or disables physics (i.e. fixed framerate) processing. When a node " "is being processed, it will receive a [constant " "NOTIFICATION_PHYSICS_PROCESS] at a fixed (usually 60 FPS, see [member Engine." @@ -37544,6 +37666,15 @@ msgstr "" #: doc/classes/Node.xml msgid "" +"Allows enabling or disabling physics interpolation per node, offering a " +"finer grain of control than turning physics interpolation on and off " +"globally.\n" +"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " +"interpolation can sometimes give superior results." +msgstr "" + +#: doc/classes/Node.xml +msgid "" "The node's priority in the execution order of the enabled processing " "callbacks (i.e. [constant NOTIFICATION_PROCESS], [constant " "NOTIFICATION_PHYSICS_PROCESS] and their internal counterparts). Nodes whose " @@ -37705,6 +37836,24 @@ msgid "Continue to process regardless of the [SceneTree] pause state." msgstr "" #: doc/classes/Node.xml +msgid "" +"Inherits physics interpolation mode from the node's parent. For the root " +"node, it is equivalent to [constant PHYSICS_INTERPOLATION_MODE_ON]. Default." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn off physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn on physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml msgid "Duplicate the node's signals." msgstr "" @@ -38945,7 +39094,7 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" -"Returns the ID of the selected item, or [code]0[/code] if no item is " +"Returns the ID of the selected item, or [code]-1[/code] if no item is " "selected." msgstr "" @@ -38967,7 +39116,8 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" "Selects an item by index and makes it the current item. This will work even " -"if the item is disabled." +"if the item is disabled.\n" +"Passing [code]-1[/code] as the index deselects any currently selected item." msgstr "" #: doc/classes/OptionButton.xml @@ -44294,6 +44444,15 @@ msgid "" "should always be preferred." msgstr "" +#: doc/classes/PoolByteArray.xml doc/classes/PoolColorArray.xml +#: doc/classes/PoolIntArray.xml doc/classes/PoolRealArray.xml +#: doc/classes/PoolStringArray.xml doc/classes/PoolVector2Array.xml +#: doc/classes/PoolVector3Array.xml +msgid "" +"Returns [code]true[/code] if the array contains the given value.\n" +"[b]Note:[/b] This is equivalent to using the [code]in[/code] operator." +msgstr "" + #: doc/classes/PoolByteArray.xml msgid "" "Returns a hexadecimal representation of this array as a [String].\n" @@ -45087,6 +45246,10 @@ msgid "[Font] used for the menu items." msgstr "" #: doc/classes/PopupMenu.xml +msgid "[Font] used for the labeled separator." +msgstr "" + +#: doc/classes/PopupMenu.xml msgid "[Texture] icon for the checked checkbox items." msgstr "" @@ -48532,19 +48695,6 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used easing from [enum Tween.EaseType]. If not set, the " -"default easing is used from the [Tween] that contains this Tweener." -msgstr "" - -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used transition from [enum Tween.TransitionType]. If not " -"set, the default transition is used from the [Tween] that contains this " -"Tweener." -msgstr "" - #: doc/classes/ProximityGroup.xml msgid "General-purpose 3D proximity detection node." msgstr "" @@ -53374,8 +53524,15 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape touches another. If there are " -"no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape touches another.\n" +"If there are no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the shape to check collisions with " "([code]with_shape[/code]), and the transformation matrix of that shape " @@ -53396,8 +53553,16 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape would touch another, if a " -"given movement was applied. If there are no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape would touch another, " +"if a given movement was applied.\n" +"If there would be no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the movement to test on this shape " "([code]local_motion[/code]), the shape to check collisions with " diff --git a/doc/translations/mr.po b/doc/translations/mr.po index 2e152e7774..fcd595473b 100644 --- a/doc/translations/mr.po +++ b/doc/translations/mr.po @@ -932,11 +932,12 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Random range, any floating point value between [code]from[/code] and " -"[code]to[/code].\n" +"Returns a random floating point value between [code]from[/code] and " +"[code]to[/code] (both endpoints inclusive).\n" "[codeblock]\n" "prints(rand_range(0, 1), rand_range(0, 1)) # Prints e.g. 0.135591 0.405263\n" -"[/codeblock]" +"[/codeblock]\n" +"[b]Note:[/b] This is equivalent to [code]randf() * (to - from) + from[/code]." msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml @@ -980,37 +981,36 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Returns an array with the given range. Range can be 1 argument [code]N[/" -"code] (0 to [code]N[/code] - 1), two arguments ([code]initial[/code], " -"[code]final - 1[/code]) or three arguments ([code]initial[/code], " -"[code]final - 1[/code], [code]increment[/code]). Returns an empty array if " -"the range isn't valid (e.g. [code]range(2, 5, -1)[/code] or [code]range(5, " -"5, 1)[/code]).\n" -"Returns an array with the given range. [code]range()[/code] can have 1 " -"argument N ([code]0[/code] to [code]N - 1[/code]), two arguments " -"([code]initial[/code], [code]final - 1[/code]) or three arguments " -"([code]initial[/code], [code]final - 1[/code], [code]increment[/code]). " -"[code]increment[/code] can be negative. If [code]increment[/code] is " -"negative, [code]final - 1[/code] will become [code]final + 1[/code]. Also, " -"the initial value must be greater than the final value for the loop to run.\n" -"[codeblock]\n" -"print(range(4))\n" -"print(range(2, 5))\n" -"print(range(0, 6, 2))\n" -"[/codeblock]\n" -"Output:\n" +"Returns an array with the given range. [method range] can be called in three " +"ways:\n" +"[code]range(n: int)[/code]: Starts from 0, increases by steps of 1, and " +"stops [i]before[/i] [code]n[/code]. The argument [code]n[/code] is " +"[b]exclusive[/b].\n" +"[code]range(b: int, n: int)[/code]: Starts from [code]b[/code], increases by " +"steps of 1, and stops [i]before[/i] [code]n[/code]. The arguments [code]b[/" +"code] and [code]n[/code] are [b]inclusive[/b] and [b]exclusive[/b], " +"respectively.\n" +"[code]range(b: int, n: int, s: int)[/code]: Starts from [code]b[/code], " +"increases/decreases by steps of [code]s[/code], and stops [i]before[/i] " +"[code]n[/code]. The arguments [code]b[/code] and [code]n[/code] are " +"[b]inclusive[/b] and [b]exclusive[/b], respectively. The argument [code]s[/" +"code] [b]can[/b] be negative, but not [code]0[/code]. If [code]s[/code] is " +"[code]0[/code], an error message is printed.\n" +"[method range] converts all arguments to [int] before processing.\n" +"[b]Note:[/b] Returns an empty array if no value meets the value constraint " +"(e.g. [code]range(2, 5, -1)[/code] or [code]range(5, 5, 1)[/code]).\n" +"Examples:\n" "[codeblock]\n" -"[0, 1, 2, 3]\n" -"[2, 3, 4]\n" -"[0, 2, 4]\n" +"print(range(4)) # Prints [0, 1, 2, 3]\n" +"print(range(2, 5)) # Prints [2, 3, 4]\n" +"print(range(0, 6, 2)) # Prints [0, 2, 4]\n" +"print(range(4, 1, -1)) # Prints [4, 3, 2]\n" "[/codeblock]\n" "To iterate over an [Array] backwards, use:\n" "[codeblock]\n" "var array = [3, 6, 9]\n" -"var i := array.size() - 1\n" -"while i >= 0:\n" -" print(array[i])\n" -" i -= 1\n" +"for i in range(array.size(), 0, -1):\n" +" print(array[i - 1])\n" "[/codeblock]\n" "Output:\n" "[codeblock]\n" @@ -4105,17 +4105,24 @@ msgid "Maximum value for the mode enum." msgstr "" #: doc/classes/AnimatedSprite.xml -msgid "Sprite node that can use multiple textures for animation." +msgid "" +"Sprite node that contains multiple textures as frames to play for animation." msgstr "" #: doc/classes/AnimatedSprite.xml msgid "" -"Animations are created using a [SpriteFrames] resource, which can be " -"configured in the editor via the SpriteFrames panel.\n" -"[b]Note:[/b] You can associate a set of normal maps by creating additional " -"[SpriteFrames] resources with a [code]_normal[/code] suffix. For example, " -"having 2 [SpriteFrames] resources [code]run[/code] and [code]run_normal[/" -"code] will make it so the [code]run[/code] animation uses the normal map." +"[AnimatedSprite] is similar to the [Sprite] node, except it carries multiple " +"textures as animation frames. Animations are created using a [SpriteFrames] " +"resource, which allows you to import image files (or a folder containing " +"said files) to provide the animation frames for the sprite. The " +"[SpriteFrames] resource can be configured in the editor via the SpriteFrames " +"bottom panel.\n" +"[b]Note:[/b] You can associate a set of normal or specular maps by creating " +"additional [SpriteFrames] resources with a [code]_normal[/code] or " +"[code]_specular[/code] suffix. For example, having 3 [SpriteFrames] " +"resources [code]run[/code], [code]run_normal[/code], and [code]run_specular[/" +"code] will make it so the [code]run[/code] animation uses normal and " +"specular maps." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml @@ -4143,9 +4150,9 @@ msgstr "" msgid "Stops the current animation (does not reset the frame counter)." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml +#: doc/classes/AnimatedSprite.xml msgid "" -"The current animation from the [code]frames[/code] resource. If this value " +"The current animation from the [member frames] resource. If this value " "changes, the [code]frame[/code] counter is reset." msgstr "" @@ -4169,8 +4176,11 @@ msgstr "" msgid "The displayed animation frame's index." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml -msgid "The [SpriteFrames] resource containing the animation(s)." +#: doc/classes/AnimatedSprite.xml +msgid "" +"The [SpriteFrames] resource containing the animation(s). Allows you the " +"option to load, edit, clear, make unique and save the states of the " +"[SpriteFrames] resource." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/Sprite.xml @@ -4222,6 +4232,16 @@ msgid "" "provided, the current animation is played." msgstr "" +#: doc/classes/AnimatedSprite3D.xml +msgid "" +"The current animation from the [code]frames[/code] resource. If this value " +"changes, the [code]frame[/code] counter is reset." +msgstr "" + +#: doc/classes/AnimatedSprite3D.xml +msgid "The [SpriteFrames] resource containing the animation(s)." +msgstr "" + #: doc/classes/AnimatedTexture.xml msgid "Proxy texture for simple frame-based animations." msgstr "" @@ -4737,11 +4757,11 @@ msgstr "" msgid "No interpolation (nearest value)." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Linear interpolation." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Cubic interpolation." msgstr "" @@ -5776,7 +5796,10 @@ msgid "" "Seeks the animation to the [code]seconds[/code] point in time (in seconds). " "If [code]update[/code] is [code]true[/code], the animation updates too, " "otherwise it updates at process time. Events between the current frame and " -"[code]seconds[/code] are skipped." +"[code]seconds[/code] are skipped.\n" +"[b]Note:[/b] Seeking to the end of the animation doesn't emit [signal " +"animation_finished]. If you want to skip animation and emit the signal, use " +"[method advance]." msgstr "" #: doc/classes/AnimationPlayer.xml @@ -6966,7 +6989,10 @@ msgid "" "[code]0[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "Returns the number of times an element is in the array." msgstr "" @@ -7011,10 +7037,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array for a value and returns its index or [code]-1[/code] if " -"not found. Optionally, the initial search index can be passed." +"not found. Optionally, the initial search index can be passed. Returns " +"[code]-1[/code] if [code]from[/code] is out of bounds." msgstr "" #: doc/classes/Array.xml @@ -7152,11 +7182,15 @@ msgid "" "[code]null[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array in reverse order. Optionally, a start search index can be " "passed. If negative, the start index is considered relative to the end of " -"the array." +"the array. If the adjusted start index is out of bounds, this method " +"searches from the end of the array." msgstr "" #: doc/classes/Array.xml @@ -8291,7 +8325,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -8513,7 +8547,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -11624,17 +11658,17 @@ msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a normal vector in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a 3D position in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml @@ -13883,7 +13917,9 @@ msgstr "" #: doc/classes/CollisionPolygon2D.xml msgid "" "If [code]true[/code], only edges that face up, relative to " -"[CollisionPolygon2D]'s rotation, will collide with other objects." +"[CollisionPolygon2D]'s rotation, will collide with other objects.\n" +"[b]Note:[/b] This property has no effect if this [CollisionPolygon2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionPolygon2D.xml @@ -13979,7 +14015,9 @@ msgstr "" #: doc/classes/CollisionShape2D.xml msgid "" "Sets whether this collision shape should only detect collision on one side " -"(top or bottom)." +"(top or bottom).\n" +"[b]Note:[/b] This property has no effect if this [CollisionShape2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionShape2D.xml @@ -22385,6 +22423,10 @@ msgid "" "same behavior." msgstr "" +#: doc/classes/EditorSpinSlider.xml +msgid "If [code]true[/code], the slider is hidden." +msgstr "" + #: doc/classes/EditorVCSInterface.xml msgid "" "Version Control System (VCS) interface, which reads and writes to the local " @@ -25966,9 +26008,22 @@ msgid "Gradient's colors returned as a [PoolColorArray]." msgstr "" #: doc/classes/Gradient.xml +msgid "" +"Defines how the colors between points of the gradient are interpolated. See " +"[enum InterpolationMode] for available modes." +msgstr "" + +#: doc/classes/Gradient.xml msgid "Gradient's offsets returned as a [PoolRealArray]." msgstr "" +#: doc/classes/Gradient.xml +msgid "" +"Constant interpolation, color changes abruptly at each point and stays " +"uniform between. This might cause visible aliasing when used for a gradient " +"texture in some cases." +msgstr "" + #: doc/classes/GradientTexture.xml msgid "Gradient-filled texture." msgstr "" @@ -34490,13 +34545,13 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used easing from [enum Tween.EaseType]. If not set, the " "default easing is used from the [SceneTreeTween] that contains this Tweener." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used transition from [enum Tween.TransitionType]. If not " "set, the default transition is used from the [SceneTreeTween] that contains " @@ -35202,6 +35257,12 @@ msgid "Creates the agent." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]agent[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" @@ -35265,6 +35326,12 @@ msgid "Create a new map." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation agents [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns the map cell size." msgstr "" @@ -35291,6 +35358,12 @@ msgid "Returns the navigation path to reach the destination from the origin." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation regions [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns [code]true[/code] if the map is active." msgstr "" @@ -35312,6 +35385,12 @@ msgid "Creates a new region." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]region[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the map for the region." msgstr "" @@ -35784,17 +35863,57 @@ msgid "Represents the size of the [enum SourceGeometryMode] enum." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "This class is responsible for creating and clearing navigation meshes." +msgid "Helper class for creating and clearing navigation meshes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml msgid "" -"Bakes the navigation mesh. This will allow you to use pathfinding with the " -"navigation system." +"This class is responsible for creating and clearing 3D navigation meshes " +"used as [NavigationMesh] resources inside [NavigationMeshInstance]. The " +"[NavigationMeshGenerator] has very limited to no use for 2D as the " +"navigation mesh baking process expects 3D node types and 3D source geometry " +"to parse.\n" +"The entire navigation mesh baking is best done in a separate thread as the " +"voxelization, collision tests and mesh optimization steps involved are very " +"performance and time hungry operations.\n" +"Navigation mesh baking happens in multiple steps and the result depends on " +"3D source geometry and properties of the [NavigationMesh] resource. In the " +"first step, starting from a root node and depending on [NavigationMesh] " +"properties all valid 3D source geometry nodes are collected from the " +"[SceneTree]. Second, all collected nodes are parsed for their relevant 3D " +"geometry data and a combined 3D mesh is build. Due to the many different " +"types of parsable objects, from normal [MeshInstance]s to [CSGShape]s or " +"various [CollisionObject]s, some operations to collect geometry data can " +"trigger [VisualServer] and [PhysicsServer] synchronizations. Server " +"synchronization can have a negative effect on baking time or framerate as it " +"often involves [Mutex] locking for thread security. Many parsable objects " +"and the continuous synchronization with other threaded Servers can increase " +"the baking time significantly. On the other hand only a few but very large " +"and complex objects will take some time to prepare for the Servers which can " +"noticeably stall the next frame render. As a general rule the total amount " +"of parsable objects and their individual size and complexity should be " +"balanced to avoid framerate issues or very long baking times. The combined " +"mesh is then passed to the Recast Navigation Object to test the source " +"geometry for walkable terrain suitable to [NavigationMesh] agent properties " +"by creating a voxel world around the meshes bounding area.\n" +"The finalized navigation mesh is then returned and stored inside the " +"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes." +msgstr "" + +#: doc/classes/NavigationMeshGenerator.xml +msgid "" +"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " +"nodes under the provided [code]root_node[/code] or a specific group of nodes " +"for potential source geometry. The parse behavior can be controlled with the " +"[member NavigationMesh.geometry/parsed_geometry_type] and [member " +"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[NavigationMesh] resource." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "Clears the navigation mesh." +msgid "" +"Removes all polygons and vertices from the provided [code]nav_mesh[/code] " +"resource." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -35815,7 +35934,10 @@ msgid "" "thread is useful because navigation baking is not a cheap operation. When it " "is completed, it automatically sets the new [NavigationMesh]. Please note " "that baking on separate thread may be very slow if geometry is parsed from " -"meshes as async access to each mesh involves heavy synchronization." +"meshes as async access to each mesh involves heavy synchronization. Also, " +"please note that baking on a separate thread is automatically disabled on " +"operating systems that cannot use threads (such as HTML5 with threads " +"disabled)." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -35861,6 +35983,10 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle.xml +msgid "Returns the [RID] of this obstacle on the [NavigationServer]." +msgstr "" + +#: doc/classes/NavigationObstacle.xml msgid "" "Sets the [Navigation] node used by the obstacle. Useful when you don't want " "to make the obstacle a child of a [Navigation] node." @@ -35897,6 +36023,10 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle2D.xml +msgid "Returns the [RID] of this obstacle on the [Navigation2DServer]." +msgstr "" + +#: doc/classes/NavigationObstacle2D.xml msgid "" "Sets the [Navigation2D] node used by the obstacle. Useful when you don't " "want to make the obstacle a child of a [Navigation2D] node." @@ -37081,7 +37211,7 @@ msgstr "" #: doc/classes/Node.xml msgid "" "Returns [code]true[/code] if the physics interpolated flag is set for this " -"Node (see [method set_physics_interpolated]).\n" +"Node (see [member physics_interpolation_mode]).\n" "[b]Note:[/b] Interpolation will only be active is both the flag is set " "[b]and[/b] physics interpolation is enabled within the [SceneTree]. This can " "be tested using [method is_physics_interpolated_and_enabled]." @@ -37089,8 +37219,8 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Returns [code]true[/code] if physics interpolation is enabled (see [method " -"set_physics_interpolated]) [b]and[/b] enabled in the [SceneTree].\n" +"Returns [code]true[/code] if physics interpolation is enabled (see [member " +"physics_interpolation_mode]) [b]and[/b] enabled in the [SceneTree].\n" "This is a convenience version of [method is_physics_interpolated] that also " "checks whether physics interpolation is enabled globally.\n" "See [member SceneTree.physics_interpolation] and [member ProjectSettings." @@ -37384,14 +37514,6 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Enables or disables physics interpolation per node, offering a finer grain " -"of control than turning physics interpolation on and off globally.\n" -"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " -"interpolation can sometimes give superior results." -msgstr "" - -#: doc/classes/Node.xml -msgid "" "Enables or disables physics (i.e. fixed framerate) processing. When a node " "is being processed, it will receive a [constant " "NOTIFICATION_PHYSICS_PROCESS] at a fixed (usually 60 FPS, see [member Engine." @@ -37524,6 +37646,15 @@ msgstr "" #: doc/classes/Node.xml msgid "" +"Allows enabling or disabling physics interpolation per node, offering a " +"finer grain of control than turning physics interpolation on and off " +"globally.\n" +"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " +"interpolation can sometimes give superior results." +msgstr "" + +#: doc/classes/Node.xml +msgid "" "The node's priority in the execution order of the enabled processing " "callbacks (i.e. [constant NOTIFICATION_PROCESS], [constant " "NOTIFICATION_PHYSICS_PROCESS] and their internal counterparts). Nodes whose " @@ -37685,6 +37816,24 @@ msgid "Continue to process regardless of the [SceneTree] pause state." msgstr "" #: doc/classes/Node.xml +msgid "" +"Inherits physics interpolation mode from the node's parent. For the root " +"node, it is equivalent to [constant PHYSICS_INTERPOLATION_MODE_ON]. Default." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn off physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn on physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml msgid "Duplicate the node's signals." msgstr "" @@ -38925,7 +39074,7 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" -"Returns the ID of the selected item, or [code]0[/code] if no item is " +"Returns the ID of the selected item, or [code]-1[/code] if no item is " "selected." msgstr "" @@ -38947,7 +39096,8 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" "Selects an item by index and makes it the current item. This will work even " -"if the item is disabled." +"if the item is disabled.\n" +"Passing [code]-1[/code] as the index deselects any currently selected item." msgstr "" #: doc/classes/OptionButton.xml @@ -44274,6 +44424,15 @@ msgid "" "should always be preferred." msgstr "" +#: doc/classes/PoolByteArray.xml doc/classes/PoolColorArray.xml +#: doc/classes/PoolIntArray.xml doc/classes/PoolRealArray.xml +#: doc/classes/PoolStringArray.xml doc/classes/PoolVector2Array.xml +#: doc/classes/PoolVector3Array.xml +msgid "" +"Returns [code]true[/code] if the array contains the given value.\n" +"[b]Note:[/b] This is equivalent to using the [code]in[/code] operator." +msgstr "" + #: doc/classes/PoolByteArray.xml msgid "" "Returns a hexadecimal representation of this array as a [String].\n" @@ -45067,6 +45226,10 @@ msgid "[Font] used for the menu items." msgstr "" #: doc/classes/PopupMenu.xml +msgid "[Font] used for the labeled separator." +msgstr "" + +#: doc/classes/PopupMenu.xml msgid "[Texture] icon for the checked checkbox items." msgstr "" @@ -48512,19 +48675,6 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used easing from [enum Tween.EaseType]. If not set, the " -"default easing is used from the [Tween] that contains this Tweener." -msgstr "" - -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used transition from [enum Tween.TransitionType]. If not " -"set, the default transition is used from the [Tween] that contains this " -"Tweener." -msgstr "" - #: doc/classes/ProximityGroup.xml msgid "General-purpose 3D proximity detection node." msgstr "" @@ -53354,8 +53504,15 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape touches another. If there are " -"no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape touches another.\n" +"If there are no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the shape to check collisions with " "([code]with_shape[/code]), and the transformation matrix of that shape " @@ -53376,8 +53533,16 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape would touch another, if a " -"given movement was applied. If there are no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape would touch another, " +"if a given movement was applied.\n" +"If there would be no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the movement to test on this shape " "([code]local_motion[/code]), the shape to check collisions with " diff --git a/doc/translations/nb.po b/doc/translations/nb.po index d52cdc0ce9..a4f62d1b5e 100644 --- a/doc/translations/nb.po +++ b/doc/translations/nb.po @@ -944,11 +944,12 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Random range, any floating point value between [code]from[/code] and " -"[code]to[/code].\n" +"Returns a random floating point value between [code]from[/code] and " +"[code]to[/code] (both endpoints inclusive).\n" "[codeblock]\n" "prints(rand_range(0, 1), rand_range(0, 1)) # Prints e.g. 0.135591 0.405263\n" -"[/codeblock]" +"[/codeblock]\n" +"[b]Note:[/b] This is equivalent to [code]randf() * (to - from) + from[/code]." msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml @@ -992,37 +993,36 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Returns an array with the given range. Range can be 1 argument [code]N[/" -"code] (0 to [code]N[/code] - 1), two arguments ([code]initial[/code], " -"[code]final - 1[/code]) or three arguments ([code]initial[/code], " -"[code]final - 1[/code], [code]increment[/code]). Returns an empty array if " -"the range isn't valid (e.g. [code]range(2, 5, -1)[/code] or [code]range(5, " -"5, 1)[/code]).\n" -"Returns an array with the given range. [code]range()[/code] can have 1 " -"argument N ([code]0[/code] to [code]N - 1[/code]), two arguments " -"([code]initial[/code], [code]final - 1[/code]) or three arguments " -"([code]initial[/code], [code]final - 1[/code], [code]increment[/code]). " -"[code]increment[/code] can be negative. If [code]increment[/code] is " -"negative, [code]final - 1[/code] will become [code]final + 1[/code]. Also, " -"the initial value must be greater than the final value for the loop to run.\n" -"[codeblock]\n" -"print(range(4))\n" -"print(range(2, 5))\n" -"print(range(0, 6, 2))\n" -"[/codeblock]\n" -"Output:\n" +"Returns an array with the given range. [method range] can be called in three " +"ways:\n" +"[code]range(n: int)[/code]: Starts from 0, increases by steps of 1, and " +"stops [i]before[/i] [code]n[/code]. The argument [code]n[/code] is " +"[b]exclusive[/b].\n" +"[code]range(b: int, n: int)[/code]: Starts from [code]b[/code], increases by " +"steps of 1, and stops [i]before[/i] [code]n[/code]. The arguments [code]b[/" +"code] and [code]n[/code] are [b]inclusive[/b] and [b]exclusive[/b], " +"respectively.\n" +"[code]range(b: int, n: int, s: int)[/code]: Starts from [code]b[/code], " +"increases/decreases by steps of [code]s[/code], and stops [i]before[/i] " +"[code]n[/code]. The arguments [code]b[/code] and [code]n[/code] are " +"[b]inclusive[/b] and [b]exclusive[/b], respectively. The argument [code]s[/" +"code] [b]can[/b] be negative, but not [code]0[/code]. If [code]s[/code] is " +"[code]0[/code], an error message is printed.\n" +"[method range] converts all arguments to [int] before processing.\n" +"[b]Note:[/b] Returns an empty array if no value meets the value constraint " +"(e.g. [code]range(2, 5, -1)[/code] or [code]range(5, 5, 1)[/code]).\n" +"Examples:\n" "[codeblock]\n" -"[0, 1, 2, 3]\n" -"[2, 3, 4]\n" -"[0, 2, 4]\n" +"print(range(4)) # Prints [0, 1, 2, 3]\n" +"print(range(2, 5)) # Prints [2, 3, 4]\n" +"print(range(0, 6, 2)) # Prints [0, 2, 4]\n" +"print(range(4, 1, -1)) # Prints [4, 3, 2]\n" "[/codeblock]\n" "To iterate over an [Array] backwards, use:\n" "[codeblock]\n" "var array = [3, 6, 9]\n" -"var i := array.size() - 1\n" -"while i >= 0:\n" -" print(array[i])\n" -" i -= 1\n" +"for i in range(array.size(), 0, -1):\n" +" print(array[i - 1])\n" "[/codeblock]\n" "Output:\n" "[codeblock]\n" @@ -4117,17 +4117,24 @@ msgid "Maximum value for the mode enum." msgstr "" #: doc/classes/AnimatedSprite.xml -msgid "Sprite node that can use multiple textures for animation." +msgid "" +"Sprite node that contains multiple textures as frames to play for animation." msgstr "" #: doc/classes/AnimatedSprite.xml msgid "" -"Animations are created using a [SpriteFrames] resource, which can be " -"configured in the editor via the SpriteFrames panel.\n" -"[b]Note:[/b] You can associate a set of normal maps by creating additional " -"[SpriteFrames] resources with a [code]_normal[/code] suffix. For example, " -"having 2 [SpriteFrames] resources [code]run[/code] and [code]run_normal[/" -"code] will make it so the [code]run[/code] animation uses the normal map." +"[AnimatedSprite] is similar to the [Sprite] node, except it carries multiple " +"textures as animation frames. Animations are created using a [SpriteFrames] " +"resource, which allows you to import image files (or a folder containing " +"said files) to provide the animation frames for the sprite. The " +"[SpriteFrames] resource can be configured in the editor via the SpriteFrames " +"bottom panel.\n" +"[b]Note:[/b] You can associate a set of normal or specular maps by creating " +"additional [SpriteFrames] resources with a [code]_normal[/code] or " +"[code]_specular[/code] suffix. For example, having 3 [SpriteFrames] " +"resources [code]run[/code], [code]run_normal[/code], and [code]run_specular[/" +"code] will make it so the [code]run[/code] animation uses normal and " +"specular maps." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml @@ -4155,9 +4162,9 @@ msgstr "" msgid "Stops the current animation (does not reset the frame counter)." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml +#: doc/classes/AnimatedSprite.xml msgid "" -"The current animation from the [code]frames[/code] resource. If this value " +"The current animation from the [member frames] resource. If this value " "changes, the [code]frame[/code] counter is reset." msgstr "" @@ -4181,8 +4188,11 @@ msgstr "" msgid "The displayed animation frame's index." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml -msgid "The [SpriteFrames] resource containing the animation(s)." +#: doc/classes/AnimatedSprite.xml +msgid "" +"The [SpriteFrames] resource containing the animation(s). Allows you the " +"option to load, edit, clear, make unique and save the states of the " +"[SpriteFrames] resource." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/Sprite.xml @@ -4234,6 +4244,16 @@ msgid "" "provided, the current animation is played." msgstr "" +#: doc/classes/AnimatedSprite3D.xml +msgid "" +"The current animation from the [code]frames[/code] resource. If this value " +"changes, the [code]frame[/code] counter is reset." +msgstr "" + +#: doc/classes/AnimatedSprite3D.xml +msgid "The [SpriteFrames] resource containing the animation(s)." +msgstr "" + #: doc/classes/AnimatedTexture.xml msgid "Proxy texture for simple frame-based animations." msgstr "" @@ -4749,11 +4769,11 @@ msgstr "" msgid "No interpolation (nearest value)." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Linear interpolation." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Cubic interpolation." msgstr "" @@ -5788,7 +5808,10 @@ msgid "" "Seeks the animation to the [code]seconds[/code] point in time (in seconds). " "If [code]update[/code] is [code]true[/code], the animation updates too, " "otherwise it updates at process time. Events between the current frame and " -"[code]seconds[/code] are skipped." +"[code]seconds[/code] are skipped.\n" +"[b]Note:[/b] Seeking to the end of the animation doesn't emit [signal " +"animation_finished]. If you want to skip animation and emit the signal, use " +"[method advance]." msgstr "" #: doc/classes/AnimationPlayer.xml @@ -6978,7 +7001,10 @@ msgid "" "[code]0[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "Returns the number of times an element is in the array." msgstr "" @@ -7023,10 +7049,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array for a value and returns its index or [code]-1[/code] if " -"not found. Optionally, the initial search index can be passed." +"not found. Optionally, the initial search index can be passed. Returns " +"[code]-1[/code] if [code]from[/code] is out of bounds." msgstr "" #: doc/classes/Array.xml @@ -7164,11 +7194,15 @@ msgid "" "[code]null[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array in reverse order. Optionally, a start search index can be " "passed. If negative, the start index is considered relative to the end of " -"the array." +"the array. If the adjusted start index is out of bounds, this method " +"searches from the end of the array." msgstr "" #: doc/classes/Array.xml @@ -8303,7 +8337,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -8525,7 +8559,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -11636,17 +11670,17 @@ msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a normal vector in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a 3D position in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml @@ -13895,7 +13929,9 @@ msgstr "" #: doc/classes/CollisionPolygon2D.xml msgid "" "If [code]true[/code], only edges that face up, relative to " -"[CollisionPolygon2D]'s rotation, will collide with other objects." +"[CollisionPolygon2D]'s rotation, will collide with other objects.\n" +"[b]Note:[/b] This property has no effect if this [CollisionPolygon2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionPolygon2D.xml @@ -13991,7 +14027,9 @@ msgstr "" #: doc/classes/CollisionShape2D.xml msgid "" "Sets whether this collision shape should only detect collision on one side " -"(top or bottom)." +"(top or bottom).\n" +"[b]Note:[/b] This property has no effect if this [CollisionShape2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionShape2D.xml @@ -22397,6 +22435,10 @@ msgid "" "same behavior." msgstr "" +#: doc/classes/EditorSpinSlider.xml +msgid "If [code]true[/code], the slider is hidden." +msgstr "" + #: doc/classes/EditorVCSInterface.xml msgid "" "Version Control System (VCS) interface, which reads and writes to the local " @@ -25978,9 +26020,22 @@ msgid "Gradient's colors returned as a [PoolColorArray]." msgstr "" #: doc/classes/Gradient.xml +msgid "" +"Defines how the colors between points of the gradient are interpolated. See " +"[enum InterpolationMode] for available modes." +msgstr "" + +#: doc/classes/Gradient.xml msgid "Gradient's offsets returned as a [PoolRealArray]." msgstr "" +#: doc/classes/Gradient.xml +msgid "" +"Constant interpolation, color changes abruptly at each point and stays " +"uniform between. This might cause visible aliasing when used for a gradient " +"texture in some cases." +msgstr "" + #: doc/classes/GradientTexture.xml msgid "Gradient-filled texture." msgstr "" @@ -34502,13 +34557,13 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used easing from [enum Tween.EaseType]. If not set, the " "default easing is used from the [SceneTreeTween] that contains this Tweener." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used transition from [enum Tween.TransitionType]. If not " "set, the default transition is used from the [SceneTreeTween] that contains " @@ -35214,6 +35269,12 @@ msgid "Creates the agent." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]agent[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" @@ -35277,6 +35338,12 @@ msgid "Create a new map." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation agents [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns the map cell size." msgstr "" @@ -35303,6 +35370,12 @@ msgid "Returns the navigation path to reach the destination from the origin." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation regions [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns [code]true[/code] if the map is active." msgstr "" @@ -35324,6 +35397,12 @@ msgid "Creates a new region." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]region[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the map for the region." msgstr "" @@ -35796,17 +35875,57 @@ msgid "Represents the size of the [enum SourceGeometryMode] enum." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "This class is responsible for creating and clearing navigation meshes." +msgid "Helper class for creating and clearing navigation meshes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml msgid "" -"Bakes the navigation mesh. This will allow you to use pathfinding with the " -"navigation system." +"This class is responsible for creating and clearing 3D navigation meshes " +"used as [NavigationMesh] resources inside [NavigationMeshInstance]. The " +"[NavigationMeshGenerator] has very limited to no use for 2D as the " +"navigation mesh baking process expects 3D node types and 3D source geometry " +"to parse.\n" +"The entire navigation mesh baking is best done in a separate thread as the " +"voxelization, collision tests and mesh optimization steps involved are very " +"performance and time hungry operations.\n" +"Navigation mesh baking happens in multiple steps and the result depends on " +"3D source geometry and properties of the [NavigationMesh] resource. In the " +"first step, starting from a root node and depending on [NavigationMesh] " +"properties all valid 3D source geometry nodes are collected from the " +"[SceneTree]. Second, all collected nodes are parsed for their relevant 3D " +"geometry data and a combined 3D mesh is build. Due to the many different " +"types of parsable objects, from normal [MeshInstance]s to [CSGShape]s or " +"various [CollisionObject]s, some operations to collect geometry data can " +"trigger [VisualServer] and [PhysicsServer] synchronizations. Server " +"synchronization can have a negative effect on baking time or framerate as it " +"often involves [Mutex] locking for thread security. Many parsable objects " +"and the continuous synchronization with other threaded Servers can increase " +"the baking time significantly. On the other hand only a few but very large " +"and complex objects will take some time to prepare for the Servers which can " +"noticeably stall the next frame render. As a general rule the total amount " +"of parsable objects and their individual size and complexity should be " +"balanced to avoid framerate issues or very long baking times. The combined " +"mesh is then passed to the Recast Navigation Object to test the source " +"geometry for walkable terrain suitable to [NavigationMesh] agent properties " +"by creating a voxel world around the meshes bounding area.\n" +"The finalized navigation mesh is then returned and stored inside the " +"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes." +msgstr "" + +#: doc/classes/NavigationMeshGenerator.xml +msgid "" +"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " +"nodes under the provided [code]root_node[/code] or a specific group of nodes " +"for potential source geometry. The parse behavior can be controlled with the " +"[member NavigationMesh.geometry/parsed_geometry_type] and [member " +"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[NavigationMesh] resource." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "Clears the navigation mesh." +msgid "" +"Removes all polygons and vertices from the provided [code]nav_mesh[/code] " +"resource." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -35827,7 +35946,10 @@ msgid "" "thread is useful because navigation baking is not a cheap operation. When it " "is completed, it automatically sets the new [NavigationMesh]. Please note " "that baking on separate thread may be very slow if geometry is parsed from " -"meshes as async access to each mesh involves heavy synchronization." +"meshes as async access to each mesh involves heavy synchronization. Also, " +"please note that baking on a separate thread is automatically disabled on " +"operating systems that cannot use threads (such as HTML5 with threads " +"disabled)." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -35873,6 +35995,10 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle.xml +msgid "Returns the [RID] of this obstacle on the [NavigationServer]." +msgstr "" + +#: doc/classes/NavigationObstacle.xml msgid "" "Sets the [Navigation] node used by the obstacle. Useful when you don't want " "to make the obstacle a child of a [Navigation] node." @@ -35909,6 +36035,10 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle2D.xml +msgid "Returns the [RID] of this obstacle on the [Navigation2DServer]." +msgstr "" + +#: doc/classes/NavigationObstacle2D.xml msgid "" "Sets the [Navigation2D] node used by the obstacle. Useful when you don't " "want to make the obstacle a child of a [Navigation2D] node." @@ -37093,7 +37223,7 @@ msgstr "" #: doc/classes/Node.xml msgid "" "Returns [code]true[/code] if the physics interpolated flag is set for this " -"Node (see [method set_physics_interpolated]).\n" +"Node (see [member physics_interpolation_mode]).\n" "[b]Note:[/b] Interpolation will only be active is both the flag is set " "[b]and[/b] physics interpolation is enabled within the [SceneTree]. This can " "be tested using [method is_physics_interpolated_and_enabled]." @@ -37101,8 +37231,8 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Returns [code]true[/code] if physics interpolation is enabled (see [method " -"set_physics_interpolated]) [b]and[/b] enabled in the [SceneTree].\n" +"Returns [code]true[/code] if physics interpolation is enabled (see [member " +"physics_interpolation_mode]) [b]and[/b] enabled in the [SceneTree].\n" "This is a convenience version of [method is_physics_interpolated] that also " "checks whether physics interpolation is enabled globally.\n" "See [member SceneTree.physics_interpolation] and [member ProjectSettings." @@ -37396,14 +37526,6 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Enables or disables physics interpolation per node, offering a finer grain " -"of control than turning physics interpolation on and off globally.\n" -"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " -"interpolation can sometimes give superior results." -msgstr "" - -#: doc/classes/Node.xml -msgid "" "Enables or disables physics (i.e. fixed framerate) processing. When a node " "is being processed, it will receive a [constant " "NOTIFICATION_PHYSICS_PROCESS] at a fixed (usually 60 FPS, see [member Engine." @@ -37536,6 +37658,15 @@ msgstr "" #: doc/classes/Node.xml msgid "" +"Allows enabling or disabling physics interpolation per node, offering a " +"finer grain of control than turning physics interpolation on and off " +"globally.\n" +"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " +"interpolation can sometimes give superior results." +msgstr "" + +#: doc/classes/Node.xml +msgid "" "The node's priority in the execution order of the enabled processing " "callbacks (i.e. [constant NOTIFICATION_PROCESS], [constant " "NOTIFICATION_PHYSICS_PROCESS] and their internal counterparts). Nodes whose " @@ -37697,6 +37828,24 @@ msgid "Continue to process regardless of the [SceneTree] pause state." msgstr "" #: doc/classes/Node.xml +msgid "" +"Inherits physics interpolation mode from the node's parent. For the root " +"node, it is equivalent to [constant PHYSICS_INTERPOLATION_MODE_ON]. Default." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn off physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn on physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml msgid "Duplicate the node's signals." msgstr "" @@ -38937,7 +39086,7 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" -"Returns the ID of the selected item, or [code]0[/code] if no item is " +"Returns the ID of the selected item, or [code]-1[/code] if no item is " "selected." msgstr "" @@ -38959,7 +39108,8 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" "Selects an item by index and makes it the current item. This will work even " -"if the item is disabled." +"if the item is disabled.\n" +"Passing [code]-1[/code] as the index deselects any currently selected item." msgstr "" #: doc/classes/OptionButton.xml @@ -44286,6 +44436,15 @@ msgid "" "should always be preferred." msgstr "" +#: doc/classes/PoolByteArray.xml doc/classes/PoolColorArray.xml +#: doc/classes/PoolIntArray.xml doc/classes/PoolRealArray.xml +#: doc/classes/PoolStringArray.xml doc/classes/PoolVector2Array.xml +#: doc/classes/PoolVector3Array.xml +msgid "" +"Returns [code]true[/code] if the array contains the given value.\n" +"[b]Note:[/b] This is equivalent to using the [code]in[/code] operator." +msgstr "" + #: doc/classes/PoolByteArray.xml msgid "" "Returns a hexadecimal representation of this array as a [String].\n" @@ -45079,6 +45238,10 @@ msgid "[Font] used for the menu items." msgstr "" #: doc/classes/PopupMenu.xml +msgid "[Font] used for the labeled separator." +msgstr "" + +#: doc/classes/PopupMenu.xml msgid "[Texture] icon for the checked checkbox items." msgstr "" @@ -48524,19 +48687,6 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used easing from [enum Tween.EaseType]. If not set, the " -"default easing is used from the [Tween] that contains this Tweener." -msgstr "" - -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used transition from [enum Tween.TransitionType]. If not " -"set, the default transition is used from the [Tween] that contains this " -"Tweener." -msgstr "" - #: doc/classes/ProximityGroup.xml msgid "General-purpose 3D proximity detection node." msgstr "" @@ -53366,8 +53516,15 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape touches another. If there are " -"no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape touches another.\n" +"If there are no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the shape to check collisions with " "([code]with_shape[/code]), and the transformation matrix of that shape " @@ -53388,8 +53545,16 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape would touch another, if a " -"given movement was applied. If there are no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape would touch another, " +"if a given movement was applied.\n" +"If there would be no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the movement to test on this shape " "([code]local_motion[/code]), the shape to check collisions with " diff --git a/doc/translations/ne.po b/doc/translations/ne.po index a40402dd10..9335bf559b 100644 --- a/doc/translations/ne.po +++ b/doc/translations/ne.po @@ -932,11 +932,12 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Random range, any floating point value between [code]from[/code] and " -"[code]to[/code].\n" +"Returns a random floating point value between [code]from[/code] and " +"[code]to[/code] (both endpoints inclusive).\n" "[codeblock]\n" "prints(rand_range(0, 1), rand_range(0, 1)) # Prints e.g. 0.135591 0.405263\n" -"[/codeblock]" +"[/codeblock]\n" +"[b]Note:[/b] This is equivalent to [code]randf() * (to - from) + from[/code]." msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml @@ -980,37 +981,36 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Returns an array with the given range. Range can be 1 argument [code]N[/" -"code] (0 to [code]N[/code] - 1), two arguments ([code]initial[/code], " -"[code]final - 1[/code]) or three arguments ([code]initial[/code], " -"[code]final - 1[/code], [code]increment[/code]). Returns an empty array if " -"the range isn't valid (e.g. [code]range(2, 5, -1)[/code] or [code]range(5, " -"5, 1)[/code]).\n" -"Returns an array with the given range. [code]range()[/code] can have 1 " -"argument N ([code]0[/code] to [code]N - 1[/code]), two arguments " -"([code]initial[/code], [code]final - 1[/code]) or three arguments " -"([code]initial[/code], [code]final - 1[/code], [code]increment[/code]). " -"[code]increment[/code] can be negative. If [code]increment[/code] is " -"negative, [code]final - 1[/code] will become [code]final + 1[/code]. Also, " -"the initial value must be greater than the final value for the loop to run.\n" -"[codeblock]\n" -"print(range(4))\n" -"print(range(2, 5))\n" -"print(range(0, 6, 2))\n" -"[/codeblock]\n" -"Output:\n" +"Returns an array with the given range. [method range] can be called in three " +"ways:\n" +"[code]range(n: int)[/code]: Starts from 0, increases by steps of 1, and " +"stops [i]before[/i] [code]n[/code]. The argument [code]n[/code] is " +"[b]exclusive[/b].\n" +"[code]range(b: int, n: int)[/code]: Starts from [code]b[/code], increases by " +"steps of 1, and stops [i]before[/i] [code]n[/code]. The arguments [code]b[/" +"code] and [code]n[/code] are [b]inclusive[/b] and [b]exclusive[/b], " +"respectively.\n" +"[code]range(b: int, n: int, s: int)[/code]: Starts from [code]b[/code], " +"increases/decreases by steps of [code]s[/code], and stops [i]before[/i] " +"[code]n[/code]. The arguments [code]b[/code] and [code]n[/code] are " +"[b]inclusive[/b] and [b]exclusive[/b], respectively. The argument [code]s[/" +"code] [b]can[/b] be negative, but not [code]0[/code]. If [code]s[/code] is " +"[code]0[/code], an error message is printed.\n" +"[method range] converts all arguments to [int] before processing.\n" +"[b]Note:[/b] Returns an empty array if no value meets the value constraint " +"(e.g. [code]range(2, 5, -1)[/code] or [code]range(5, 5, 1)[/code]).\n" +"Examples:\n" "[codeblock]\n" -"[0, 1, 2, 3]\n" -"[2, 3, 4]\n" -"[0, 2, 4]\n" +"print(range(4)) # Prints [0, 1, 2, 3]\n" +"print(range(2, 5)) # Prints [2, 3, 4]\n" +"print(range(0, 6, 2)) # Prints [0, 2, 4]\n" +"print(range(4, 1, -1)) # Prints [4, 3, 2]\n" "[/codeblock]\n" "To iterate over an [Array] backwards, use:\n" "[codeblock]\n" "var array = [3, 6, 9]\n" -"var i := array.size() - 1\n" -"while i >= 0:\n" -" print(array[i])\n" -" i -= 1\n" +"for i in range(array.size(), 0, -1):\n" +" print(array[i - 1])\n" "[/codeblock]\n" "Output:\n" "[codeblock]\n" @@ -4105,17 +4105,24 @@ msgid "Maximum value for the mode enum." msgstr "" #: doc/classes/AnimatedSprite.xml -msgid "Sprite node that can use multiple textures for animation." +msgid "" +"Sprite node that contains multiple textures as frames to play for animation." msgstr "" #: doc/classes/AnimatedSprite.xml msgid "" -"Animations are created using a [SpriteFrames] resource, which can be " -"configured in the editor via the SpriteFrames panel.\n" -"[b]Note:[/b] You can associate a set of normal maps by creating additional " -"[SpriteFrames] resources with a [code]_normal[/code] suffix. For example, " -"having 2 [SpriteFrames] resources [code]run[/code] and [code]run_normal[/" -"code] will make it so the [code]run[/code] animation uses the normal map." +"[AnimatedSprite] is similar to the [Sprite] node, except it carries multiple " +"textures as animation frames. Animations are created using a [SpriteFrames] " +"resource, which allows you to import image files (or a folder containing " +"said files) to provide the animation frames for the sprite. The " +"[SpriteFrames] resource can be configured in the editor via the SpriteFrames " +"bottom panel.\n" +"[b]Note:[/b] You can associate a set of normal or specular maps by creating " +"additional [SpriteFrames] resources with a [code]_normal[/code] or " +"[code]_specular[/code] suffix. For example, having 3 [SpriteFrames] " +"resources [code]run[/code], [code]run_normal[/code], and [code]run_specular[/" +"code] will make it so the [code]run[/code] animation uses normal and " +"specular maps." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml @@ -4143,9 +4150,9 @@ msgstr "" msgid "Stops the current animation (does not reset the frame counter)." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml +#: doc/classes/AnimatedSprite.xml msgid "" -"The current animation from the [code]frames[/code] resource. If this value " +"The current animation from the [member frames] resource. If this value " "changes, the [code]frame[/code] counter is reset." msgstr "" @@ -4169,8 +4176,11 @@ msgstr "" msgid "The displayed animation frame's index." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml -msgid "The [SpriteFrames] resource containing the animation(s)." +#: doc/classes/AnimatedSprite.xml +msgid "" +"The [SpriteFrames] resource containing the animation(s). Allows you the " +"option to load, edit, clear, make unique and save the states of the " +"[SpriteFrames] resource." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/Sprite.xml @@ -4222,6 +4232,16 @@ msgid "" "provided, the current animation is played." msgstr "" +#: doc/classes/AnimatedSprite3D.xml +msgid "" +"The current animation from the [code]frames[/code] resource. If this value " +"changes, the [code]frame[/code] counter is reset." +msgstr "" + +#: doc/classes/AnimatedSprite3D.xml +msgid "The [SpriteFrames] resource containing the animation(s)." +msgstr "" + #: doc/classes/AnimatedTexture.xml msgid "Proxy texture for simple frame-based animations." msgstr "" @@ -4737,11 +4757,11 @@ msgstr "" msgid "No interpolation (nearest value)." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Linear interpolation." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Cubic interpolation." msgstr "" @@ -5776,7 +5796,10 @@ msgid "" "Seeks the animation to the [code]seconds[/code] point in time (in seconds). " "If [code]update[/code] is [code]true[/code], the animation updates too, " "otherwise it updates at process time. Events between the current frame and " -"[code]seconds[/code] are skipped." +"[code]seconds[/code] are skipped.\n" +"[b]Note:[/b] Seeking to the end of the animation doesn't emit [signal " +"animation_finished]. If you want to skip animation and emit the signal, use " +"[method advance]." msgstr "" #: doc/classes/AnimationPlayer.xml @@ -6966,7 +6989,10 @@ msgid "" "[code]0[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "Returns the number of times an element is in the array." msgstr "" @@ -7011,10 +7037,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array for a value and returns its index or [code]-1[/code] if " -"not found. Optionally, the initial search index can be passed." +"not found. Optionally, the initial search index can be passed. Returns " +"[code]-1[/code] if [code]from[/code] is out of bounds." msgstr "" #: doc/classes/Array.xml @@ -7152,11 +7182,15 @@ msgid "" "[code]null[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array in reverse order. Optionally, a start search index can be " "passed. If negative, the start index is considered relative to the end of " -"the array." +"the array. If the adjusted start index is out of bounds, this method " +"searches from the end of the array." msgstr "" #: doc/classes/Array.xml @@ -8291,7 +8325,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -8513,7 +8547,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -11624,17 +11658,17 @@ msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a normal vector in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a 3D position in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml @@ -13883,7 +13917,9 @@ msgstr "" #: doc/classes/CollisionPolygon2D.xml msgid "" "If [code]true[/code], only edges that face up, relative to " -"[CollisionPolygon2D]'s rotation, will collide with other objects." +"[CollisionPolygon2D]'s rotation, will collide with other objects.\n" +"[b]Note:[/b] This property has no effect if this [CollisionPolygon2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionPolygon2D.xml @@ -13979,7 +14015,9 @@ msgstr "" #: doc/classes/CollisionShape2D.xml msgid "" "Sets whether this collision shape should only detect collision on one side " -"(top or bottom)." +"(top or bottom).\n" +"[b]Note:[/b] This property has no effect if this [CollisionShape2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionShape2D.xml @@ -22385,6 +22423,10 @@ msgid "" "same behavior." msgstr "" +#: doc/classes/EditorSpinSlider.xml +msgid "If [code]true[/code], the slider is hidden." +msgstr "" + #: doc/classes/EditorVCSInterface.xml msgid "" "Version Control System (VCS) interface, which reads and writes to the local " @@ -25966,9 +26008,22 @@ msgid "Gradient's colors returned as a [PoolColorArray]." msgstr "" #: doc/classes/Gradient.xml +msgid "" +"Defines how the colors between points of the gradient are interpolated. See " +"[enum InterpolationMode] for available modes." +msgstr "" + +#: doc/classes/Gradient.xml msgid "Gradient's offsets returned as a [PoolRealArray]." msgstr "" +#: doc/classes/Gradient.xml +msgid "" +"Constant interpolation, color changes abruptly at each point and stays " +"uniform between. This might cause visible aliasing when used for a gradient " +"texture in some cases." +msgstr "" + #: doc/classes/GradientTexture.xml msgid "Gradient-filled texture." msgstr "" @@ -34490,13 +34545,13 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used easing from [enum Tween.EaseType]. If not set, the " "default easing is used from the [SceneTreeTween] that contains this Tweener." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used transition from [enum Tween.TransitionType]. If not " "set, the default transition is used from the [SceneTreeTween] that contains " @@ -35202,6 +35257,12 @@ msgid "Creates the agent." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]agent[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" @@ -35265,6 +35326,12 @@ msgid "Create a new map." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation agents [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns the map cell size." msgstr "" @@ -35291,6 +35358,12 @@ msgid "Returns the navigation path to reach the destination from the origin." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation regions [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns [code]true[/code] if the map is active." msgstr "" @@ -35312,6 +35385,12 @@ msgid "Creates a new region." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]region[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the map for the region." msgstr "" @@ -35784,17 +35863,57 @@ msgid "Represents the size of the [enum SourceGeometryMode] enum." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "This class is responsible for creating and clearing navigation meshes." +msgid "Helper class for creating and clearing navigation meshes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml msgid "" -"Bakes the navigation mesh. This will allow you to use pathfinding with the " -"navigation system." +"This class is responsible for creating and clearing 3D navigation meshes " +"used as [NavigationMesh] resources inside [NavigationMeshInstance]. The " +"[NavigationMeshGenerator] has very limited to no use for 2D as the " +"navigation mesh baking process expects 3D node types and 3D source geometry " +"to parse.\n" +"The entire navigation mesh baking is best done in a separate thread as the " +"voxelization, collision tests and mesh optimization steps involved are very " +"performance and time hungry operations.\n" +"Navigation mesh baking happens in multiple steps and the result depends on " +"3D source geometry and properties of the [NavigationMesh] resource. In the " +"first step, starting from a root node and depending on [NavigationMesh] " +"properties all valid 3D source geometry nodes are collected from the " +"[SceneTree]. Second, all collected nodes are parsed for their relevant 3D " +"geometry data and a combined 3D mesh is build. Due to the many different " +"types of parsable objects, from normal [MeshInstance]s to [CSGShape]s or " +"various [CollisionObject]s, some operations to collect geometry data can " +"trigger [VisualServer] and [PhysicsServer] synchronizations. Server " +"synchronization can have a negative effect on baking time or framerate as it " +"often involves [Mutex] locking for thread security. Many parsable objects " +"and the continuous synchronization with other threaded Servers can increase " +"the baking time significantly. On the other hand only a few but very large " +"and complex objects will take some time to prepare for the Servers which can " +"noticeably stall the next frame render. As a general rule the total amount " +"of parsable objects and their individual size and complexity should be " +"balanced to avoid framerate issues or very long baking times. The combined " +"mesh is then passed to the Recast Navigation Object to test the source " +"geometry for walkable terrain suitable to [NavigationMesh] agent properties " +"by creating a voxel world around the meshes bounding area.\n" +"The finalized navigation mesh is then returned and stored inside the " +"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes." +msgstr "" + +#: doc/classes/NavigationMeshGenerator.xml +msgid "" +"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " +"nodes under the provided [code]root_node[/code] or a specific group of nodes " +"for potential source geometry. The parse behavior can be controlled with the " +"[member NavigationMesh.geometry/parsed_geometry_type] and [member " +"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[NavigationMesh] resource." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "Clears the navigation mesh." +msgid "" +"Removes all polygons and vertices from the provided [code]nav_mesh[/code] " +"resource." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -35815,7 +35934,10 @@ msgid "" "thread is useful because navigation baking is not a cheap operation. When it " "is completed, it automatically sets the new [NavigationMesh]. Please note " "that baking on separate thread may be very slow if geometry is parsed from " -"meshes as async access to each mesh involves heavy synchronization." +"meshes as async access to each mesh involves heavy synchronization. Also, " +"please note that baking on a separate thread is automatically disabled on " +"operating systems that cannot use threads (such as HTML5 with threads " +"disabled)." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -35861,6 +35983,10 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle.xml +msgid "Returns the [RID] of this obstacle on the [NavigationServer]." +msgstr "" + +#: doc/classes/NavigationObstacle.xml msgid "" "Sets the [Navigation] node used by the obstacle. Useful when you don't want " "to make the obstacle a child of a [Navigation] node." @@ -35897,6 +36023,10 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle2D.xml +msgid "Returns the [RID] of this obstacle on the [Navigation2DServer]." +msgstr "" + +#: doc/classes/NavigationObstacle2D.xml msgid "" "Sets the [Navigation2D] node used by the obstacle. Useful when you don't " "want to make the obstacle a child of a [Navigation2D] node." @@ -37081,7 +37211,7 @@ msgstr "" #: doc/classes/Node.xml msgid "" "Returns [code]true[/code] if the physics interpolated flag is set for this " -"Node (see [method set_physics_interpolated]).\n" +"Node (see [member physics_interpolation_mode]).\n" "[b]Note:[/b] Interpolation will only be active is both the flag is set " "[b]and[/b] physics interpolation is enabled within the [SceneTree]. This can " "be tested using [method is_physics_interpolated_and_enabled]." @@ -37089,8 +37219,8 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Returns [code]true[/code] if physics interpolation is enabled (see [method " -"set_physics_interpolated]) [b]and[/b] enabled in the [SceneTree].\n" +"Returns [code]true[/code] if physics interpolation is enabled (see [member " +"physics_interpolation_mode]) [b]and[/b] enabled in the [SceneTree].\n" "This is a convenience version of [method is_physics_interpolated] that also " "checks whether physics interpolation is enabled globally.\n" "See [member SceneTree.physics_interpolation] and [member ProjectSettings." @@ -37384,14 +37514,6 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Enables or disables physics interpolation per node, offering a finer grain " -"of control than turning physics interpolation on and off globally.\n" -"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " -"interpolation can sometimes give superior results." -msgstr "" - -#: doc/classes/Node.xml -msgid "" "Enables or disables physics (i.e. fixed framerate) processing. When a node " "is being processed, it will receive a [constant " "NOTIFICATION_PHYSICS_PROCESS] at a fixed (usually 60 FPS, see [member Engine." @@ -37524,6 +37646,15 @@ msgstr "" #: doc/classes/Node.xml msgid "" +"Allows enabling or disabling physics interpolation per node, offering a " +"finer grain of control than turning physics interpolation on and off " +"globally.\n" +"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " +"interpolation can sometimes give superior results." +msgstr "" + +#: doc/classes/Node.xml +msgid "" "The node's priority in the execution order of the enabled processing " "callbacks (i.e. [constant NOTIFICATION_PROCESS], [constant " "NOTIFICATION_PHYSICS_PROCESS] and their internal counterparts). Nodes whose " @@ -37685,6 +37816,24 @@ msgid "Continue to process regardless of the [SceneTree] pause state." msgstr "" #: doc/classes/Node.xml +msgid "" +"Inherits physics interpolation mode from the node's parent. For the root " +"node, it is equivalent to [constant PHYSICS_INTERPOLATION_MODE_ON]. Default." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn off physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn on physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml msgid "Duplicate the node's signals." msgstr "" @@ -38925,7 +39074,7 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" -"Returns the ID of the selected item, or [code]0[/code] if no item is " +"Returns the ID of the selected item, or [code]-1[/code] if no item is " "selected." msgstr "" @@ -38947,7 +39096,8 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" "Selects an item by index and makes it the current item. This will work even " -"if the item is disabled." +"if the item is disabled.\n" +"Passing [code]-1[/code] as the index deselects any currently selected item." msgstr "" #: doc/classes/OptionButton.xml @@ -44274,6 +44424,15 @@ msgid "" "should always be preferred." msgstr "" +#: doc/classes/PoolByteArray.xml doc/classes/PoolColorArray.xml +#: doc/classes/PoolIntArray.xml doc/classes/PoolRealArray.xml +#: doc/classes/PoolStringArray.xml doc/classes/PoolVector2Array.xml +#: doc/classes/PoolVector3Array.xml +msgid "" +"Returns [code]true[/code] if the array contains the given value.\n" +"[b]Note:[/b] This is equivalent to using the [code]in[/code] operator." +msgstr "" + #: doc/classes/PoolByteArray.xml msgid "" "Returns a hexadecimal representation of this array as a [String].\n" @@ -45067,6 +45226,10 @@ msgid "[Font] used for the menu items." msgstr "" #: doc/classes/PopupMenu.xml +msgid "[Font] used for the labeled separator." +msgstr "" + +#: doc/classes/PopupMenu.xml msgid "[Texture] icon for the checked checkbox items." msgstr "" @@ -48512,19 +48675,6 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used easing from [enum Tween.EaseType]. If not set, the " -"default easing is used from the [Tween] that contains this Tweener." -msgstr "" - -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used transition from [enum Tween.TransitionType]. If not " -"set, the default transition is used from the [Tween] that contains this " -"Tweener." -msgstr "" - #: doc/classes/ProximityGroup.xml msgid "General-purpose 3D proximity detection node." msgstr "" @@ -53354,8 +53504,15 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape touches another. If there are " -"no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape touches another.\n" +"If there are no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the shape to check collisions with " "([code]with_shape[/code]), and the transformation matrix of that shape " @@ -53376,8 +53533,16 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape would touch another, if a " -"given movement was applied. If there are no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape would touch another, " +"if a given movement was applied.\n" +"If there would be no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the movement to test on this shape " "([code]local_motion[/code]), the shape to check collisions with " diff --git a/doc/translations/nl.po b/doc/translations/nl.po index 943cbddb4c..15e800dda5 100644 --- a/doc/translations/nl.po +++ b/doc/translations/nl.po @@ -993,11 +993,12 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Random range, any floating point value between [code]from[/code] and " -"[code]to[/code].\n" +"Returns a random floating point value between [code]from[/code] and " +"[code]to[/code] (both endpoints inclusive).\n" "[codeblock]\n" "prints(rand_range(0, 1), rand_range(0, 1)) # Prints e.g. 0.135591 0.405263\n" -"[/codeblock]" +"[/codeblock]\n" +"[b]Note:[/b] This is equivalent to [code]randf() * (to - from) + from[/code]." msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml @@ -1041,37 +1042,36 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Returns an array with the given range. Range can be 1 argument [code]N[/" -"code] (0 to [code]N[/code] - 1), two arguments ([code]initial[/code], " -"[code]final - 1[/code]) or three arguments ([code]initial[/code], " -"[code]final - 1[/code], [code]increment[/code]). Returns an empty array if " -"the range isn't valid (e.g. [code]range(2, 5, -1)[/code] or [code]range(5, " -"5, 1)[/code]).\n" -"Returns an array with the given range. [code]range()[/code] can have 1 " -"argument N ([code]0[/code] to [code]N - 1[/code]), two arguments " -"([code]initial[/code], [code]final - 1[/code]) or three arguments " -"([code]initial[/code], [code]final - 1[/code], [code]increment[/code]). " -"[code]increment[/code] can be negative. If [code]increment[/code] is " -"negative, [code]final - 1[/code] will become [code]final + 1[/code]. Also, " -"the initial value must be greater than the final value for the loop to run.\n" -"[codeblock]\n" -"print(range(4))\n" -"print(range(2, 5))\n" -"print(range(0, 6, 2))\n" -"[/codeblock]\n" -"Output:\n" +"Returns an array with the given range. [method range] can be called in three " +"ways:\n" +"[code]range(n: int)[/code]: Starts from 0, increases by steps of 1, and " +"stops [i]before[/i] [code]n[/code]. The argument [code]n[/code] is " +"[b]exclusive[/b].\n" +"[code]range(b: int, n: int)[/code]: Starts from [code]b[/code], increases by " +"steps of 1, and stops [i]before[/i] [code]n[/code]. The arguments [code]b[/" +"code] and [code]n[/code] are [b]inclusive[/b] and [b]exclusive[/b], " +"respectively.\n" +"[code]range(b: int, n: int, s: int)[/code]: Starts from [code]b[/code], " +"increases/decreases by steps of [code]s[/code], and stops [i]before[/i] " +"[code]n[/code]. The arguments [code]b[/code] and [code]n[/code] are " +"[b]inclusive[/b] and [b]exclusive[/b], respectively. The argument [code]s[/" +"code] [b]can[/b] be negative, but not [code]0[/code]. If [code]s[/code] is " +"[code]0[/code], an error message is printed.\n" +"[method range] converts all arguments to [int] before processing.\n" +"[b]Note:[/b] Returns an empty array if no value meets the value constraint " +"(e.g. [code]range(2, 5, -1)[/code] or [code]range(5, 5, 1)[/code]).\n" +"Examples:\n" "[codeblock]\n" -"[0, 1, 2, 3]\n" -"[2, 3, 4]\n" -"[0, 2, 4]\n" +"print(range(4)) # Prints [0, 1, 2, 3]\n" +"print(range(2, 5)) # Prints [2, 3, 4]\n" +"print(range(0, 6, 2)) # Prints [0, 2, 4]\n" +"print(range(4, 1, -1)) # Prints [4, 3, 2]\n" "[/codeblock]\n" "To iterate over an [Array] backwards, use:\n" "[codeblock]\n" "var array = [3, 6, 9]\n" -"var i := array.size() - 1\n" -"while i >= 0:\n" -" print(array[i])\n" -" i -= 1\n" +"for i in range(array.size(), 0, -1):\n" +" print(array[i - 1])\n" "[/codeblock]\n" "Output:\n" "[codeblock]\n" @@ -4174,17 +4174,24 @@ msgid "Maximum value for the mode enum." msgstr "" #: doc/classes/AnimatedSprite.xml -msgid "Sprite node that can use multiple textures for animation." +msgid "" +"Sprite node that contains multiple textures as frames to play for animation." msgstr "" #: doc/classes/AnimatedSprite.xml msgid "" -"Animations are created using a [SpriteFrames] resource, which can be " -"configured in the editor via the SpriteFrames panel.\n" -"[b]Note:[/b] You can associate a set of normal maps by creating additional " -"[SpriteFrames] resources with a [code]_normal[/code] suffix. For example, " -"having 2 [SpriteFrames] resources [code]run[/code] and [code]run_normal[/" -"code] will make it so the [code]run[/code] animation uses the normal map." +"[AnimatedSprite] is similar to the [Sprite] node, except it carries multiple " +"textures as animation frames. Animations are created using a [SpriteFrames] " +"resource, which allows you to import image files (or a folder containing " +"said files) to provide the animation frames for the sprite. The " +"[SpriteFrames] resource can be configured in the editor via the SpriteFrames " +"bottom panel.\n" +"[b]Note:[/b] You can associate a set of normal or specular maps by creating " +"additional [SpriteFrames] resources with a [code]_normal[/code] or " +"[code]_specular[/code] suffix. For example, having 3 [SpriteFrames] " +"resources [code]run[/code], [code]run_normal[/code], and [code]run_specular[/" +"code] will make it so the [code]run[/code] animation uses normal and " +"specular maps." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml @@ -4212,9 +4219,9 @@ msgstr "" msgid "Stops the current animation (does not reset the frame counter)." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml +#: doc/classes/AnimatedSprite.xml msgid "" -"The current animation from the [code]frames[/code] resource. If this value " +"The current animation from the [member frames] resource. If this value " "changes, the [code]frame[/code] counter is reset." msgstr "" @@ -4238,8 +4245,11 @@ msgstr "" msgid "The displayed animation frame's index." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml -msgid "The [SpriteFrames] resource containing the animation(s)." +#: doc/classes/AnimatedSprite.xml +msgid "" +"The [SpriteFrames] resource containing the animation(s). Allows you the " +"option to load, edit, clear, make unique and save the states of the " +"[SpriteFrames] resource." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/Sprite.xml @@ -4291,6 +4301,16 @@ msgid "" "provided, the current animation is played." msgstr "" +#: doc/classes/AnimatedSprite3D.xml +msgid "" +"The current animation from the [code]frames[/code] resource. If this value " +"changes, the [code]frame[/code] counter is reset." +msgstr "" + +#: doc/classes/AnimatedSprite3D.xml +msgid "The [SpriteFrames] resource containing the animation(s)." +msgstr "" + #: doc/classes/AnimatedTexture.xml msgid "Proxy texture for simple frame-based animations." msgstr "" @@ -4806,11 +4826,11 @@ msgstr "" msgid "No interpolation (nearest value)." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Linear interpolation." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Cubic interpolation." msgstr "" @@ -5845,7 +5865,10 @@ msgid "" "Seeks the animation to the [code]seconds[/code] point in time (in seconds). " "If [code]update[/code] is [code]true[/code], the animation updates too, " "otherwise it updates at process time. Events between the current frame and " -"[code]seconds[/code] are skipped." +"[code]seconds[/code] are skipped.\n" +"[b]Note:[/b] Seeking to the end of the animation doesn't emit [signal " +"animation_finished]. If you want to skip animation and emit the signal, use " +"[method advance]." msgstr "" #: doc/classes/AnimationPlayer.xml @@ -7035,7 +7058,10 @@ msgid "" "[code]0[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "Returns the number of times an element is in the array." msgstr "" @@ -7080,10 +7106,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array for a value and returns its index or [code]-1[/code] if " -"not found. Optionally, the initial search index can be passed." +"not found. Optionally, the initial search index can be passed. Returns " +"[code]-1[/code] if [code]from[/code] is out of bounds." msgstr "" #: doc/classes/Array.xml @@ -7221,11 +7251,15 @@ msgid "" "[code]null[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array in reverse order. Optionally, a start search index can be " "passed. If negative, the start index is considered relative to the end of " -"the array." +"the array. If the adjusted start index is out of bounds, this method " +"searches from the end of the array." msgstr "" #: doc/classes/Array.xml @@ -8360,7 +8394,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -8582,7 +8616,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -11693,17 +11727,17 @@ msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a normal vector in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a 3D position in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml @@ -13952,7 +13986,9 @@ msgstr "" #: doc/classes/CollisionPolygon2D.xml msgid "" "If [code]true[/code], only edges that face up, relative to " -"[CollisionPolygon2D]'s rotation, will collide with other objects." +"[CollisionPolygon2D]'s rotation, will collide with other objects.\n" +"[b]Note:[/b] This property has no effect if this [CollisionPolygon2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionPolygon2D.xml @@ -14048,7 +14084,9 @@ msgstr "" #: doc/classes/CollisionShape2D.xml msgid "" "Sets whether this collision shape should only detect collision on one side " -"(top or bottom)." +"(top or bottom).\n" +"[b]Note:[/b] This property has no effect if this [CollisionShape2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionShape2D.xml @@ -22454,6 +22492,10 @@ msgid "" "same behavior." msgstr "" +#: doc/classes/EditorSpinSlider.xml +msgid "If [code]true[/code], the slider is hidden." +msgstr "" + #: doc/classes/EditorVCSInterface.xml msgid "" "Version Control System (VCS) interface, which reads and writes to the local " @@ -26038,9 +26080,22 @@ msgid "Gradient's colors returned as a [PoolColorArray]." msgstr "" #: doc/classes/Gradient.xml +msgid "" +"Defines how the colors between points of the gradient are interpolated. See " +"[enum InterpolationMode] for available modes." +msgstr "" + +#: doc/classes/Gradient.xml msgid "Gradient's offsets returned as a [PoolRealArray]." msgstr "" +#: doc/classes/Gradient.xml +msgid "" +"Constant interpolation, color changes abruptly at each point and stays " +"uniform between. This might cause visible aliasing when used for a gradient " +"texture in some cases." +msgstr "" + #: doc/classes/GradientTexture.xml msgid "Gradient-filled texture." msgstr "" @@ -34562,13 +34617,13 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used easing from [enum Tween.EaseType]. If not set, the " "default easing is used from the [SceneTreeTween] that contains this Tweener." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used transition from [enum Tween.TransitionType]. If not " "set, the default transition is used from the [SceneTreeTween] that contains " @@ -35274,6 +35329,12 @@ msgid "Creates the agent." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]agent[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" @@ -35337,6 +35398,12 @@ msgid "Create a new map." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation agents [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns the map cell size." msgstr "" @@ -35363,6 +35430,12 @@ msgid "Returns the navigation path to reach the destination from the origin." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation regions [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns [code]true[/code] if the map is active." msgstr "" @@ -35384,6 +35457,12 @@ msgid "Creates a new region." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]region[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the map for the region." msgstr "" @@ -35856,17 +35935,57 @@ msgid "Represents the size of the [enum SourceGeometryMode] enum." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "This class is responsible for creating and clearing navigation meshes." +msgid "Helper class for creating and clearing navigation meshes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml msgid "" -"Bakes the navigation mesh. This will allow you to use pathfinding with the " -"navigation system." +"This class is responsible for creating and clearing 3D navigation meshes " +"used as [NavigationMesh] resources inside [NavigationMeshInstance]. The " +"[NavigationMeshGenerator] has very limited to no use for 2D as the " +"navigation mesh baking process expects 3D node types and 3D source geometry " +"to parse.\n" +"The entire navigation mesh baking is best done in a separate thread as the " +"voxelization, collision tests and mesh optimization steps involved are very " +"performance and time hungry operations.\n" +"Navigation mesh baking happens in multiple steps and the result depends on " +"3D source geometry and properties of the [NavigationMesh] resource. In the " +"first step, starting from a root node and depending on [NavigationMesh] " +"properties all valid 3D source geometry nodes are collected from the " +"[SceneTree]. Second, all collected nodes are parsed for their relevant 3D " +"geometry data and a combined 3D mesh is build. Due to the many different " +"types of parsable objects, from normal [MeshInstance]s to [CSGShape]s or " +"various [CollisionObject]s, some operations to collect geometry data can " +"trigger [VisualServer] and [PhysicsServer] synchronizations. Server " +"synchronization can have a negative effect on baking time or framerate as it " +"often involves [Mutex] locking for thread security. Many parsable objects " +"and the continuous synchronization with other threaded Servers can increase " +"the baking time significantly. On the other hand only a few but very large " +"and complex objects will take some time to prepare for the Servers which can " +"noticeably stall the next frame render. As a general rule the total amount " +"of parsable objects and their individual size and complexity should be " +"balanced to avoid framerate issues or very long baking times. The combined " +"mesh is then passed to the Recast Navigation Object to test the source " +"geometry for walkable terrain suitable to [NavigationMesh] agent properties " +"by creating a voxel world around the meshes bounding area.\n" +"The finalized navigation mesh is then returned and stored inside the " +"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes." +msgstr "" + +#: doc/classes/NavigationMeshGenerator.xml +msgid "" +"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " +"nodes under the provided [code]root_node[/code] or a specific group of nodes " +"for potential source geometry. The parse behavior can be controlled with the " +"[member NavigationMesh.geometry/parsed_geometry_type] and [member " +"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[NavigationMesh] resource." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "Clears the navigation mesh." +msgid "" +"Removes all polygons and vertices from the provided [code]nav_mesh[/code] " +"resource." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -35887,7 +36006,10 @@ msgid "" "thread is useful because navigation baking is not a cheap operation. When it " "is completed, it automatically sets the new [NavigationMesh]. Please note " "that baking on separate thread may be very slow if geometry is parsed from " -"meshes as async access to each mesh involves heavy synchronization." +"meshes as async access to each mesh involves heavy synchronization. Also, " +"please note that baking on a separate thread is automatically disabled on " +"operating systems that cannot use threads (such as HTML5 with threads " +"disabled)." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -35933,6 +36055,10 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle.xml +msgid "Returns the [RID] of this obstacle on the [NavigationServer]." +msgstr "" + +#: doc/classes/NavigationObstacle.xml msgid "" "Sets the [Navigation] node used by the obstacle. Useful when you don't want " "to make the obstacle a child of a [Navigation] node." @@ -35969,6 +36095,10 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle2D.xml +msgid "Returns the [RID] of this obstacle on the [Navigation2DServer]." +msgstr "" + +#: doc/classes/NavigationObstacle2D.xml msgid "" "Sets the [Navigation2D] node used by the obstacle. Useful when you don't " "want to make the obstacle a child of a [Navigation2D] node." @@ -37153,7 +37283,7 @@ msgstr "" #: doc/classes/Node.xml msgid "" "Returns [code]true[/code] if the physics interpolated flag is set for this " -"Node (see [method set_physics_interpolated]).\n" +"Node (see [member physics_interpolation_mode]).\n" "[b]Note:[/b] Interpolation will only be active is both the flag is set " "[b]and[/b] physics interpolation is enabled within the [SceneTree]. This can " "be tested using [method is_physics_interpolated_and_enabled]." @@ -37161,8 +37291,8 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Returns [code]true[/code] if physics interpolation is enabled (see [method " -"set_physics_interpolated]) [b]and[/b] enabled in the [SceneTree].\n" +"Returns [code]true[/code] if physics interpolation is enabled (see [member " +"physics_interpolation_mode]) [b]and[/b] enabled in the [SceneTree].\n" "This is a convenience version of [method is_physics_interpolated] that also " "checks whether physics interpolation is enabled globally.\n" "See [member SceneTree.physics_interpolation] and [member ProjectSettings." @@ -37456,14 +37586,6 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Enables or disables physics interpolation per node, offering a finer grain " -"of control than turning physics interpolation on and off globally.\n" -"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " -"interpolation can sometimes give superior results." -msgstr "" - -#: doc/classes/Node.xml -msgid "" "Enables or disables physics (i.e. fixed framerate) processing. When a node " "is being processed, it will receive a [constant " "NOTIFICATION_PHYSICS_PROCESS] at a fixed (usually 60 FPS, see [member Engine." @@ -37596,6 +37718,15 @@ msgstr "" #: doc/classes/Node.xml msgid "" +"Allows enabling or disabling physics interpolation per node, offering a " +"finer grain of control than turning physics interpolation on and off " +"globally.\n" +"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " +"interpolation can sometimes give superior results." +msgstr "" + +#: doc/classes/Node.xml +msgid "" "The node's priority in the execution order of the enabled processing " "callbacks (i.e. [constant NOTIFICATION_PROCESS], [constant " "NOTIFICATION_PHYSICS_PROCESS] and their internal counterparts). Nodes whose " @@ -37757,6 +37888,24 @@ msgid "Continue to process regardless of the [SceneTree] pause state." msgstr "" #: doc/classes/Node.xml +msgid "" +"Inherits physics interpolation mode from the node's parent. For the root " +"node, it is equivalent to [constant PHYSICS_INTERPOLATION_MODE_ON]. Default." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn off physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn on physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml msgid "Duplicate the node's signals." msgstr "" @@ -38997,7 +39146,7 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" -"Returns the ID of the selected item, or [code]0[/code] if no item is " +"Returns the ID of the selected item, or [code]-1[/code] if no item is " "selected." msgstr "" @@ -39019,7 +39168,8 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" "Selects an item by index and makes it the current item. This will work even " -"if the item is disabled." +"if the item is disabled.\n" +"Passing [code]-1[/code] as the index deselects any currently selected item." msgstr "" #: doc/classes/OptionButton.xml @@ -44346,6 +44496,15 @@ msgid "" "should always be preferred." msgstr "" +#: doc/classes/PoolByteArray.xml doc/classes/PoolColorArray.xml +#: doc/classes/PoolIntArray.xml doc/classes/PoolRealArray.xml +#: doc/classes/PoolStringArray.xml doc/classes/PoolVector2Array.xml +#: doc/classes/PoolVector3Array.xml +msgid "" +"Returns [code]true[/code] if the array contains the given value.\n" +"[b]Note:[/b] This is equivalent to using the [code]in[/code] operator." +msgstr "" + #: doc/classes/PoolByteArray.xml msgid "" "Returns a hexadecimal representation of this array as a [String].\n" @@ -45139,6 +45298,10 @@ msgid "[Font] used for the menu items." msgstr "" #: doc/classes/PopupMenu.xml +msgid "[Font] used for the labeled separator." +msgstr "" + +#: doc/classes/PopupMenu.xml msgid "[Texture] icon for the checked checkbox items." msgstr "" @@ -48584,19 +48747,6 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used easing from [enum Tween.EaseType]. If not set, the " -"default easing is used from the [Tween] that contains this Tweener." -msgstr "" - -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used transition from [enum Tween.TransitionType]. If not " -"set, the default transition is used from the [Tween] that contains this " -"Tweener." -msgstr "" - #: doc/classes/ProximityGroup.xml msgid "General-purpose 3D proximity detection node." msgstr "" @@ -53427,8 +53577,15 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape touches another. If there are " -"no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape touches another.\n" +"If there are no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the shape to check collisions with " "([code]with_shape[/code]), and the transformation matrix of that shape " @@ -53449,8 +53606,16 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape would touch another, if a " -"given movement was applied. If there are no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape would touch another, " +"if a given movement was applied.\n" +"If there would be no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the movement to test on this shape " "([code]local_motion[/code]), the shape to check collisions with " diff --git a/doc/translations/pl.po b/doc/translations/pl.po index 64e182ff82..a484bd7e22 100644 --- a/doc/translations/pl.po +++ b/doc/translations/pl.po @@ -22,12 +22,14 @@ # lewando54 <lewando54@gmail.com>, 2022. # Katarzyna Twardowska <katarina.twardowska@gmail.com>, 2022. # Mateusz ZdrzaÅ‚ek <matjozohd@gmail.com>, 2022. +# Pixel Zone - Godot Engine Tutorials <karoltomaszewskimusic@gmail.com>, 2022. msgid "" msgstr "" "Project-Id-Version: Godot Engine class reference\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" -"PO-Revision-Date: 2022-03-21 22:22+0000\n" -"Last-Translator: Mateusz ZdrzaÅ‚ek <matjozohd@gmail.com>\n" +"PO-Revision-Date: 2022-05-15 20:00+0000\n" +"Last-Translator: Pixel Zone - Godot Engine Tutorials " +"<karoltomaszewskimusic@gmail.com>\n" "Language-Team: Polish <https://hosted.weblate.org/projects/godot-engine/" "godot-class-reference/pl/>\n" "Language: pl\n" @@ -36,7 +38,7 @@ msgstr "" "Content-Transfer-Encoding: 8-bit\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.12-dev\n" +"X-Generator: Weblate 4.13-dev\n" #: doc/tools/make_rst.py msgid "Description" @@ -258,7 +260,6 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml -#, fuzzy msgid "" "Asserts that the [code]condition[/code] is [code]true[/code]. If the " "[code]condition[/code] is [code]false[/code], an error is generated. When " @@ -518,6 +519,23 @@ msgid "" "want a true content-aware comparison, you have to use [code]deep_equal[/" "code]." msgstr "" +"Porównuje dwie wartoÅ›ci, sprawdzajÄ…c ich rzeczywistÄ… zawartość, przechodzÄ…c " +"do dowolnej „tablicy†lub „sÅ‚ownika†aż do najgłębszego poziomu.\n" +"Można to porównać do [code]==[/code] na kilka sposobów:\n" +"— Dla [kod]null[/code], [kod]int[/code], [code]float[/code], [code]String[/" +"code], [code]Object[/code] i [code] RID[/code] zarówno [code]deep_equal[/" +"code], jak i [code]==[/code] dziaÅ‚ajÄ… tak samo.\n" +"— W przypadku [code]SÅ‚ownik[/code] [code]==[/code] uwzglÄ™dnia równość wtedy " +"i tylko wtedy, gdy obie zmienne wskazujÄ… ten sam [code]SÅ‚ownik[/code], bez " +"rekurencji lub Å›wiadomoÅ›ci zawartość w ogóle.\n" +"— W przypadku [kod]Tablica[/kod] [kod]==[/kod] uwzglÄ™dnia równość wtedy i " +"tylko wtedy, gdy każdy element w pierwszej [kod]Tablica[/kod] jest równy " +"swojemu odpowiednikowi w drugiej [ kod]Tablica[/kod], jak mówi sam [kod]==[/" +"kod]. Oznacza to, że [code]==[/code] jest rekursywny w [code]Tablicy[/code], " +"ale nie w [code]SÅ‚owniku[/code].\n" +"Krótko mówiÄ…c, za każdym razem, gdy potencjalnie zaangażowany jest " +"[code]SÅ‚ownik[/code], jeÅ›li chcesz prawdziwego porównania uwzglÄ™dniajÄ…cego " +"zawartość, musisz użyć [code]deep_equal[/code]." #: modules/gdscript/doc_classes/@GDScript.xml msgid "" @@ -1379,11 +1397,12 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Random range, any floating point value between [code]from[/code] and " -"[code]to[/code].\n" +"Returns a random floating point value between [code]from[/code] and " +"[code]to[/code] (both endpoints inclusive).\n" "[codeblock]\n" "prints(rand_range(0, 1), rand_range(0, 1)) # Prints e.g. 0.135591 0.405263\n" -"[/codeblock]" +"[/codeblock]\n" +"[b]Note:[/b] This is equivalent to [code]randf() * (to - from) + from[/code]." msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml @@ -1427,37 +1446,36 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Returns an array with the given range. Range can be 1 argument [code]N[/" -"code] (0 to [code]N[/code] - 1), two arguments ([code]initial[/code], " -"[code]final - 1[/code]) or three arguments ([code]initial[/code], " -"[code]final - 1[/code], [code]increment[/code]). Returns an empty array if " -"the range isn't valid (e.g. [code]range(2, 5, -1)[/code] or [code]range(5, " -"5, 1)[/code]).\n" -"Returns an array with the given range. [code]range()[/code] can have 1 " -"argument N ([code]0[/code] to [code]N - 1[/code]), two arguments " -"([code]initial[/code], [code]final - 1[/code]) or three arguments " -"([code]initial[/code], [code]final - 1[/code], [code]increment[/code]). " -"[code]increment[/code] can be negative. If [code]increment[/code] is " -"negative, [code]final - 1[/code] will become [code]final + 1[/code]. Also, " -"the initial value must be greater than the final value for the loop to run.\n" -"[codeblock]\n" -"print(range(4))\n" -"print(range(2, 5))\n" -"print(range(0, 6, 2))\n" -"[/codeblock]\n" -"Output:\n" +"Returns an array with the given range. [method range] can be called in three " +"ways:\n" +"[code]range(n: int)[/code]: Starts from 0, increases by steps of 1, and " +"stops [i]before[/i] [code]n[/code]. The argument [code]n[/code] is " +"[b]exclusive[/b].\n" +"[code]range(b: int, n: int)[/code]: Starts from [code]b[/code], increases by " +"steps of 1, and stops [i]before[/i] [code]n[/code]. The arguments [code]b[/" +"code] and [code]n[/code] are [b]inclusive[/b] and [b]exclusive[/b], " +"respectively.\n" +"[code]range(b: int, n: int, s: int)[/code]: Starts from [code]b[/code], " +"increases/decreases by steps of [code]s[/code], and stops [i]before[/i] " +"[code]n[/code]. The arguments [code]b[/code] and [code]n[/code] are " +"[b]inclusive[/b] and [b]exclusive[/b], respectively. The argument [code]s[/" +"code] [b]can[/b] be negative, but not [code]0[/code]. If [code]s[/code] is " +"[code]0[/code], an error message is printed.\n" +"[method range] converts all arguments to [int] before processing.\n" +"[b]Note:[/b] Returns an empty array if no value meets the value constraint " +"(e.g. [code]range(2, 5, -1)[/code] or [code]range(5, 5, 1)[/code]).\n" +"Examples:\n" "[codeblock]\n" -"[0, 1, 2, 3]\n" -"[2, 3, 4]\n" -"[0, 2, 4]\n" +"print(range(4)) # Prints [0, 1, 2, 3]\n" +"print(range(2, 5)) # Prints [2, 3, 4]\n" +"print(range(0, 6, 2)) # Prints [0, 2, 4]\n" +"print(range(4, 1, -1)) # Prints [4, 3, 2]\n" "[/codeblock]\n" "To iterate over an [Array] backwards, use:\n" "[codeblock]\n" "var array = [3, 6, 9]\n" -"var i := array.size() - 1\n" -"while i >= 0:\n" -" print(array[i])\n" -" i -= 1\n" +"for i in range(array.size(), 0, -1):\n" +" print(array[i - 1])\n" "[/codeblock]\n" "Output:\n" "[codeblock]\n" @@ -4583,17 +4601,24 @@ msgid "Maximum value for the mode enum." msgstr "" #: doc/classes/AnimatedSprite.xml -msgid "Sprite node that can use multiple textures for animation." +msgid "" +"Sprite node that contains multiple textures as frames to play for animation." msgstr "" #: doc/classes/AnimatedSprite.xml msgid "" -"Animations are created using a [SpriteFrames] resource, which can be " -"configured in the editor via the SpriteFrames panel.\n" -"[b]Note:[/b] You can associate a set of normal maps by creating additional " -"[SpriteFrames] resources with a [code]_normal[/code] suffix. For example, " -"having 2 [SpriteFrames] resources [code]run[/code] and [code]run_normal[/" -"code] will make it so the [code]run[/code] animation uses the normal map." +"[AnimatedSprite] is similar to the [Sprite] node, except it carries multiple " +"textures as animation frames. Animations are created using a [SpriteFrames] " +"resource, which allows you to import image files (or a folder containing " +"said files) to provide the animation frames for the sprite. The " +"[SpriteFrames] resource can be configured in the editor via the SpriteFrames " +"bottom panel.\n" +"[b]Note:[/b] You can associate a set of normal or specular maps by creating " +"additional [SpriteFrames] resources with a [code]_normal[/code] or " +"[code]_specular[/code] suffix. For example, having 3 [SpriteFrames] " +"resources [code]run[/code], [code]run_normal[/code], and [code]run_specular[/" +"code] will make it so the [code]run[/code] animation uses normal and " +"specular maps." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml @@ -4621,9 +4646,9 @@ msgstr "" msgid "Stops the current animation (does not reset the frame counter)." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml +#: doc/classes/AnimatedSprite.xml msgid "" -"The current animation from the [code]frames[/code] resource. If this value " +"The current animation from the [member frames] resource. If this value " "changes, the [code]frame[/code] counter is reset." msgstr "" @@ -4647,8 +4672,11 @@ msgstr "" msgid "The displayed animation frame's index." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml -msgid "The [SpriteFrames] resource containing the animation(s)." +#: doc/classes/AnimatedSprite.xml +msgid "" +"The [SpriteFrames] resource containing the animation(s). Allows you the " +"option to load, edit, clear, make unique and save the states of the " +"[SpriteFrames] resource." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/Sprite.xml @@ -4700,6 +4728,16 @@ msgid "" "provided, the current animation is played." msgstr "" +#: doc/classes/AnimatedSprite3D.xml +msgid "" +"The current animation from the [code]frames[/code] resource. If this value " +"changes, the [code]frame[/code] counter is reset." +msgstr "" + +#: doc/classes/AnimatedSprite3D.xml +msgid "The [SpriteFrames] resource containing the animation(s)." +msgstr "" + #: doc/classes/AnimatedTexture.xml msgid "Proxy texture for simple frame-based animations." msgstr "" @@ -5216,11 +5254,11 @@ msgstr "" msgid "No interpolation (nearest value)." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Linear interpolation." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Cubic interpolation." msgstr "" @@ -6257,7 +6295,10 @@ msgid "" "Seeks the animation to the [code]seconds[/code] point in time (in seconds). " "If [code]update[/code] is [code]true[/code], the animation updates too, " "otherwise it updates at process time. Events between the current frame and " -"[code]seconds[/code] are skipped." +"[code]seconds[/code] are skipped.\n" +"[b]Note:[/b] Seeking to the end of the animation doesn't emit [signal " +"animation_finished]. If you want to skip animation and emit the signal, use " +"[method advance]." msgstr "" #: doc/classes/AnimationPlayer.xml @@ -7454,7 +7495,10 @@ msgid "" "[code]0[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "Returns the number of times an element is in the array." msgstr "" @@ -7499,10 +7543,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array for a value and returns its index or [code]-1[/code] if " -"not found. Optionally, the initial search index can be passed." +"not found. Optionally, the initial search index can be passed. Returns " +"[code]-1[/code] if [code]from[/code] is out of bounds." msgstr "" #: doc/classes/Array.xml @@ -7640,11 +7688,15 @@ msgid "" "[code]null[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array in reverse order. Optionally, a start search index can be " "passed. If negative, the start index is considered relative to the end of " -"the array." +"the array. If the adjusted start index is out of bounds, this method " +"searches from the end of the array." msgstr "" #: doc/classes/Array.xml @@ -8779,7 +8831,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -9001,7 +9053,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -12116,17 +12168,17 @@ msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a normal vector in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a 3D position in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml @@ -14387,7 +14439,9 @@ msgstr "" #: doc/classes/CollisionPolygon2D.xml msgid "" "If [code]true[/code], only edges that face up, relative to " -"[CollisionPolygon2D]'s rotation, will collide with other objects." +"[CollisionPolygon2D]'s rotation, will collide with other objects.\n" +"[b]Note:[/b] This property has no effect if this [CollisionPolygon2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionPolygon2D.xml @@ -14483,7 +14537,9 @@ msgstr "" #: doc/classes/CollisionShape2D.xml msgid "" "Sets whether this collision shape should only detect collision on one side " -"(top or bottom)." +"(top or bottom).\n" +"[b]Note:[/b] This property has no effect if this [CollisionShape2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionShape2D.xml @@ -22909,6 +22965,13 @@ msgid "" "same behavior." msgstr "" +#: doc/classes/EditorSpinSlider.xml +#, fuzzy +msgid "If [code]true[/code], the slider is hidden." +msgstr "" +"JeÅ›li [code]true[/code], potomne wÄ™zÅ‚y sÄ… sortowane. W innym przypadku jest " +"wyłączone." + #: doc/classes/EditorVCSInterface.xml msgid "" "Version Control System (VCS) interface, which reads and writes to the local " @@ -26500,9 +26563,22 @@ msgid "Gradient's colors returned as a [PoolColorArray]." msgstr "" #: doc/classes/Gradient.xml +msgid "" +"Defines how the colors between points of the gradient are interpolated. See " +"[enum InterpolationMode] for available modes." +msgstr "" + +#: doc/classes/Gradient.xml msgid "Gradient's offsets returned as a [PoolRealArray]." msgstr "" +#: doc/classes/Gradient.xml +msgid "" +"Constant interpolation, color changes abruptly at each point and stays " +"uniform between. This might cause visible aliasing when used for a gradient " +"texture in some cases." +msgstr "" + #: doc/classes/GradientTexture.xml msgid "Gradient-filled texture." msgstr "" @@ -35058,13 +35134,13 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used easing from [enum Tween.EaseType]. If not set, the " "default easing is used from the [SceneTreeTween] that contains this Tweener." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used transition from [enum Tween.TransitionType]. If not " "set, the default transition is used from the [SceneTreeTween] that contains " @@ -35777,6 +35853,12 @@ msgid "Creates the agent." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]agent[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" @@ -35849,6 +35931,12 @@ msgid "Create a new map." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation agents [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns the map cell size." msgstr "Zwraca arcus sinus parametru." @@ -35876,6 +35964,12 @@ msgid "Returns the navigation path to reach the destination from the origin." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation regions [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns [code]true[/code] if the map is active." msgstr "" @@ -35901,6 +35995,12 @@ msgid "Creates a new region." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]region[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Sets the map for the region." msgstr "Zwraca sinus parametru." @@ -36389,19 +36489,60 @@ msgid "Represents the size of the [enum SourceGeometryMode] enum." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "This class is responsible for creating and clearing navigation meshes." +msgid "Helper class for creating and clearing navigation meshes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml msgid "" -"Bakes the navigation mesh. This will allow you to use pathfinding with the " -"navigation system." +"This class is responsible for creating and clearing 3D navigation meshes " +"used as [NavigationMesh] resources inside [NavigationMeshInstance]. The " +"[NavigationMeshGenerator] has very limited to no use for 2D as the " +"navigation mesh baking process expects 3D node types and 3D source geometry " +"to parse.\n" +"The entire navigation mesh baking is best done in a separate thread as the " +"voxelization, collision tests and mesh optimization steps involved are very " +"performance and time hungry operations.\n" +"Navigation mesh baking happens in multiple steps and the result depends on " +"3D source geometry and properties of the [NavigationMesh] resource. In the " +"first step, starting from a root node and depending on [NavigationMesh] " +"properties all valid 3D source geometry nodes are collected from the " +"[SceneTree]. Second, all collected nodes are parsed for their relevant 3D " +"geometry data and a combined 3D mesh is build. Due to the many different " +"types of parsable objects, from normal [MeshInstance]s to [CSGShape]s or " +"various [CollisionObject]s, some operations to collect geometry data can " +"trigger [VisualServer] and [PhysicsServer] synchronizations. Server " +"synchronization can have a negative effect on baking time or framerate as it " +"often involves [Mutex] locking for thread security. Many parsable objects " +"and the continuous synchronization with other threaded Servers can increase " +"the baking time significantly. On the other hand only a few but very large " +"and complex objects will take some time to prepare for the Servers which can " +"noticeably stall the next frame render. As a general rule the total amount " +"of parsable objects and their individual size and complexity should be " +"balanced to avoid framerate issues or very long baking times. The combined " +"mesh is then passed to the Recast Navigation Object to test the source " +"geometry for walkable terrain suitable to [NavigationMesh] agent properties " +"by creating a voxel world around the meshes bounding area.\n" +"The finalized navigation mesh is then returned and stored inside the " +"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "Clears the navigation mesh." +msgid "" +"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " +"nodes under the provided [code]root_node[/code] or a specific group of nodes " +"for potential source geometry. The parse behavior can be controlled with the " +"[member NavigationMesh.geometry/parsed_geometry_type] and [member " +"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[NavigationMesh] resource." msgstr "" +#: doc/classes/NavigationMeshGenerator.xml +#, fuzzy +msgid "" +"Removes all polygons and vertices from the provided [code]nav_mesh[/code] " +"resource." +msgstr "Liczy iloczyn wektorowy tego wektora oraz [code]with[/code]." + #: doc/classes/NavigationMeshInstance.xml msgid "An instance of a [NavigationMesh]." msgstr "" @@ -36420,7 +36561,10 @@ msgid "" "thread is useful because navigation baking is not a cheap operation. When it " "is completed, it automatically sets the new [NavigationMesh]. Please note " "that baking on separate thread may be very slow if geometry is parsed from " -"meshes as async access to each mesh involves heavy synchronization." +"meshes as async access to each mesh involves heavy synchronization. Also, " +"please note that baking on a separate thread is automatically disabled on " +"operating systems that cannot use threads (such as HTML5 with threads " +"disabled)." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -36467,6 +36611,11 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle.xml +#, fuzzy +msgid "Returns the [RID] of this obstacle on the [NavigationServer]." +msgstr "Zwraca sinus parametru." + +#: doc/classes/NavigationObstacle.xml msgid "" "Sets the [Navigation] node used by the obstacle. Useful when you don't want " "to make the obstacle a child of a [Navigation] node." @@ -36503,6 +36652,11 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle2D.xml +#, fuzzy +msgid "Returns the [RID] of this obstacle on the [Navigation2DServer]." +msgstr "Zwraca sinus parametru." + +#: doc/classes/NavigationObstacle2D.xml msgid "" "Sets the [Navigation2D] node used by the obstacle. Useful when you don't " "want to make the obstacle a child of a [Navigation2D] node." @@ -37691,7 +37845,7 @@ msgstr "" #: doc/classes/Node.xml msgid "" "Returns [code]true[/code] if the physics interpolated flag is set for this " -"Node (see [method set_physics_interpolated]).\n" +"Node (see [member physics_interpolation_mode]).\n" "[b]Note:[/b] Interpolation will only be active is both the flag is set " "[b]and[/b] physics interpolation is enabled within the [SceneTree]. This can " "be tested using [method is_physics_interpolated_and_enabled]." @@ -37699,8 +37853,8 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Returns [code]true[/code] if physics interpolation is enabled (see [method " -"set_physics_interpolated]) [b]and[/b] enabled in the [SceneTree].\n" +"Returns [code]true[/code] if physics interpolation is enabled (see [member " +"physics_interpolation_mode]) [b]and[/b] enabled in the [SceneTree].\n" "This is a convenience version of [method is_physics_interpolated] that also " "checks whether physics interpolation is enabled globally.\n" "See [member SceneTree.physics_interpolation] and [member ProjectSettings." @@ -37994,14 +38148,6 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Enables or disables physics interpolation per node, offering a finer grain " -"of control than turning physics interpolation on and off globally.\n" -"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " -"interpolation can sometimes give superior results." -msgstr "" - -#: doc/classes/Node.xml -msgid "" "Enables or disables physics (i.e. fixed framerate) processing. When a node " "is being processed, it will receive a [constant " "NOTIFICATION_PHYSICS_PROCESS] at a fixed (usually 60 FPS, see [member Engine." @@ -38134,6 +38280,15 @@ msgstr "" #: doc/classes/Node.xml msgid "" +"Allows enabling or disabling physics interpolation per node, offering a " +"finer grain of control than turning physics interpolation on and off " +"globally.\n" +"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " +"interpolation can sometimes give superior results." +msgstr "" + +#: doc/classes/Node.xml +msgid "" "The node's priority in the execution order of the enabled processing " "callbacks (i.e. [constant NOTIFICATION_PROCESS], [constant " "NOTIFICATION_PHYSICS_PROCESS] and their internal counterparts). Nodes whose " @@ -38295,6 +38450,24 @@ msgid "Continue to process regardless of the [SceneTree] pause state." msgstr "" #: doc/classes/Node.xml +msgid "" +"Inherits physics interpolation mode from the node's parent. For the root " +"node, it is equivalent to [constant PHYSICS_INTERPOLATION_MODE_ON]. Default." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn off physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn on physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml msgid "Duplicate the node's signals." msgstr "" @@ -39536,7 +39709,7 @@ msgstr "Liczy iloczyn wektorowy tego wektora oraz [code]b[/code]." #: doc/classes/OptionButton.xml msgid "" -"Returns the ID of the selected item, or [code]0[/code] if no item is " +"Returns the ID of the selected item, or [code]-1[/code] if no item is " "selected." msgstr "" @@ -39558,7 +39731,8 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" "Selects an item by index and makes it the current item. This will work even " -"if the item is disabled." +"if the item is disabled.\n" +"Passing [code]-1[/code] as the index deselects any currently selected item." msgstr "" #: doc/classes/OptionButton.xml @@ -44932,6 +45106,15 @@ msgid "" "should always be preferred." msgstr "" +#: doc/classes/PoolByteArray.xml doc/classes/PoolColorArray.xml +#: doc/classes/PoolIntArray.xml doc/classes/PoolRealArray.xml +#: doc/classes/PoolStringArray.xml doc/classes/PoolVector2Array.xml +#: doc/classes/PoolVector3Array.xml +msgid "" +"Returns [code]true[/code] if the array contains the given value.\n" +"[b]Note:[/b] This is equivalent to using the [code]in[/code] operator." +msgstr "" + #: doc/classes/PoolByteArray.xml msgid "" "Returns a hexadecimal representation of this array as a [String].\n" @@ -45726,6 +45909,10 @@ msgid "[Font] used for the menu items." msgstr "" #: doc/classes/PopupMenu.xml +msgid "[Font] used for the labeled separator." +msgstr "" + +#: doc/classes/PopupMenu.xml msgid "[Texture] icon for the checked checkbox items." msgstr "" @@ -49172,19 +49359,6 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used easing from [enum Tween.EaseType]. If not set, the " -"default easing is used from the [Tween] that contains this Tweener." -msgstr "" - -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used transition from [enum Tween.TransitionType]. If not " -"set, the default transition is used from the [Tween] that contains this " -"Tweener." -msgstr "" - #: doc/classes/ProximityGroup.xml msgid "General-purpose 3D proximity detection node." msgstr "" @@ -54027,8 +54201,15 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape touches another. If there are " -"no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape touches another.\n" +"If there are no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the shape to check collisions with " "([code]with_shape[/code]), and the transformation matrix of that shape " @@ -54049,8 +54230,16 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape would touch another, if a " -"given movement was applied. If there are no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape would touch another, " +"if a given movement was applied.\n" +"If there would be no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the movement to test on this shape " "([code]local_motion[/code]), the shape to check collisions with " diff --git a/doc/translations/pt.po b/doc/translations/pt.po index a755e40906..7ed938659a 100644 --- a/doc/translations/pt.po +++ b/doc/translations/pt.po @@ -1439,12 +1439,14 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml +#, fuzzy msgid "" -"Random range, any floating point value between [code]from[/code] and " -"[code]to[/code].\n" +"Returns a random floating point value between [code]from[/code] and " +"[code]to[/code] (both endpoints inclusive).\n" "[codeblock]\n" "prints(rand_range(0, 1), rand_range(0, 1)) # Prints e.g. 0.135591 0.405263\n" -"[/codeblock]" +"[/codeblock]\n" +"[b]Note:[/b] This is equivalent to [code]randf() * (to - from) + from[/code]." msgstr "" "Intervalo aleatório, retorna qualquer número real entre [code]from[/code] e " "[code]to[/code].\n" @@ -1517,37 +1519,36 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Returns an array with the given range. Range can be 1 argument [code]N[/" -"code] (0 to [code]N[/code] - 1), two arguments ([code]initial[/code], " -"[code]final - 1[/code]) or three arguments ([code]initial[/code], " -"[code]final - 1[/code], [code]increment[/code]). Returns an empty array if " -"the range isn't valid (e.g. [code]range(2, 5, -1)[/code] or [code]range(5, " -"5, 1)[/code]).\n" -"Returns an array with the given range. [code]range()[/code] can have 1 " -"argument N ([code]0[/code] to [code]N - 1[/code]), two arguments " -"([code]initial[/code], [code]final - 1[/code]) or three arguments " -"([code]initial[/code], [code]final - 1[/code], [code]increment[/code]). " -"[code]increment[/code] can be negative. If [code]increment[/code] is " -"negative, [code]final - 1[/code] will become [code]final + 1[/code]. Also, " -"the initial value must be greater than the final value for the loop to run.\n" -"[codeblock]\n" -"print(range(4))\n" -"print(range(2, 5))\n" -"print(range(0, 6, 2))\n" -"[/codeblock]\n" -"Output:\n" +"Returns an array with the given range. [method range] can be called in three " +"ways:\n" +"[code]range(n: int)[/code]: Starts from 0, increases by steps of 1, and " +"stops [i]before[/i] [code]n[/code]. The argument [code]n[/code] is " +"[b]exclusive[/b].\n" +"[code]range(b: int, n: int)[/code]: Starts from [code]b[/code], increases by " +"steps of 1, and stops [i]before[/i] [code]n[/code]. The arguments [code]b[/" +"code] and [code]n[/code] are [b]inclusive[/b] and [b]exclusive[/b], " +"respectively.\n" +"[code]range(b: int, n: int, s: int)[/code]: Starts from [code]b[/code], " +"increases/decreases by steps of [code]s[/code], and stops [i]before[/i] " +"[code]n[/code]. The arguments [code]b[/code] and [code]n[/code] are " +"[b]inclusive[/b] and [b]exclusive[/b], respectively. The argument [code]s[/" +"code] [b]can[/b] be negative, but not [code]0[/code]. If [code]s[/code] is " +"[code]0[/code], an error message is printed.\n" +"[method range] converts all arguments to [int] before processing.\n" +"[b]Note:[/b] Returns an empty array if no value meets the value constraint " +"(e.g. [code]range(2, 5, -1)[/code] or [code]range(5, 5, 1)[/code]).\n" +"Examples:\n" "[codeblock]\n" -"[0, 1, 2, 3]\n" -"[2, 3, 4]\n" -"[0, 2, 4]\n" +"print(range(4)) # Prints [0, 1, 2, 3]\n" +"print(range(2, 5)) # Prints [2, 3, 4]\n" +"print(range(0, 6, 2)) # Prints [0, 2, 4]\n" +"print(range(4, 1, -1)) # Prints [4, 3, 2]\n" "[/codeblock]\n" "To iterate over an [Array] backwards, use:\n" "[codeblock]\n" "var array = [3, 6, 9]\n" -"var i := array.size() - 1\n" -"while i >= 0:\n" -" print(array[i])\n" -" i -= 1\n" +"for i in range(array.size(), 0, -1):\n" +" print(array[i - 1])\n" "[/codeblock]\n" "Output:\n" "[codeblock]\n" @@ -4878,17 +4879,25 @@ msgid "Maximum value for the mode enum." msgstr "" #: doc/classes/AnimatedSprite.xml -msgid "Sprite node that can use multiple textures for animation." +#, fuzzy +msgid "" +"Sprite node that contains multiple textures as frames to play for animation." msgstr "Nó Sprite que pode usar várias texturas para animação." #: doc/classes/AnimatedSprite.xml msgid "" -"Animations are created using a [SpriteFrames] resource, which can be " -"configured in the editor via the SpriteFrames panel.\n" -"[b]Note:[/b] You can associate a set of normal maps by creating additional " -"[SpriteFrames] resources with a [code]_normal[/code] suffix. For example, " -"having 2 [SpriteFrames] resources [code]run[/code] and [code]run_normal[/" -"code] will make it so the [code]run[/code] animation uses the normal map." +"[AnimatedSprite] is similar to the [Sprite] node, except it carries multiple " +"textures as animation frames. Animations are created using a [SpriteFrames] " +"resource, which allows you to import image files (or a folder containing " +"said files) to provide the animation frames for the sprite. The " +"[SpriteFrames] resource can be configured in the editor via the SpriteFrames " +"bottom panel.\n" +"[b]Note:[/b] You can associate a set of normal or specular maps by creating " +"additional [SpriteFrames] resources with a [code]_normal[/code] or " +"[code]_specular[/code] suffix. For example, having 3 [SpriteFrames] " +"resources [code]run[/code], [code]run_normal[/code], and [code]run_specular[/" +"code] will make it so the [code]run[/code] animation uses normal and " +"specular maps." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml @@ -4916,9 +4925,9 @@ msgstr "" msgid "Stops the current animation (does not reset the frame counter)." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml +#: doc/classes/AnimatedSprite.xml msgid "" -"The current animation from the [code]frames[/code] resource. If this value " +"The current animation from the [member frames] resource. If this value " "changes, the [code]frame[/code] counter is reset." msgstr "" @@ -4942,9 +4951,12 @@ msgstr "Se [code]true[/code], a textura será invertida verticalmente." msgid "The displayed animation frame's index." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml -msgid "The [SpriteFrames] resource containing the animation(s)." -msgstr "O recurso [SpriteFrames] que contém a(s) animação(ões)." +#: doc/classes/AnimatedSprite.xml +msgid "" +"The [SpriteFrames] resource containing the animation(s). Allows you the " +"option to load, edit, clear, make unique and save the states of the " +"[SpriteFrames] resource." +msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/Sprite.xml #: doc/classes/SpriteBase3D.xml @@ -4997,6 +5009,16 @@ msgid "" "provided, the current animation is played." msgstr "" +#: doc/classes/AnimatedSprite3D.xml +msgid "" +"The current animation from the [code]frames[/code] resource. If this value " +"changes, the [code]frame[/code] counter is reset." +msgstr "" + +#: doc/classes/AnimatedSprite3D.xml +msgid "The [SpriteFrames] resource containing the animation(s)." +msgstr "O recurso [SpriteFrames] que contém a(s) animação(ões)." + #: doc/classes/AnimatedTexture.xml msgid "Proxy texture for simple frame-based animations." msgstr "" @@ -5515,11 +5537,11 @@ msgstr "" msgid "No interpolation (nearest value)." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Linear interpolation." msgstr "Interpolação linear." -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Cubic interpolation." msgstr "Interpolação cúbica." @@ -6564,7 +6586,10 @@ msgid "" "Seeks the animation to the [code]seconds[/code] point in time (in seconds). " "If [code]update[/code] is [code]true[/code], the animation updates too, " "otherwise it updates at process time. Events between the current frame and " -"[code]seconds[/code] are skipped." +"[code]seconds[/code] are skipped.\n" +"[b]Note:[/b] Seeking to the end of the animation doesn't emit [signal " +"animation_finished]. If you want to skip animation and emit the signal, use " +"[method advance]." msgstr "" #: doc/classes/AnimationPlayer.xml @@ -7755,7 +7780,10 @@ msgid "" "[code]0[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "Returns the number of times an element is in the array." msgstr "" @@ -7800,10 +7828,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array for a value and returns its index or [code]-1[/code] if " -"not found. Optionally, the initial search index can be passed." +"not found. Optionally, the initial search index can be passed. Returns " +"[code]-1[/code] if [code]from[/code] is out of bounds." msgstr "" #: doc/classes/Array.xml @@ -7941,11 +7973,15 @@ msgid "" "[code]null[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array in reverse order. Optionally, a start search index can be " "passed. If negative, the start index is considered relative to the end of " -"the array." +"the array. If the adjusted start index is out of bounds, this method " +"searches from the end of the array." msgstr "" #: doc/classes/Array.xml @@ -9080,7 +9116,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -9302,7 +9338,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -12418,17 +12454,17 @@ msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a normal vector in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a 3D position in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml @@ -14703,7 +14739,9 @@ msgstr "" #: doc/classes/CollisionPolygon2D.xml msgid "" "If [code]true[/code], only edges that face up, relative to " -"[CollisionPolygon2D]'s rotation, will collide with other objects." +"[CollisionPolygon2D]'s rotation, will collide with other objects.\n" +"[b]Note:[/b] This property has no effect if this [CollisionPolygon2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionPolygon2D.xml @@ -14800,7 +14838,9 @@ msgstr "" #: doc/classes/CollisionShape2D.xml msgid "" "Sets whether this collision shape should only detect collision on one side " -"(top or bottom)." +"(top or bottom).\n" +"[b]Note:[/b] This property has no effect if this [CollisionShape2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionShape2D.xml @@ -23230,6 +23270,11 @@ msgid "" "same behavior." msgstr "" +#: doc/classes/EditorSpinSlider.xml +#, fuzzy +msgid "If [code]true[/code], the slider is hidden." +msgstr "Se [code]true[/code], o áudio está sendo reproduzido." + #: doc/classes/EditorVCSInterface.xml msgid "" "Version Control System (VCS) interface, which reads and writes to the local " @@ -26819,9 +26864,22 @@ msgid "Gradient's colors returned as a [PoolColorArray]." msgstr "" #: doc/classes/Gradient.xml +msgid "" +"Defines how the colors between points of the gradient are interpolated. See " +"[enum InterpolationMode] for available modes." +msgstr "" + +#: doc/classes/Gradient.xml msgid "Gradient's offsets returned as a [PoolRealArray]." msgstr "" +#: doc/classes/Gradient.xml +msgid "" +"Constant interpolation, color changes abruptly at each point and stays " +"uniform between. This might cause visible aliasing when used for a gradient " +"texture in some cases." +msgstr "" + #: doc/classes/GradientTexture.xml msgid "Gradient-filled texture." msgstr "" @@ -35350,13 +35408,13 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used easing from [enum Tween.EaseType]. If not set, the " "default easing is used from the [SceneTreeTween] that contains this Tweener." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used transition from [enum Tween.TransitionType]. If not " "set, the default transition is used from the [SceneTreeTween] that contains " @@ -36063,6 +36121,12 @@ msgid "Creates the agent." msgstr "Retorna a escala." #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]agent[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "Retorna [code]true[/code] se o script pode ser instanciado." @@ -36133,6 +36197,12 @@ msgid "Create a new map." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation agents [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns the map cell size." msgstr "Retorna o tamanho da textura." @@ -36160,6 +36230,12 @@ msgid "Returns the navigation path to reach the destination from the origin." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation regions [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns [code]true[/code] if the map is active." msgstr "Retorna [code]true[/code] se o script pode ser instanciado." @@ -36183,6 +36259,12 @@ msgid "Creates a new region." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]region[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Sets the map for the region." msgstr "Define a cor da borda." @@ -36661,19 +36743,59 @@ msgid "Represents the size of the [enum SourceGeometryMode] enum." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "This class is responsible for creating and clearing navigation meshes." +msgid "Helper class for creating and clearing navigation meshes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml msgid "" -"Bakes the navigation mesh. This will allow you to use pathfinding with the " -"navigation system." +"This class is responsible for creating and clearing 3D navigation meshes " +"used as [NavigationMesh] resources inside [NavigationMeshInstance]. The " +"[NavigationMeshGenerator] has very limited to no use for 2D as the " +"navigation mesh baking process expects 3D node types and 3D source geometry " +"to parse.\n" +"The entire navigation mesh baking is best done in a separate thread as the " +"voxelization, collision tests and mesh optimization steps involved are very " +"performance and time hungry operations.\n" +"Navigation mesh baking happens in multiple steps and the result depends on " +"3D source geometry and properties of the [NavigationMesh] resource. In the " +"first step, starting from a root node and depending on [NavigationMesh] " +"properties all valid 3D source geometry nodes are collected from the " +"[SceneTree]. Second, all collected nodes are parsed for their relevant 3D " +"geometry data and a combined 3D mesh is build. Due to the many different " +"types of parsable objects, from normal [MeshInstance]s to [CSGShape]s or " +"various [CollisionObject]s, some operations to collect geometry data can " +"trigger [VisualServer] and [PhysicsServer] synchronizations. Server " +"synchronization can have a negative effect on baking time or framerate as it " +"often involves [Mutex] locking for thread security. Many parsable objects " +"and the continuous synchronization with other threaded Servers can increase " +"the baking time significantly. On the other hand only a few but very large " +"and complex objects will take some time to prepare for the Servers which can " +"noticeably stall the next frame render. As a general rule the total amount " +"of parsable objects and their individual size and complexity should be " +"balanced to avoid framerate issues or very long baking times. The combined " +"mesh is then passed to the Recast Navigation Object to test the source " +"geometry for walkable terrain suitable to [NavigationMesh] agent properties " +"by creating a voxel world around the meshes bounding area.\n" +"The finalized navigation mesh is then returned and stored inside the " +"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes." +msgstr "" + +#: doc/classes/NavigationMeshGenerator.xml +msgid "" +"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " +"nodes under the provided [code]root_node[/code] or a specific group of nodes " +"for potential source geometry. The parse behavior can be controlled with the " +"[member NavigationMesh.geometry/parsed_geometry_type] and [member " +"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[NavigationMesh] resource." msgstr "" #: doc/classes/NavigationMeshGenerator.xml #, fuzzy -msgid "Clears the navigation mesh." -msgstr "Limpa a seleção." +msgid "" +"Removes all polygons and vertices from the provided [code]nav_mesh[/code] " +"resource." +msgstr "Retorna o nome do nó em [code]idx[/code]." #: doc/classes/NavigationMeshInstance.xml msgid "An instance of a [NavigationMesh]." @@ -36693,7 +36815,10 @@ msgid "" "thread is useful because navigation baking is not a cheap operation. When it " "is completed, it automatically sets the new [NavigationMesh]. Please note " "that baking on separate thread may be very slow if geometry is parsed from " -"meshes as async access to each mesh involves heavy synchronization." +"meshes as async access to each mesh involves heavy synchronization. Also, " +"please note that baking on a separate thread is automatically disabled on " +"operating systems that cannot use threads (such as HTML5 with threads " +"disabled)." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -36741,6 +36866,11 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle.xml +#, fuzzy +msgid "Returns the [RID] of this obstacle on the [NavigationServer]." +msgstr "Retorna o RID do ecrã usada por essa camada." + +#: doc/classes/NavigationObstacle.xml msgid "" "Sets the [Navigation] node used by the obstacle. Useful when you don't want " "to make the obstacle a child of a [Navigation] node." @@ -36777,6 +36907,11 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle2D.xml +#, fuzzy +msgid "Returns the [RID] of this obstacle on the [Navigation2DServer]." +msgstr "Retorna o RID do ecrã usada por essa camada." + +#: doc/classes/NavigationObstacle2D.xml msgid "" "Sets the [Navigation2D] node used by the obstacle. Useful when you don't " "want to make the obstacle a child of a [Navigation2D] node." @@ -37964,7 +38099,7 @@ msgstr "" #: doc/classes/Node.xml msgid "" "Returns [code]true[/code] if the physics interpolated flag is set for this " -"Node (see [method set_physics_interpolated]).\n" +"Node (see [member physics_interpolation_mode]).\n" "[b]Note:[/b] Interpolation will only be active is both the flag is set " "[b]and[/b] physics interpolation is enabled within the [SceneTree]. This can " "be tested using [method is_physics_interpolated_and_enabled]." @@ -37972,8 +38107,8 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Returns [code]true[/code] if physics interpolation is enabled (see [method " -"set_physics_interpolated]) [b]and[/b] enabled in the [SceneTree].\n" +"Returns [code]true[/code] if physics interpolation is enabled (see [member " +"physics_interpolation_mode]) [b]and[/b] enabled in the [SceneTree].\n" "This is a convenience version of [method is_physics_interpolated] that also " "checks whether physics interpolation is enabled globally.\n" "See [member SceneTree.physics_interpolation] and [member ProjectSettings." @@ -38267,14 +38402,6 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Enables or disables physics interpolation per node, offering a finer grain " -"of control than turning physics interpolation on and off globally.\n" -"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " -"interpolation can sometimes give superior results." -msgstr "" - -#: doc/classes/Node.xml -msgid "" "Enables or disables physics (i.e. fixed framerate) processing. When a node " "is being processed, it will receive a [constant " "NOTIFICATION_PHYSICS_PROCESS] at a fixed (usually 60 FPS, see [member Engine." @@ -38407,6 +38534,15 @@ msgstr "" #: doc/classes/Node.xml msgid "" +"Allows enabling or disabling physics interpolation per node, offering a " +"finer grain of control than turning physics interpolation on and off " +"globally.\n" +"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " +"interpolation can sometimes give superior results." +msgstr "" + +#: doc/classes/Node.xml +msgid "" "The node's priority in the execution order of the enabled processing " "callbacks (i.e. [constant NOTIFICATION_PROCESS], [constant " "NOTIFICATION_PHYSICS_PROCESS] and their internal counterparts). Nodes whose " @@ -38568,6 +38704,24 @@ msgid "Continue to process regardless of the [SceneTree] pause state." msgstr "" #: doc/classes/Node.xml +msgid "" +"Inherits physics interpolation mode from the node's parent. For the root " +"node, it is equivalent to [constant PHYSICS_INTERPOLATION_MODE_ON]. Default." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn off physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn on physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml msgid "Duplicate the node's signals." msgstr "" @@ -39809,7 +39963,7 @@ msgstr "Retorna o tipo do nó em at [code]idx[/code]." #: doc/classes/OptionButton.xml msgid "" -"Returns the ID of the selected item, or [code]0[/code] if no item is " +"Returns the ID of the selected item, or [code]-1[/code] if no item is " "selected." msgstr "" @@ -39831,7 +39985,8 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" "Selects an item by index and makes it the current item. This will work even " -"if the item is disabled." +"if the item is disabled.\n" +"Passing [code]-1[/code] as the index deselects any currently selected item." msgstr "" #: doc/classes/OptionButton.xml @@ -45162,6 +45317,15 @@ msgid "" "should always be preferred." msgstr "" +#: doc/classes/PoolByteArray.xml doc/classes/PoolColorArray.xml +#: doc/classes/PoolIntArray.xml doc/classes/PoolRealArray.xml +#: doc/classes/PoolStringArray.xml doc/classes/PoolVector2Array.xml +#: doc/classes/PoolVector3Array.xml +msgid "" +"Returns [code]true[/code] if the array contains the given value.\n" +"[b]Note:[/b] This is equivalent to using the [code]in[/code] operator." +msgstr "" + #: doc/classes/PoolByteArray.xml msgid "" "Returns a hexadecimal representation of this array as a [String].\n" @@ -45956,6 +46120,11 @@ msgid "[Font] used for the menu items." msgstr "" #: doc/classes/PopupMenu.xml +#, fuzzy +msgid "[Font] used for the labeled separator." +msgstr "Não há sugestão para a propriedade editada." + +#: doc/classes/PopupMenu.xml msgid "[Texture] icon for the checked checkbox items." msgstr "" @@ -49402,19 +49571,6 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used easing from [enum Tween.EaseType]. If not set, the " -"default easing is used from the [Tween] that contains this Tweener." -msgstr "" - -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used transition from [enum Tween.TransitionType]. If not " -"set, the default transition is used from the [Tween] that contains this " -"Tweener." -msgstr "" - #: doc/classes/ProximityGroup.xml msgid "General-purpose 3D proximity detection node." msgstr "" @@ -54248,8 +54404,15 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape touches another. If there are " -"no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape touches another.\n" +"If there are no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the shape to check collisions with " "([code]with_shape[/code]), and the transformation matrix of that shape " @@ -54270,8 +54433,16 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape would touch another, if a " -"given movement was applied. If there are no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape would touch another, " +"if a given movement was applied.\n" +"If there would be no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the movement to test on this shape " "([code]local_motion[/code]), the shape to check collisions with " diff --git a/doc/translations/pt_BR.po b/doc/translations/pt_BR.po index ffaf1abbfa..ed65c38cda 100644 --- a/doc/translations/pt_BR.po +++ b/doc/translations/pt_BR.po @@ -1495,12 +1495,14 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml +#, fuzzy msgid "" -"Random range, any floating point value between [code]from[/code] and " -"[code]to[/code].\n" +"Returns a random floating point value between [code]from[/code] and " +"[code]to[/code] (both endpoints inclusive).\n" "[codeblock]\n" "prints(rand_range(0, 1), rand_range(0, 1)) # Prints e.g. 0.135591 0.405263\n" -"[/codeblock]" +"[/codeblock]\n" +"[b]Note:[/b] This is equivalent to [code]randf() * (to - from) + from[/code]." msgstr "" "Intervalo aleatório, retorna qualquer número real entre [code]from[/code] e " "[code]to[/code].\n" @@ -1573,39 +1575,37 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml -#, fuzzy msgid "" -"Returns an array with the given range. Range can be 1 argument [code]N[/" -"code] (0 to [code]N[/code] - 1), two arguments ([code]initial[/code], " -"[code]final - 1[/code]) or three arguments ([code]initial[/code], " -"[code]final - 1[/code], [code]increment[/code]). Returns an empty array if " -"the range isn't valid (e.g. [code]range(2, 5, -1)[/code] or [code]range(5, " -"5, 1)[/code]).\n" -"Returns an array with the given range. [code]range()[/code] can have 1 " -"argument N ([code]0[/code] to [code]N - 1[/code]), two arguments " -"([code]initial[/code], [code]final - 1[/code]) or three arguments " -"([code]initial[/code], [code]final - 1[/code], [code]increment[/code]). " -"[code]increment[/code] can be negative. If [code]increment[/code] is " -"negative, [code]final - 1[/code] will become [code]final + 1[/code]. Also, " -"the initial value must be greater than the final value for the loop to run.\n" -"[codeblock]\n" -"print(range(4))\n" -"print(range(2, 5))\n" -"print(range(0, 6, 2))\n" -"[/codeblock]\n" -"Output:\n" +"Returns an array with the given range. [method range] can be called in three " +"ways:\n" +"[code]range(n: int)[/code]: Starts from 0, increases by steps of 1, and " +"stops [i]before[/i] [code]n[/code]. The argument [code]n[/code] is " +"[b]exclusive[/b].\n" +"[code]range(b: int, n: int)[/code]: Starts from [code]b[/code], increases by " +"steps of 1, and stops [i]before[/i] [code]n[/code]. The arguments [code]b[/" +"code] and [code]n[/code] are [b]inclusive[/b] and [b]exclusive[/b], " +"respectively.\n" +"[code]range(b: int, n: int, s: int)[/code]: Starts from [code]b[/code], " +"increases/decreases by steps of [code]s[/code], and stops [i]before[/i] " +"[code]n[/code]. The arguments [code]b[/code] and [code]n[/code] are " +"[b]inclusive[/b] and [b]exclusive[/b], respectively. The argument [code]s[/" +"code] [b]can[/b] be negative, but not [code]0[/code]. If [code]s[/code] is " +"[code]0[/code], an error message is printed.\n" +"[method range] converts all arguments to [int] before processing.\n" +"[b]Note:[/b] Returns an empty array if no value meets the value constraint " +"(e.g. [code]range(2, 5, -1)[/code] or [code]range(5, 5, 1)[/code]).\n" +"Examples:\n" "[codeblock]\n" -"[0, 1, 2, 3]\n" -"[2, 3, 4]\n" -"[0, 2, 4]\n" +"print(range(4)) # Prints [0, 1, 2, 3]\n" +"print(range(2, 5)) # Prints [2, 3, 4]\n" +"print(range(0, 6, 2)) # Prints [0, 2, 4]\n" +"print(range(4, 1, -1)) # Prints [4, 3, 2]\n" "[/codeblock]\n" "To iterate over an [Array] backwards, use:\n" "[codeblock]\n" "var array = [3, 6, 9]\n" -"var i := array.size() - 1\n" -"while i >= 0:\n" -" print(array[i])\n" -" i -= 1\n" +"for i in range(array.size(), 0, -1):\n" +" print(array[i - 1])\n" "[/codeblock]\n" "Output:\n" "[codeblock]\n" @@ -1614,21 +1614,6 @@ msgid "" "3\n" "[/codeblock]" msgstr "" -"o intervalo fornecido. Rar tcodeJNt / codec (O tO tcodejNt / codec- 1), dois " -"argumentos (tcodelinitiall / codec, Retu rns ana rrz pode ser I arg " -"jcodejtinal- iUc. JcodeJfinat- IUcodeJ, lco adel). Retorna uma matriz vazia " -"se o intervalo não for ou três argumentos (lcc 5, -1) t / codel ou £ code s, " -"i) t / codel »ji: ode pode ter I argumento N tfcodejol / codec ta jcodeJN - " -"iUcadel) , dois argumentos (jcadejinitiat Retorna uma matriz com o intervalo " -"fornecido. lcoi Ucadel, jcodeJrinat- tUcodel) ou três argumentos Cjcode " -"tcodelfinal - ll / (pode ser negativo, tcodelfinal - it / codec se tornará " -"lco nal + ll / codec. Além disso, o init negativo. Se jcode! deve ser maior " -"que o valor final para o loop ser executado.ii [codeblockljPi print (range " -"(4)) ii print (range (2, S)) ii print (range (o, 6, 2)) ii [/ codeblocklji " -"OUtPUt: ipi [codeblockljPi to, i, 2, 3li.i to, 2, 4lij [/ codeblocklji Td " -"iterar sobre um tArrayl para trás, use: g [codeblockljPi va ra rray: t3, 6, " -"0J + va ri :: a rray.size0 - enquanto i): Oÿ11 r \"Sprint (arraytil) ii [/ " -"codeblocklji OUtPUt: ipi [codeblockljPi [/ codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" @@ -5133,17 +5118,25 @@ msgid "Maximum value for the mode enum." msgstr "" #: doc/classes/AnimatedSprite.xml -msgid "Sprite node that can use multiple textures for animation." +#, fuzzy +msgid "" +"Sprite node that contains multiple textures as frames to play for animation." msgstr "Nó Sprite que pode usar várias texturas para animação." #: doc/classes/AnimatedSprite.xml msgid "" -"Animations are created using a [SpriteFrames] resource, which can be " -"configured in the editor via the SpriteFrames panel.\n" -"[b]Note:[/b] You can associate a set of normal maps by creating additional " -"[SpriteFrames] resources with a [code]_normal[/code] suffix. For example, " -"having 2 [SpriteFrames] resources [code]run[/code] and [code]run_normal[/" -"code] will make it so the [code]run[/code] animation uses the normal map." +"[AnimatedSprite] is similar to the [Sprite] node, except it carries multiple " +"textures as animation frames. Animations are created using a [SpriteFrames] " +"resource, which allows you to import image files (or a folder containing " +"said files) to provide the animation frames for the sprite. The " +"[SpriteFrames] resource can be configured in the editor via the SpriteFrames " +"bottom panel.\n" +"[b]Note:[/b] You can associate a set of normal or specular maps by creating " +"additional [SpriteFrames] resources with a [code]_normal[/code] or " +"[code]_specular[/code] suffix. For example, having 3 [SpriteFrames] " +"resources [code]run[/code], [code]run_normal[/code], and [code]run_specular[/" +"code] will make it so the [code]run[/code] animation uses normal and " +"specular maps." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml @@ -5171,9 +5164,9 @@ msgstr "" msgid "Stops the current animation (does not reset the frame counter)." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml +#: doc/classes/AnimatedSprite.xml msgid "" -"The current animation from the [code]frames[/code] resource. If this value " +"The current animation from the [member frames] resource. If this value " "changes, the [code]frame[/code] counter is reset." msgstr "" @@ -5197,9 +5190,12 @@ msgstr "Se [code]true[/code], a textura será invertida verticalmente." msgid "The displayed animation frame's index." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml -msgid "The [SpriteFrames] resource containing the animation(s)." -msgstr "O recurso [SpriteFrames] que contém a(s) animação(ões)." +#: doc/classes/AnimatedSprite.xml +msgid "" +"The [SpriteFrames] resource containing the animation(s). Allows you the " +"option to load, edit, clear, make unique and save the states of the " +"[SpriteFrames] resource." +msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/Sprite.xml #: doc/classes/SpriteBase3D.xml @@ -5252,6 +5248,16 @@ msgid "" "provided, the current animation is played." msgstr "" +#: doc/classes/AnimatedSprite3D.xml +msgid "" +"The current animation from the [code]frames[/code] resource. If this value " +"changes, the [code]frame[/code] counter is reset." +msgstr "" + +#: doc/classes/AnimatedSprite3D.xml +msgid "The [SpriteFrames] resource containing the animation(s)." +msgstr "O recurso [SpriteFrames] que contém a(s) animação(ões)." + #: doc/classes/AnimatedTexture.xml msgid "Proxy texture for simple frame-based animations." msgstr "" @@ -5771,11 +5777,11 @@ msgstr "" msgid "No interpolation (nearest value)." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Linear interpolation." msgstr "Interpolação linear." -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Cubic interpolation." msgstr "Interpolação cúbica." @@ -6819,7 +6825,10 @@ msgid "" "Seeks the animation to the [code]seconds[/code] point in time (in seconds). " "If [code]update[/code] is [code]true[/code], the animation updates too, " "otherwise it updates at process time. Events between the current frame and " -"[code]seconds[/code] are skipped." +"[code]seconds[/code] are skipped.\n" +"[b]Note:[/b] Seeking to the end of the animation doesn't emit [signal " +"animation_finished]. If you want to skip animation and emit the signal, use " +"[method advance]." msgstr "" #: doc/classes/AnimationPlayer.xml @@ -8025,7 +8034,10 @@ msgid "" "[code]0[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "Returns the number of times an element is in the array." msgstr "" @@ -8070,10 +8082,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array for a value and returns its index or [code]-1[/code] if " -"not found. Optionally, the initial search index can be passed." +"not found. Optionally, the initial search index can be passed. Returns " +"[code]-1[/code] if [code]from[/code] is out of bounds." msgstr "" #: doc/classes/Array.xml @@ -8211,11 +8227,15 @@ msgid "" "[code]null[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array in reverse order. Optionally, a start search index can be " "passed. If negative, the start index is considered relative to the end of " -"the array." +"the array. If the adjusted start index is out of bounds, this method " +"searches from the end of the array." msgstr "" #: doc/classes/Array.xml @@ -9350,7 +9370,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -9572,7 +9592,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -12692,17 +12712,17 @@ msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a normal vector in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a 3D position in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml @@ -14984,7 +15004,9 @@ msgstr "" #: doc/classes/CollisionPolygon2D.xml msgid "" "If [code]true[/code], only edges that face up, relative to " -"[CollisionPolygon2D]'s rotation, will collide with other objects." +"[CollisionPolygon2D]'s rotation, will collide with other objects.\n" +"[b]Note:[/b] This property has no effect if this [CollisionPolygon2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionPolygon2D.xml @@ -15081,7 +15103,9 @@ msgstr "" #: doc/classes/CollisionShape2D.xml msgid "" "Sets whether this collision shape should only detect collision on one side " -"(top or bottom)." +"(top or bottom).\n" +"[b]Note:[/b] This property has no effect if this [CollisionShape2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionShape2D.xml @@ -23551,6 +23575,11 @@ msgid "" "same behavior." msgstr "" +#: doc/classes/EditorSpinSlider.xml +#, fuzzy +msgid "If [code]true[/code], the slider is hidden." +msgstr "Retorna [code]true[/code] se o script pode ser instanciado." + #: doc/classes/EditorVCSInterface.xml msgid "" "Version Control System (VCS) interface, which reads and writes to the local " @@ -27150,9 +27179,22 @@ msgid "Gradient's colors returned as a [PoolColorArray]." msgstr "" #: doc/classes/Gradient.xml +msgid "" +"Defines how the colors between points of the gradient are interpolated. See " +"[enum InterpolationMode] for available modes." +msgstr "" + +#: doc/classes/Gradient.xml msgid "Gradient's offsets returned as a [PoolRealArray]." msgstr "" +#: doc/classes/Gradient.xml +msgid "" +"Constant interpolation, color changes abruptly at each point and stays " +"uniform between. This might cause visible aliasing when used for a gradient " +"texture in some cases." +msgstr "" + #: doc/classes/GradientTexture.xml msgid "Gradient-filled texture." msgstr "" @@ -35718,13 +35760,13 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used easing from [enum Tween.EaseType]. If not set, the " "default easing is used from the [SceneTreeTween] that contains this Tweener." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used transition from [enum Tween.TransitionType]. If not " "set, the default transition is used from the [SceneTreeTween] that contains " @@ -36438,6 +36480,12 @@ msgid "Creates the agent." msgstr "Retorna a escala." #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]agent[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "Retorna [code]true[/code] se o script pode ser instanciado." @@ -36509,6 +36557,12 @@ msgid "Create a new map." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation agents [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns the map cell size." msgstr "Retorna o tamanho da textura." @@ -36536,6 +36590,12 @@ msgid "Returns the navigation path to reach the destination from the origin." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation regions [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns [code]true[/code] if the map is active." msgstr "Retorna [code]true[/code] se o script pode ser instanciado." @@ -36559,6 +36619,12 @@ msgid "Creates a new region." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]region[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Sets the map for the region." msgstr "Define a cor da borda." @@ -37046,19 +37112,59 @@ msgid "Represents the size of the [enum SourceGeometryMode] enum." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "This class is responsible for creating and clearing navigation meshes." +msgid "Helper class for creating and clearing navigation meshes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml msgid "" -"Bakes the navigation mesh. This will allow you to use pathfinding with the " -"navigation system." +"This class is responsible for creating and clearing 3D navigation meshes " +"used as [NavigationMesh] resources inside [NavigationMeshInstance]. The " +"[NavigationMeshGenerator] has very limited to no use for 2D as the " +"navigation mesh baking process expects 3D node types and 3D source geometry " +"to parse.\n" +"The entire navigation mesh baking is best done in a separate thread as the " +"voxelization, collision tests and mesh optimization steps involved are very " +"performance and time hungry operations.\n" +"Navigation mesh baking happens in multiple steps and the result depends on " +"3D source geometry and properties of the [NavigationMesh] resource. In the " +"first step, starting from a root node and depending on [NavigationMesh] " +"properties all valid 3D source geometry nodes are collected from the " +"[SceneTree]. Second, all collected nodes are parsed for their relevant 3D " +"geometry data and a combined 3D mesh is build. Due to the many different " +"types of parsable objects, from normal [MeshInstance]s to [CSGShape]s or " +"various [CollisionObject]s, some operations to collect geometry data can " +"trigger [VisualServer] and [PhysicsServer] synchronizations. Server " +"synchronization can have a negative effect on baking time or framerate as it " +"often involves [Mutex] locking for thread security. Many parsable objects " +"and the continuous synchronization with other threaded Servers can increase " +"the baking time significantly. On the other hand only a few but very large " +"and complex objects will take some time to prepare for the Servers which can " +"noticeably stall the next frame render. As a general rule the total amount " +"of parsable objects and their individual size and complexity should be " +"balanced to avoid framerate issues or very long baking times. The combined " +"mesh is then passed to the Recast Navigation Object to test the source " +"geometry for walkable terrain suitable to [NavigationMesh] agent properties " +"by creating a voxel world around the meshes bounding area.\n" +"The finalized navigation mesh is then returned and stored inside the " +"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes." +msgstr "" + +#: doc/classes/NavigationMeshGenerator.xml +msgid "" +"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " +"nodes under the provided [code]root_node[/code] or a specific group of nodes " +"for potential source geometry. The parse behavior can be controlled with the " +"[member NavigationMesh.geometry/parsed_geometry_type] and [member " +"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[NavigationMesh] resource." msgstr "" #: doc/classes/NavigationMeshGenerator.xml #, fuzzy -msgid "Clears the navigation mesh." -msgstr "Limpa a seleção." +msgid "" +"Removes all polygons and vertices from the provided [code]nav_mesh[/code] " +"resource." +msgstr "Retorna o nome do nó em [code]idx[/code]." #: doc/classes/NavigationMeshInstance.xml msgid "An instance of a [NavigationMesh]." @@ -37078,7 +37184,10 @@ msgid "" "thread is useful because navigation baking is not a cheap operation. When it " "is completed, it automatically sets the new [NavigationMesh]. Please note " "that baking on separate thread may be very slow if geometry is parsed from " -"meshes as async access to each mesh involves heavy synchronization." +"meshes as async access to each mesh involves heavy synchronization. Also, " +"please note that baking on a separate thread is automatically disabled on " +"operating systems that cannot use threads (such as HTML5 with threads " +"disabled)." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -37127,6 +37236,11 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle.xml +#, fuzzy +msgid "Returns the [RID] of this obstacle on the [NavigationServer]." +msgstr "Retorna o número de nós nesta [SceneTree]." + +#: doc/classes/NavigationObstacle.xml msgid "" "Sets the [Navigation] node used by the obstacle. Useful when you don't want " "to make the obstacle a child of a [Navigation] node." @@ -37163,6 +37277,11 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle2D.xml +#, fuzzy +msgid "Returns the [RID] of this obstacle on the [Navigation2DServer]." +msgstr "Retorna o número de nós nesta [SceneTree]." + +#: doc/classes/NavigationObstacle2D.xml msgid "" "Sets the [Navigation2D] node used by the obstacle. Useful when you don't " "want to make the obstacle a child of a [Navigation2D] node." @@ -38351,7 +38470,7 @@ msgstr "" #: doc/classes/Node.xml msgid "" "Returns [code]true[/code] if the physics interpolated flag is set for this " -"Node (see [method set_physics_interpolated]).\n" +"Node (see [member physics_interpolation_mode]).\n" "[b]Note:[/b] Interpolation will only be active is both the flag is set " "[b]and[/b] physics interpolation is enabled within the [SceneTree]. This can " "be tested using [method is_physics_interpolated_and_enabled]." @@ -38359,8 +38478,8 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Returns [code]true[/code] if physics interpolation is enabled (see [method " -"set_physics_interpolated]) [b]and[/b] enabled in the [SceneTree].\n" +"Returns [code]true[/code] if physics interpolation is enabled (see [member " +"physics_interpolation_mode]) [b]and[/b] enabled in the [SceneTree].\n" "This is a convenience version of [method is_physics_interpolated] that also " "checks whether physics interpolation is enabled globally.\n" "See [member SceneTree.physics_interpolation] and [member ProjectSettings." @@ -38654,14 +38773,6 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Enables or disables physics interpolation per node, offering a finer grain " -"of control than turning physics interpolation on and off globally.\n" -"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " -"interpolation can sometimes give superior results." -msgstr "" - -#: doc/classes/Node.xml -msgid "" "Enables or disables physics (i.e. fixed framerate) processing. When a node " "is being processed, it will receive a [constant " "NOTIFICATION_PHYSICS_PROCESS] at a fixed (usually 60 FPS, see [member Engine." @@ -38794,6 +38905,15 @@ msgstr "" #: doc/classes/Node.xml msgid "" +"Allows enabling or disabling physics interpolation per node, offering a " +"finer grain of control than turning physics interpolation on and off " +"globally.\n" +"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " +"interpolation can sometimes give superior results." +msgstr "" + +#: doc/classes/Node.xml +msgid "" "The node's priority in the execution order of the enabled processing " "callbacks (i.e. [constant NOTIFICATION_PROCESS], [constant " "NOTIFICATION_PHYSICS_PROCESS] and their internal counterparts). Nodes whose " @@ -38955,6 +39075,24 @@ msgid "Continue to process regardless of the [SceneTree] pause state." msgstr "" #: doc/classes/Node.xml +msgid "" +"Inherits physics interpolation mode from the node's parent. For the root " +"node, it is equivalent to [constant PHYSICS_INTERPOLATION_MODE_ON]. Default." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn off physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn on physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml msgid "Duplicate the node's signals." msgstr "" @@ -40196,7 +40334,7 @@ msgstr "Retorna o tipo do nó em at [code]idx[/code]." #: doc/classes/OptionButton.xml msgid "" -"Returns the ID of the selected item, or [code]0[/code] if no item is " +"Returns the ID of the selected item, or [code]-1[/code] if no item is " "selected." msgstr "" @@ -40218,7 +40356,8 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" "Selects an item by index and makes it the current item. This will work even " -"if the item is disabled." +"if the item is disabled.\n" +"Passing [code]-1[/code] as the index deselects any currently selected item." msgstr "" #: doc/classes/OptionButton.xml @@ -45594,6 +45733,15 @@ msgid "" "should always be preferred." msgstr "" +#: doc/classes/PoolByteArray.xml doc/classes/PoolColorArray.xml +#: doc/classes/PoolIntArray.xml doc/classes/PoolRealArray.xml +#: doc/classes/PoolStringArray.xml doc/classes/PoolVector2Array.xml +#: doc/classes/PoolVector3Array.xml +msgid "" +"Returns [code]true[/code] if the array contains the given value.\n" +"[b]Note:[/b] This is equivalent to using the [code]in[/code] operator." +msgstr "" + #: doc/classes/PoolByteArray.xml msgid "" "Returns a hexadecimal representation of this array as a [String].\n" @@ -46390,6 +46538,11 @@ msgid "[Font] used for the menu items." msgstr "" #: doc/classes/PopupMenu.xml +#, fuzzy +msgid "[Font] used for the labeled separator." +msgstr "Nenhuma dica para a propriedade editada." + +#: doc/classes/PopupMenu.xml msgid "[Texture] icon for the checked checkbox items." msgstr "" @@ -49837,19 +49990,6 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used easing from [enum Tween.EaseType]. If not set, the " -"default easing is used from the [Tween] that contains this Tweener." -msgstr "" - -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used transition from [enum Tween.TransitionType]. If not " -"set, the default transition is used from the [Tween] that contains this " -"Tweener." -msgstr "" - #: doc/classes/ProximityGroup.xml msgid "General-purpose 3D proximity detection node." msgstr "" @@ -54693,8 +54833,15 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape touches another. If there are " -"no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape touches another.\n" +"If there are no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the shape to check collisions with " "([code]with_shape[/code]), and the transformation matrix of that shape " @@ -54715,8 +54862,16 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape would touch another, if a " -"given movement was applied. If there are no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape would touch another, " +"if a given movement was applied.\n" +"If there would be no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the movement to test on this shape " "([code]local_motion[/code]), the shape to check collisions with " diff --git a/doc/translations/ro.po b/doc/translations/ro.po index 26a7c6b2a6..eb20518c24 100644 --- a/doc/translations/ro.po +++ b/doc/translations/ro.po @@ -8,12 +8,13 @@ # Pierre Stempin <pierre.stempin@gmail.com>, 2020. # FlooferLand <yunaflarf@gmail.com>, 2021. # N3mEee <n3mebusiness@gmail.com>, 2021. +# Psynt <nichita@cadvegra.com>, 2022. msgid "" msgstr "" "Project-Id-Version: Godot Engine class reference\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" -"PO-Revision-Date: 2021-12-14 15:28+0000\n" -"Last-Translator: N3mEee <n3mebusiness@gmail.com>\n" +"PO-Revision-Date: 2022-05-15 09:39+0000\n" +"Last-Translator: Psynt <nichita@cadvegra.com>\n" "Language-Team: Romanian <https://hosted.weblate.org/projects/godot-engine/" "godot-class-reference/ro/>\n" "Language: ro\n" @@ -22,7 +23,7 @@ msgstr "" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " "20)) ? 1 : 2;\n" -"X-Generator: Weblate 4.10-dev\n" +"X-Generator: Weblate 4.13-dev\n" #: doc/tools/make_rst.py msgid "Description" @@ -65,73 +66,74 @@ msgid "Method Descriptions" msgstr "Descrierile Metodei" #: doc/tools/make_rst.py -#, fuzzy msgid "Theme Property Descriptions" -msgstr "Descrieri Proprietate" +msgstr "Descrieri Proprietate Tema" #: doc/tools/make_rst.py msgid "Inherits:" -msgstr "" +msgstr "Mosteneste:" #: doc/tools/make_rst.py msgid "Inherited By:" -msgstr "" +msgstr "Mostenit de:" #: doc/tools/make_rst.py msgid "(overrides %s)" -msgstr "" +msgstr "(suprascrie %s)" #: doc/tools/make_rst.py msgid "Default" -msgstr "" +msgstr "Implicit" #: doc/tools/make_rst.py msgid "Setter" -msgstr "" +msgstr "setter" #: doc/tools/make_rst.py msgid "value" -msgstr "" +msgstr "valoare" #: doc/tools/make_rst.py msgid "Getter" -msgstr "" +msgstr "getter" #: doc/tools/make_rst.py msgid "" "This method should typically be overridden by the user to have any effect." -msgstr "" +msgstr "Pentru a avea efectul dorit, metoda trebuie suprascrisa de utilizator." #: doc/tools/make_rst.py msgid "" "This method has no side effects. It doesn't modify any of the instance's " "member variables." -msgstr "" +msgstr "Metoda nu are efecte adverse. Nu modifica niciun camp al obiectului." #: doc/tools/make_rst.py msgid "" "This method accepts any number of arguments after the ones described here." -msgstr "" +msgstr "Metoda accepta oricate argumente in urma celor definite aici." #: doc/tools/make_rst.py msgid "This method is used to construct a type." -msgstr "" +msgstr "Metoda folosita la construirea unui tip." #: doc/tools/make_rst.py msgid "" "This method doesn't need an instance to be called, so it can be called " "directly using the class name." msgstr "" +"Nu e nevoie de o instanta. Metoda asta poate fi apelata direct folosind " +"numele clasei." #: doc/tools/make_rst.py msgid "" "This method describes a valid operator to use with this type as left-hand " "operand." -msgstr "" +msgstr "Operator cu tipul descris la stanga." #: modules/gdscript/doc_classes/@GDScript.xml msgid "Built-in GDScript functions." -msgstr "FuncÈ›iile incorporate GDScript." +msgstr "FuncÈ›ii incorporate GDScript." #: modules/gdscript/doc_classes/@GDScript.xml msgid "" @@ -156,6 +158,16 @@ msgid "" "red = Color8(255, 0, 0)\n" "[/codeblock]" msgstr "" +"Returnează o culoare construită din canalele cu valori întregi roÈ™u, verde, " +"albastru, È™i alpha. Fiecare canal ar trebui să aibă 8 biÈ›i de informaÈ›ie de " +"la 0 la 255.\n" +"[code] r8 [/code] canalul roÈ™u\n" +"[code] g8 [/code] canalul verde\n" +"[code] b8 [/code] canalul albastru\n" +"[code] a8 [/code] canalul alpha\n" +"[codeblock]\n" +"roÈ™u = Color8(255, 0 0)\n" +"[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" @@ -948,11 +960,12 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Random range, any floating point value between [code]from[/code] and " -"[code]to[/code].\n" +"Returns a random floating point value between [code]from[/code] and " +"[code]to[/code] (both endpoints inclusive).\n" "[codeblock]\n" "prints(rand_range(0, 1), rand_range(0, 1)) # Prints e.g. 0.135591 0.405263\n" -"[/codeblock]" +"[/codeblock]\n" +"[b]Note:[/b] This is equivalent to [code]randf() * (to - from) + from[/code]." msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml @@ -996,37 +1009,36 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Returns an array with the given range. Range can be 1 argument [code]N[/" -"code] (0 to [code]N[/code] - 1), two arguments ([code]initial[/code], " -"[code]final - 1[/code]) or three arguments ([code]initial[/code], " -"[code]final - 1[/code], [code]increment[/code]). Returns an empty array if " -"the range isn't valid (e.g. [code]range(2, 5, -1)[/code] or [code]range(5, " -"5, 1)[/code]).\n" -"Returns an array with the given range. [code]range()[/code] can have 1 " -"argument N ([code]0[/code] to [code]N - 1[/code]), two arguments " -"([code]initial[/code], [code]final - 1[/code]) or three arguments " -"([code]initial[/code], [code]final - 1[/code], [code]increment[/code]). " -"[code]increment[/code] can be negative. If [code]increment[/code] is " -"negative, [code]final - 1[/code] will become [code]final + 1[/code]. Also, " -"the initial value must be greater than the final value for the loop to run.\n" -"[codeblock]\n" -"print(range(4))\n" -"print(range(2, 5))\n" -"print(range(0, 6, 2))\n" -"[/codeblock]\n" -"Output:\n" +"Returns an array with the given range. [method range] can be called in three " +"ways:\n" +"[code]range(n: int)[/code]: Starts from 0, increases by steps of 1, and " +"stops [i]before[/i] [code]n[/code]. The argument [code]n[/code] is " +"[b]exclusive[/b].\n" +"[code]range(b: int, n: int)[/code]: Starts from [code]b[/code], increases by " +"steps of 1, and stops [i]before[/i] [code]n[/code]. The arguments [code]b[/" +"code] and [code]n[/code] are [b]inclusive[/b] and [b]exclusive[/b], " +"respectively.\n" +"[code]range(b: int, n: int, s: int)[/code]: Starts from [code]b[/code], " +"increases/decreases by steps of [code]s[/code], and stops [i]before[/i] " +"[code]n[/code]. The arguments [code]b[/code] and [code]n[/code] are " +"[b]inclusive[/b] and [b]exclusive[/b], respectively. The argument [code]s[/" +"code] [b]can[/b] be negative, but not [code]0[/code]. If [code]s[/code] is " +"[code]0[/code], an error message is printed.\n" +"[method range] converts all arguments to [int] before processing.\n" +"[b]Note:[/b] Returns an empty array if no value meets the value constraint " +"(e.g. [code]range(2, 5, -1)[/code] or [code]range(5, 5, 1)[/code]).\n" +"Examples:\n" "[codeblock]\n" -"[0, 1, 2, 3]\n" -"[2, 3, 4]\n" -"[0, 2, 4]\n" +"print(range(4)) # Prints [0, 1, 2, 3]\n" +"print(range(2, 5)) # Prints [2, 3, 4]\n" +"print(range(0, 6, 2)) # Prints [0, 2, 4]\n" +"print(range(4, 1, -1)) # Prints [4, 3, 2]\n" "[/codeblock]\n" "To iterate over an [Array] backwards, use:\n" "[codeblock]\n" "var array = [3, 6, 9]\n" -"var i := array.size() - 1\n" -"while i >= 0:\n" -" print(array[i])\n" -" i -= 1\n" +"for i in range(array.size(), 0, -1):\n" +" print(array[i - 1])\n" "[/codeblock]\n" "Output:\n" "[codeblock]\n" @@ -4125,17 +4137,24 @@ msgid "Maximum value for the mode enum." msgstr "" #: doc/classes/AnimatedSprite.xml -msgid "Sprite node that can use multiple textures for animation." +msgid "" +"Sprite node that contains multiple textures as frames to play for animation." msgstr "" #: doc/classes/AnimatedSprite.xml msgid "" -"Animations are created using a [SpriteFrames] resource, which can be " -"configured in the editor via the SpriteFrames panel.\n" -"[b]Note:[/b] You can associate a set of normal maps by creating additional " -"[SpriteFrames] resources with a [code]_normal[/code] suffix. For example, " -"having 2 [SpriteFrames] resources [code]run[/code] and [code]run_normal[/" -"code] will make it so the [code]run[/code] animation uses the normal map." +"[AnimatedSprite] is similar to the [Sprite] node, except it carries multiple " +"textures as animation frames. Animations are created using a [SpriteFrames] " +"resource, which allows you to import image files (or a folder containing " +"said files) to provide the animation frames for the sprite. The " +"[SpriteFrames] resource can be configured in the editor via the SpriteFrames " +"bottom panel.\n" +"[b]Note:[/b] You can associate a set of normal or specular maps by creating " +"additional [SpriteFrames] resources with a [code]_normal[/code] or " +"[code]_specular[/code] suffix. For example, having 3 [SpriteFrames] " +"resources [code]run[/code], [code]run_normal[/code], and [code]run_specular[/" +"code] will make it so the [code]run[/code] animation uses normal and " +"specular maps." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml @@ -4163,9 +4182,9 @@ msgstr "" msgid "Stops the current animation (does not reset the frame counter)." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml +#: doc/classes/AnimatedSprite.xml msgid "" -"The current animation from the [code]frames[/code] resource. If this value " +"The current animation from the [member frames] resource. If this value " "changes, the [code]frame[/code] counter is reset." msgstr "" @@ -4189,8 +4208,11 @@ msgstr "" msgid "The displayed animation frame's index." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml -msgid "The [SpriteFrames] resource containing the animation(s)." +#: doc/classes/AnimatedSprite.xml +msgid "" +"The [SpriteFrames] resource containing the animation(s). Allows you the " +"option to load, edit, clear, make unique and save the states of the " +"[SpriteFrames] resource." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/Sprite.xml @@ -4242,6 +4264,16 @@ msgid "" "provided, the current animation is played." msgstr "" +#: doc/classes/AnimatedSprite3D.xml +msgid "" +"The current animation from the [code]frames[/code] resource. If this value " +"changes, the [code]frame[/code] counter is reset." +msgstr "" + +#: doc/classes/AnimatedSprite3D.xml +msgid "The [SpriteFrames] resource containing the animation(s)." +msgstr "" + #: doc/classes/AnimatedTexture.xml msgid "Proxy texture for simple frame-based animations." msgstr "" @@ -4757,11 +4789,11 @@ msgstr "" msgid "No interpolation (nearest value)." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Linear interpolation." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Cubic interpolation." msgstr "" @@ -5796,7 +5828,10 @@ msgid "" "Seeks the animation to the [code]seconds[/code] point in time (in seconds). " "If [code]update[/code] is [code]true[/code], the animation updates too, " "otherwise it updates at process time. Events between the current frame and " -"[code]seconds[/code] are skipped." +"[code]seconds[/code] are skipped.\n" +"[b]Note:[/b] Seeking to the end of the animation doesn't emit [signal " +"animation_finished]. If you want to skip animation and emit the signal, use " +"[method advance]." msgstr "" #: doc/classes/AnimationPlayer.xml @@ -6986,7 +7021,10 @@ msgid "" "[code]0[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "Returns the number of times an element is in the array." msgstr "" @@ -7031,10 +7069,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array for a value and returns its index or [code]-1[/code] if " -"not found. Optionally, the initial search index can be passed." +"not found. Optionally, the initial search index can be passed. Returns " +"[code]-1[/code] if [code]from[/code] is out of bounds." msgstr "" #: doc/classes/Array.xml @@ -7172,11 +7214,15 @@ msgid "" "[code]null[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array in reverse order. Optionally, a start search index can be " "passed. If negative, the start index is considered relative to the end of " -"the array." +"the array. If the adjusted start index is out of bounds, this method " +"searches from the end of the array." msgstr "" #: doc/classes/Array.xml @@ -8311,7 +8357,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -8533,7 +8579,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -11644,17 +11690,17 @@ msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a normal vector in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a 3D position in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml @@ -13903,7 +13949,9 @@ msgstr "" #: doc/classes/CollisionPolygon2D.xml msgid "" "If [code]true[/code], only edges that face up, relative to " -"[CollisionPolygon2D]'s rotation, will collide with other objects." +"[CollisionPolygon2D]'s rotation, will collide with other objects.\n" +"[b]Note:[/b] This property has no effect if this [CollisionPolygon2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionPolygon2D.xml @@ -13999,7 +14047,9 @@ msgstr "" #: doc/classes/CollisionShape2D.xml msgid "" "Sets whether this collision shape should only detect collision on one side " -"(top or bottom)." +"(top or bottom).\n" +"[b]Note:[/b] This property has no effect if this [CollisionShape2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionShape2D.xml @@ -22405,6 +22455,10 @@ msgid "" "same behavior." msgstr "" +#: doc/classes/EditorSpinSlider.xml +msgid "If [code]true[/code], the slider is hidden." +msgstr "" + #: doc/classes/EditorVCSInterface.xml msgid "" "Version Control System (VCS) interface, which reads and writes to the local " @@ -25989,9 +26043,22 @@ msgid "Gradient's colors returned as a [PoolColorArray]." msgstr "" #: doc/classes/Gradient.xml +msgid "" +"Defines how the colors between points of the gradient are interpolated. See " +"[enum InterpolationMode] for available modes." +msgstr "" + +#: doc/classes/Gradient.xml msgid "Gradient's offsets returned as a [PoolRealArray]." msgstr "" +#: doc/classes/Gradient.xml +msgid "" +"Constant interpolation, color changes abruptly at each point and stays " +"uniform between. This might cause visible aliasing when used for a gradient " +"texture in some cases." +msgstr "" + #: doc/classes/GradientTexture.xml msgid "Gradient-filled texture." msgstr "" @@ -34513,13 +34580,13 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used easing from [enum Tween.EaseType]. If not set, the " "default easing is used from the [SceneTreeTween] that contains this Tweener." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used transition from [enum Tween.TransitionType]. If not " "set, the default transition is used from the [SceneTreeTween] that contains " @@ -35225,6 +35292,12 @@ msgid "Creates the agent." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]agent[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" @@ -35288,6 +35361,12 @@ msgid "Create a new map." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation agents [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns the map cell size." msgstr "" @@ -35314,6 +35393,12 @@ msgid "Returns the navigation path to reach the destination from the origin." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation regions [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns [code]true[/code] if the map is active." msgstr "" @@ -35335,6 +35420,12 @@ msgid "Creates a new region." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]region[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the map for the region." msgstr "" @@ -35807,17 +35898,57 @@ msgid "Represents the size of the [enum SourceGeometryMode] enum." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "This class is responsible for creating and clearing navigation meshes." +msgid "Helper class for creating and clearing navigation meshes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml msgid "" -"Bakes the navigation mesh. This will allow you to use pathfinding with the " -"navigation system." +"This class is responsible for creating and clearing 3D navigation meshes " +"used as [NavigationMesh] resources inside [NavigationMeshInstance]. The " +"[NavigationMeshGenerator] has very limited to no use for 2D as the " +"navigation mesh baking process expects 3D node types and 3D source geometry " +"to parse.\n" +"The entire navigation mesh baking is best done in a separate thread as the " +"voxelization, collision tests and mesh optimization steps involved are very " +"performance and time hungry operations.\n" +"Navigation mesh baking happens in multiple steps and the result depends on " +"3D source geometry and properties of the [NavigationMesh] resource. In the " +"first step, starting from a root node and depending on [NavigationMesh] " +"properties all valid 3D source geometry nodes are collected from the " +"[SceneTree]. Second, all collected nodes are parsed for their relevant 3D " +"geometry data and a combined 3D mesh is build. Due to the many different " +"types of parsable objects, from normal [MeshInstance]s to [CSGShape]s or " +"various [CollisionObject]s, some operations to collect geometry data can " +"trigger [VisualServer] and [PhysicsServer] synchronizations. Server " +"synchronization can have a negative effect on baking time or framerate as it " +"often involves [Mutex] locking for thread security. Many parsable objects " +"and the continuous synchronization with other threaded Servers can increase " +"the baking time significantly. On the other hand only a few but very large " +"and complex objects will take some time to prepare for the Servers which can " +"noticeably stall the next frame render. As a general rule the total amount " +"of parsable objects and their individual size and complexity should be " +"balanced to avoid framerate issues or very long baking times. The combined " +"mesh is then passed to the Recast Navigation Object to test the source " +"geometry for walkable terrain suitable to [NavigationMesh] agent properties " +"by creating a voxel world around the meshes bounding area.\n" +"The finalized navigation mesh is then returned and stored inside the " +"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes." +msgstr "" + +#: doc/classes/NavigationMeshGenerator.xml +msgid "" +"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " +"nodes under the provided [code]root_node[/code] or a specific group of nodes " +"for potential source geometry. The parse behavior can be controlled with the " +"[member NavigationMesh.geometry/parsed_geometry_type] and [member " +"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[NavigationMesh] resource." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "Clears the navigation mesh." +msgid "" +"Removes all polygons and vertices from the provided [code]nav_mesh[/code] " +"resource." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -35838,7 +35969,10 @@ msgid "" "thread is useful because navigation baking is not a cheap operation. When it " "is completed, it automatically sets the new [NavigationMesh]. Please note " "that baking on separate thread may be very slow if geometry is parsed from " -"meshes as async access to each mesh involves heavy synchronization." +"meshes as async access to each mesh involves heavy synchronization. Also, " +"please note that baking on a separate thread is automatically disabled on " +"operating systems that cannot use threads (such as HTML5 with threads " +"disabled)." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -35884,6 +36018,10 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle.xml +msgid "Returns the [RID] of this obstacle on the [NavigationServer]." +msgstr "" + +#: doc/classes/NavigationObstacle.xml msgid "" "Sets the [Navigation] node used by the obstacle. Useful when you don't want " "to make the obstacle a child of a [Navigation] node." @@ -35920,6 +36058,10 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle2D.xml +msgid "Returns the [RID] of this obstacle on the [Navigation2DServer]." +msgstr "" + +#: doc/classes/NavigationObstacle2D.xml msgid "" "Sets the [Navigation2D] node used by the obstacle. Useful when you don't " "want to make the obstacle a child of a [Navigation2D] node." @@ -37104,7 +37246,7 @@ msgstr "" #: doc/classes/Node.xml msgid "" "Returns [code]true[/code] if the physics interpolated flag is set for this " -"Node (see [method set_physics_interpolated]).\n" +"Node (see [member physics_interpolation_mode]).\n" "[b]Note:[/b] Interpolation will only be active is both the flag is set " "[b]and[/b] physics interpolation is enabled within the [SceneTree]. This can " "be tested using [method is_physics_interpolated_and_enabled]." @@ -37112,8 +37254,8 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Returns [code]true[/code] if physics interpolation is enabled (see [method " -"set_physics_interpolated]) [b]and[/b] enabled in the [SceneTree].\n" +"Returns [code]true[/code] if physics interpolation is enabled (see [member " +"physics_interpolation_mode]) [b]and[/b] enabled in the [SceneTree].\n" "This is a convenience version of [method is_physics_interpolated] that also " "checks whether physics interpolation is enabled globally.\n" "See [member SceneTree.physics_interpolation] and [member ProjectSettings." @@ -37407,14 +37549,6 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Enables or disables physics interpolation per node, offering a finer grain " -"of control than turning physics interpolation on and off globally.\n" -"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " -"interpolation can sometimes give superior results." -msgstr "" - -#: doc/classes/Node.xml -msgid "" "Enables or disables physics (i.e. fixed framerate) processing. When a node " "is being processed, it will receive a [constant " "NOTIFICATION_PHYSICS_PROCESS] at a fixed (usually 60 FPS, see [member Engine." @@ -37547,6 +37681,15 @@ msgstr "" #: doc/classes/Node.xml msgid "" +"Allows enabling or disabling physics interpolation per node, offering a " +"finer grain of control than turning physics interpolation on and off " +"globally.\n" +"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " +"interpolation can sometimes give superior results." +msgstr "" + +#: doc/classes/Node.xml +msgid "" "The node's priority in the execution order of the enabled processing " "callbacks (i.e. [constant NOTIFICATION_PROCESS], [constant " "NOTIFICATION_PHYSICS_PROCESS] and their internal counterparts). Nodes whose " @@ -37708,6 +37851,24 @@ msgid "Continue to process regardless of the [SceneTree] pause state." msgstr "" #: doc/classes/Node.xml +msgid "" +"Inherits physics interpolation mode from the node's parent. For the root " +"node, it is equivalent to [constant PHYSICS_INTERPOLATION_MODE_ON]. Default." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn off physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn on physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml msgid "Duplicate the node's signals." msgstr "" @@ -38948,7 +39109,7 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" -"Returns the ID of the selected item, or [code]0[/code] if no item is " +"Returns the ID of the selected item, or [code]-1[/code] if no item is " "selected." msgstr "" @@ -38970,7 +39131,8 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" "Selects an item by index and makes it the current item. This will work even " -"if the item is disabled." +"if the item is disabled.\n" +"Passing [code]-1[/code] as the index deselects any currently selected item." msgstr "" #: doc/classes/OptionButton.xml @@ -44297,6 +44459,15 @@ msgid "" "should always be preferred." msgstr "" +#: doc/classes/PoolByteArray.xml doc/classes/PoolColorArray.xml +#: doc/classes/PoolIntArray.xml doc/classes/PoolRealArray.xml +#: doc/classes/PoolStringArray.xml doc/classes/PoolVector2Array.xml +#: doc/classes/PoolVector3Array.xml +msgid "" +"Returns [code]true[/code] if the array contains the given value.\n" +"[b]Note:[/b] This is equivalent to using the [code]in[/code] operator." +msgstr "" + #: doc/classes/PoolByteArray.xml msgid "" "Returns a hexadecimal representation of this array as a [String].\n" @@ -45090,6 +45261,10 @@ msgid "[Font] used for the menu items." msgstr "" #: doc/classes/PopupMenu.xml +msgid "[Font] used for the labeled separator." +msgstr "" + +#: doc/classes/PopupMenu.xml msgid "[Texture] icon for the checked checkbox items." msgstr "" @@ -48535,19 +48710,6 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used easing from [enum Tween.EaseType]. If not set, the " -"default easing is used from the [Tween] that contains this Tweener." -msgstr "" - -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used transition from [enum Tween.TransitionType]. If not " -"set, the default transition is used from the [Tween] that contains this " -"Tweener." -msgstr "" - #: doc/classes/ProximityGroup.xml msgid "General-purpose 3D proximity detection node." msgstr "" @@ -53377,8 +53539,15 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape touches another. If there are " -"no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape touches another.\n" +"If there are no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the shape to check collisions with " "([code]with_shape[/code]), and the transformation matrix of that shape " @@ -53399,8 +53568,16 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape would touch another, if a " -"given movement was applied. If there are no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape would touch another, " +"if a given movement was applied.\n" +"If there would be no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the movement to test on this shape " "([code]local_motion[/code]), the shape to check collisions with " diff --git a/doc/translations/ru.po b/doc/translations/ru.po index 2f27837f28..8add961f54 100644 --- a/doc/translations/ru.po +++ b/doc/translations/ru.po @@ -1531,12 +1531,14 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml +#, fuzzy msgid "" -"Random range, any floating point value between [code]from[/code] and " -"[code]to[/code].\n" +"Returns a random floating point value between [code]from[/code] and " +"[code]to[/code] (both endpoints inclusive).\n" "[codeblock]\n" "prints(rand_range(0, 1), rand_range(0, 1)) # Prints e.g. 0.135591 0.405263\n" -"[/codeblock]" +"[/codeblock]\n" +"[b]Note:[/b] This is equivalent to [code]randf() * (to - from) + from[/code]." msgstr "" "Случайное значение Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ запÑтой между [code]from[/code] и [code]to[/" "code].\n" @@ -1612,37 +1614,36 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Returns an array with the given range. Range can be 1 argument [code]N[/" -"code] (0 to [code]N[/code] - 1), two arguments ([code]initial[/code], " -"[code]final - 1[/code]) or three arguments ([code]initial[/code], " -"[code]final - 1[/code], [code]increment[/code]). Returns an empty array if " -"the range isn't valid (e.g. [code]range(2, 5, -1)[/code] or [code]range(5, " -"5, 1)[/code]).\n" -"Returns an array with the given range. [code]range()[/code] can have 1 " -"argument N ([code]0[/code] to [code]N - 1[/code]), two arguments " -"([code]initial[/code], [code]final - 1[/code]) or three arguments " -"([code]initial[/code], [code]final - 1[/code], [code]increment[/code]). " -"[code]increment[/code] can be negative. If [code]increment[/code] is " -"negative, [code]final - 1[/code] will become [code]final + 1[/code]. Also, " -"the initial value must be greater than the final value for the loop to run.\n" -"[codeblock]\n" -"print(range(4))\n" -"print(range(2, 5))\n" -"print(range(0, 6, 2))\n" -"[/codeblock]\n" -"Output:\n" +"Returns an array with the given range. [method range] can be called in three " +"ways:\n" +"[code]range(n: int)[/code]: Starts from 0, increases by steps of 1, and " +"stops [i]before[/i] [code]n[/code]. The argument [code]n[/code] is " +"[b]exclusive[/b].\n" +"[code]range(b: int, n: int)[/code]: Starts from [code]b[/code], increases by " +"steps of 1, and stops [i]before[/i] [code]n[/code]. The arguments [code]b[/" +"code] and [code]n[/code] are [b]inclusive[/b] and [b]exclusive[/b], " +"respectively.\n" +"[code]range(b: int, n: int, s: int)[/code]: Starts from [code]b[/code], " +"increases/decreases by steps of [code]s[/code], and stops [i]before[/i] " +"[code]n[/code]. The arguments [code]b[/code] and [code]n[/code] are " +"[b]inclusive[/b] and [b]exclusive[/b], respectively. The argument [code]s[/" +"code] [b]can[/b] be negative, but not [code]0[/code]. If [code]s[/code] is " +"[code]0[/code], an error message is printed.\n" +"[method range] converts all arguments to [int] before processing.\n" +"[b]Note:[/b] Returns an empty array if no value meets the value constraint " +"(e.g. [code]range(2, 5, -1)[/code] or [code]range(5, 5, 1)[/code]).\n" +"Examples:\n" "[codeblock]\n" -"[0, 1, 2, 3]\n" -"[2, 3, 4]\n" -"[0, 2, 4]\n" +"print(range(4)) # Prints [0, 1, 2, 3]\n" +"print(range(2, 5)) # Prints [2, 3, 4]\n" +"print(range(0, 6, 2)) # Prints [0, 2, 4]\n" +"print(range(4, 1, -1)) # Prints [4, 3, 2]\n" "[/codeblock]\n" "To iterate over an [Array] backwards, use:\n" "[codeblock]\n" "var array = [3, 6, 9]\n" -"var i := array.size() - 1\n" -"while i >= 0:\n" -" print(array[i])\n" -" i -= 1\n" +"for i in range(array.size(), 0, -1):\n" +" print(array[i - 1])\n" "[/codeblock]\n" "Output:\n" "[codeblock]\n" @@ -1651,45 +1652,6 @@ msgid "" "3\n" "[/codeblock]" msgstr "" -"Возвращает маÑÑив Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¼ диапазоном. Диапазон может быть одним " -"аргументом [code]N[/code] (от [code]0[code] до [code]N - 1[/code]), Ð´Ð²ÑƒÐ¼Ñ " -"аргументами ([code]начальное[/code], [code]поÑледнее - 1[/code]) или Ñ‚Ñ€ÐµÐ¼Ñ " -"аргументами ([code]начальное[/code], [code]поÑледнее - 1[/code], [code]шаг[/" -"code]). ЕÑли диапазон не допуÑтим, возвращает пуÑтой маÑÑив (например " -"[code]range(2, 5, -1)[/code] или [code]range(5, 5, 1)[/code]).\n" -"Возвращает маÑÑив Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¼ диапазоном. Диапазон [code]range()[/code] может " -"быть одним аргументом [code]N[/code] (от [code]0[code] до [code]N - 1[/" -"code]), Ð´Ð²ÑƒÐ¼Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð°Ð¼Ð¸ ([code]начальное[/code], [code]поÑледнее - 1[/" -"code]) или Ñ‚Ñ€ÐµÐ¼Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð°Ð¼Ð¸ ([code]начальное[/code], [code]поÑледнее - 1[/" -"code], [code]шаг[/code]). [code]Шаг[/code] может быть отрицательным. ЕÑли " -"[code]шаг[/code] отрицателен, [code]поÑледний - 1[/code] Ñтанет " -"[code]поÑледний + 1[/code]. Также, чтобы цикл запуÑтилÑÑ, начальное значение " -"должно быть больше поÑледнего.\n" -"[codeblock]\n" -"print(range(4))\n" -"print(range(2, 5))\n" -"print(range(0, 6, 2))\n" -"[/codeblock]\n" -"Вывод:\n" -"[codeblock]\n" -"[0, 1, 2, 3]\n" -"[2, 3, 4]\n" -"[0, 2, 4]\n" -"[/codeblock]\n" -"Ð”Ð»Ñ Ð¿ÐµÑ€ÐµÐ±Ð¾Ñ€Ð° маÑÑива [Array] в обратном порÑдке, иÑпользуйте:\n" -"[codeblock]\n" -"var array = [3, 6, 9]\n" -"var i := array.size() - 1\n" -"while i >= 0:\n" -" print(array[i])\n" -" i -= 1\n" -"[/codeblock]\n" -"Вывод:\n" -"[codeblock]\n" -"9\n" -"6\n" -"3\n" -"[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" @@ -5411,18 +5373,27 @@ msgid "Maximum value for the mode enum." msgstr "МакÑимальное значение Ð´Ð»Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° перечиÑлениÑ." #: doc/classes/AnimatedSprite.xml -msgid "Sprite node that can use multiple textures for animation." +#, fuzzy +msgid "" +"Sprite node that contains multiple textures as frames to play for animation." msgstr "" "Узел Sprite, который может иÑпользовать неÑколько текÑтур Ð´Ð»Ñ Ð°Ð½Ð¸Ð¼Ð°Ñ†Ð¸Ð¸." #: doc/classes/AnimatedSprite.xml +#, fuzzy msgid "" -"Animations are created using a [SpriteFrames] resource, which can be " -"configured in the editor via the SpriteFrames panel.\n" -"[b]Note:[/b] You can associate a set of normal maps by creating additional " -"[SpriteFrames] resources with a [code]_normal[/code] suffix. For example, " -"having 2 [SpriteFrames] resources [code]run[/code] and [code]run_normal[/" -"code] will make it so the [code]run[/code] animation uses the normal map." +"[AnimatedSprite] is similar to the [Sprite] node, except it carries multiple " +"textures as animation frames. Animations are created using a [SpriteFrames] " +"resource, which allows you to import image files (or a folder containing " +"said files) to provide the animation frames for the sprite. The " +"[SpriteFrames] resource can be configured in the editor via the SpriteFrames " +"bottom panel.\n" +"[b]Note:[/b] You can associate a set of normal or specular maps by creating " +"additional [SpriteFrames] resources with a [code]_normal[/code] or " +"[code]_specular[/code] suffix. For example, having 3 [SpriteFrames] " +"resources [code]run[/code], [code]run_normal[/code], and [code]run_specular[/" +"code] will make it so the [code]run[/code] animation uses normal and " +"specular maps." msgstr "" "ÐÐ½Ð¸Ð¼Ð°Ñ†Ð¸Ñ ÑоздаетÑÑ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ реÑурÑа [SpriteFrames], который можно наÑтроить " "в редакторе Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ панели SpriteFrames.\n" @@ -5460,9 +5431,10 @@ msgstr "" msgid "Stops the current animation (does not reset the frame counter)." msgstr "ОÑтанавливает текущую анимацию (не ÑбраÑывает Ñчётчик кадров)." -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml +#: doc/classes/AnimatedSprite.xml +#, fuzzy msgid "" -"The current animation from the [code]frames[/code] resource. If this value " +"The current animation from the [member frames] resource. If this value " "changes, the [code]frame[/code] counter is reset." msgstr "" "Ð¢ÐµÐºÑƒÑ‰Ð°Ñ Ð°Ð½Ð¸Ð¼Ð°Ñ†Ð¸Ñ Ð¸Ð· реÑурÑа [code]frames[/code]. ЕÑли изменить Ñто значение, " @@ -5488,9 +5460,12 @@ msgstr "ЕÑли [code]true[/code], текÑтура отражена по Ð²ÐµÑ msgid "The displayed animation frame's index." msgstr "Ð˜Ð½Ð´ÐµÐºÑ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶Ð°ÐµÐ¼Ð¾Ð³Ð¾ кадра анимации." -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml -msgid "The [SpriteFrames] resource containing the animation(s)." -msgstr "РеÑÑƒÑ€Ñ [SpriteFrames], Ñодержащий анимацию(Ñ‹)." +#: doc/classes/AnimatedSprite.xml +msgid "" +"The [SpriteFrames] resource containing the animation(s). Allows you the " +"option to load, edit, clear, make unique and save the states of the " +"[SpriteFrames] resource." +msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/Sprite.xml #: doc/classes/SpriteBase3D.xml @@ -5553,6 +5528,18 @@ msgstr "" "ВоÑпроизводит анимацию Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ [code]anim[/code]. ЕÑли [code]anim[/code] не " "указан, воÑпроизводитÑÑ Ñ‚ÐµÐºÑƒÑ‰Ð°Ñ Ð°Ð½Ð¸Ð¼Ð°Ñ†Ð¸Ñ." +#: doc/classes/AnimatedSprite3D.xml +msgid "" +"The current animation from the [code]frames[/code] resource. If this value " +"changes, the [code]frame[/code] counter is reset." +msgstr "" +"Ð¢ÐµÐºÑƒÑ‰Ð°Ñ Ð°Ð½Ð¸Ð¼Ð°Ñ†Ð¸Ñ Ð¸Ð· реÑурÑа [code]frames[/code]. ЕÑли изменить Ñто значение, " +"Ñчетчик кадров [code]frame[/code] ÑбраÑываетÑÑ." + +#: doc/classes/AnimatedSprite3D.xml +msgid "The [SpriteFrames] resource containing the animation(s)." +msgstr "РеÑÑƒÑ€Ñ [SpriteFrames], Ñодержащий анимацию(Ñ‹)." + #: doc/classes/AnimatedTexture.xml msgid "Proxy texture for simple frame-based animations." msgstr "ПрокÑи-текÑтура Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñтых покадровых анимаций." @@ -6186,11 +6173,11 @@ msgstr "" msgid "No interpolation (nearest value)." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Linear interpolation." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Cubic interpolation." msgstr "" @@ -7272,7 +7259,10 @@ msgid "" "Seeks the animation to the [code]seconds[/code] point in time (in seconds). " "If [code]update[/code] is [code]true[/code], the animation updates too, " "otherwise it updates at process time. Events between the current frame and " -"[code]seconds[/code] are skipped." +"[code]seconds[/code] are skipped.\n" +"[b]Note:[/b] Seeking to the end of the animation doesn't emit [signal " +"animation_finished]. If you want to skip animation and emit the signal, use " +"[method advance]." msgstr "" #: doc/classes/AnimationPlayer.xml @@ -8535,7 +8525,10 @@ msgstr "" "Очищает маÑÑив. Ðто Ñквивалентно иÑпользованию [method resize] Ñ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð¾Ð¼ " "[code]0[/code]." -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "Returns the number of times an element is in the array." msgstr "Возвращает количеÑтво раз когда Ñлемент вÑтречаетÑÑ Ð² маÑÑиве." @@ -8587,10 +8580,15 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml +#, fuzzy msgid "" "Searches the array for a value and returns its index or [code]-1[/code] if " -"not found. Optionally, the initial search index can be passed." +"not found. Optionally, the initial search index can be passed. Returns " +"[code]-1[/code] if [code]from[/code] is out of bounds." msgstr "" "ОÑущеÑтвлÑет поиÑк Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð² маÑÑиве и возвращает Ð¸Ð½Ð´ÐµÐºÑ Ñлемента или " "[code]-1[/code] еÑли он не был найден. Дополнительно, может быть передан " @@ -8760,11 +8758,16 @@ msgstr "" "размер маÑÑива уменьшен, Ñлементы будут очищены, еÑли больший, новые " "Ñлементы уÑтановÑÑ‚ÑÑ Ð² [code]null[/code]." -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml +#, fuzzy msgid "" "Searches the array in reverse order. Optionally, a start search index can be " "passed. If negative, the start index is considered relative to the end of " -"the array." +"the array. If the adjusted start index is out of bounds, this method " +"searches from the end of the array." msgstr "" "ОÑущеÑтвлÑет поиÑк Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾ маÑÑиву в обратном порÑдке. Дополнительно, " "может быть передан начальный Ð¸Ð½Ð´ÐµÐºÑ Ð¿Ð¾Ð¸Ñка. ЕÑли он будет отрицательный " @@ -9941,7 +9944,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -10163,7 +10166,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -13298,17 +13301,17 @@ msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a normal vector in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a 3D position in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml @@ -15585,7 +15588,9 @@ msgstr "" #: doc/classes/CollisionPolygon2D.xml msgid "" "If [code]true[/code], only edges that face up, relative to " -"[CollisionPolygon2D]'s rotation, will collide with other objects." +"[CollisionPolygon2D]'s rotation, will collide with other objects.\n" +"[b]Note:[/b] This property has no effect if this [CollisionPolygon2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionPolygon2D.xml @@ -15681,7 +15686,9 @@ msgstr "" #: doc/classes/CollisionShape2D.xml msgid "" "Sets whether this collision shape should only detect collision on one side " -"(top or bottom)." +"(top or bottom).\n" +"[b]Note:[/b] This property has no effect if this [CollisionShape2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionShape2D.xml @@ -24222,6 +24229,11 @@ msgid "" "same behavior." msgstr "" +#: doc/classes/EditorSpinSlider.xml +#, fuzzy +msgid "If [code]true[/code], the slider is hidden." +msgstr "ЕÑли [code]true[/code], текÑтура будет центрирована." + #: doc/classes/EditorVCSInterface.xml msgid "" "Version Control System (VCS) interface, which reads and writes to the local " @@ -27821,9 +27833,22 @@ msgid "Gradient's colors returned as a [PoolColorArray]." msgstr "" #: doc/classes/Gradient.xml +msgid "" +"Defines how the colors between points of the gradient are interpolated. See " +"[enum InterpolationMode] for available modes." +msgstr "" + +#: doc/classes/Gradient.xml msgid "Gradient's offsets returned as a [PoolRealArray]." msgstr "" +#: doc/classes/Gradient.xml +msgid "" +"Constant interpolation, color changes abruptly at each point and stays " +"uniform between. This might cause visible aliasing when used for a gradient " +"texture in some cases." +msgstr "" + #: doc/classes/GradientTexture.xml msgid "Gradient-filled texture." msgstr "" @@ -36399,13 +36424,13 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used easing from [enum Tween.EaseType]. If not set, the " "default easing is used from the [SceneTreeTween] that contains this Tweener." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used transition from [enum Tween.TransitionType]. If not " "set, the default transition is used from the [SceneTreeTween] that contains " @@ -37119,6 +37144,12 @@ msgid "Creates the agent." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]agent[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "Возвращает [code]true[/code] еÑли маÑÑив пуÑтой." @@ -37189,6 +37220,12 @@ msgid "Create a new map." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation agents [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns the map cell size." msgstr "Возвращает значение задержки данного кадра." @@ -37219,6 +37256,12 @@ msgid "Returns the navigation path to reach the destination from the origin." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation regions [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns [code]true[/code] if the map is active." msgstr "Возвращает [code]true[/code] еÑли маÑÑив пуÑтой." @@ -37242,6 +37285,12 @@ msgid "Creates a new region." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]region[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Sets the map for the region." msgstr "Возвращает ÑÐ¸Ð½ÑƒÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°." @@ -37728,19 +37777,60 @@ msgid "Represents the size of the [enum SourceGeometryMode] enum." msgstr "ПредÑтавлÑет размер перечиÑÐ»ÐµÐ½Ð¸Ñ [enum Variant.Type]." #: doc/classes/NavigationMeshGenerator.xml -msgid "This class is responsible for creating and clearing navigation meshes." +msgid "Helper class for creating and clearing navigation meshes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml msgid "" -"Bakes the navigation mesh. This will allow you to use pathfinding with the " -"navigation system." +"This class is responsible for creating and clearing 3D navigation meshes " +"used as [NavigationMesh] resources inside [NavigationMeshInstance]. The " +"[NavigationMeshGenerator] has very limited to no use for 2D as the " +"navigation mesh baking process expects 3D node types and 3D source geometry " +"to parse.\n" +"The entire navigation mesh baking is best done in a separate thread as the " +"voxelization, collision tests and mesh optimization steps involved are very " +"performance and time hungry operations.\n" +"Navigation mesh baking happens in multiple steps and the result depends on " +"3D source geometry and properties of the [NavigationMesh] resource. In the " +"first step, starting from a root node and depending on [NavigationMesh] " +"properties all valid 3D source geometry nodes are collected from the " +"[SceneTree]. Second, all collected nodes are parsed for their relevant 3D " +"geometry data and a combined 3D mesh is build. Due to the many different " +"types of parsable objects, from normal [MeshInstance]s to [CSGShape]s or " +"various [CollisionObject]s, some operations to collect geometry data can " +"trigger [VisualServer] and [PhysicsServer] synchronizations. Server " +"synchronization can have a negative effect on baking time or framerate as it " +"often involves [Mutex] locking for thread security. Many parsable objects " +"and the continuous synchronization with other threaded Servers can increase " +"the baking time significantly. On the other hand only a few but very large " +"and complex objects will take some time to prepare for the Servers which can " +"noticeably stall the next frame render. As a general rule the total amount " +"of parsable objects and their individual size and complexity should be " +"balanced to avoid framerate issues or very long baking times. The combined " +"mesh is then passed to the Recast Navigation Object to test the source " +"geometry for walkable terrain suitable to [NavigationMesh] agent properties " +"by creating a voxel world around the meshes bounding area.\n" +"The finalized navigation mesh is then returned and stored inside the " +"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "Clears the navigation mesh." +msgid "" +"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " +"nodes under the provided [code]root_node[/code] or a specific group of nodes " +"for potential source geometry. The parse behavior can be controlled with the " +"[member NavigationMesh.geometry/parsed_geometry_type] and [member " +"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[NavigationMesh] resource." msgstr "" +#: doc/classes/NavigationMeshGenerator.xml +#, fuzzy +msgid "" +"Removes all polygons and vertices from the provided [code]nav_mesh[/code] " +"resource." +msgstr "Возвращает ÑкалÑрное произведение Ñ Ð²ÐµÐºÑ‚Ð¾Ñ€Ð¾Ð¼ [code]b[/code]." + #: doc/classes/NavigationMeshInstance.xml msgid "An instance of a [NavigationMesh]." msgstr "" @@ -37759,7 +37849,10 @@ msgid "" "thread is useful because navigation baking is not a cheap operation. When it " "is completed, it automatically sets the new [NavigationMesh]. Please note " "that baking on separate thread may be very slow if geometry is parsed from " -"meshes as async access to each mesh involves heavy synchronization." +"meshes as async access to each mesh involves heavy synchronization. Also, " +"please note that baking on a separate thread is automatically disabled on " +"operating systems that cannot use threads (such as HTML5 with threads " +"disabled)." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -37806,6 +37899,11 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle.xml +#, fuzzy +msgid "Returns the [RID] of this obstacle on the [NavigationServer]." +msgstr "Возвращает количеÑтво дорожек в анимации." + +#: doc/classes/NavigationObstacle.xml msgid "" "Sets the [Navigation] node used by the obstacle. Useful when you don't want " "to make the obstacle a child of a [Navigation] node." @@ -37842,6 +37940,11 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle2D.xml +#, fuzzy +msgid "Returns the [RID] of this obstacle on the [Navigation2DServer]." +msgstr "Возвращает количеÑтво дорожек в анимации." + +#: doc/classes/NavigationObstacle2D.xml msgid "" "Sets the [Navigation2D] node used by the obstacle. Useful when you don't " "want to make the obstacle a child of a [Navigation2D] node." @@ -39113,7 +39216,7 @@ msgstr "" #: doc/classes/Node.xml msgid "" "Returns [code]true[/code] if the physics interpolated flag is set for this " -"Node (see [method set_physics_interpolated]).\n" +"Node (see [member physics_interpolation_mode]).\n" "[b]Note:[/b] Interpolation will only be active is both the flag is set " "[b]and[/b] physics interpolation is enabled within the [SceneTree]. This can " "be tested using [method is_physics_interpolated_and_enabled]." @@ -39121,8 +39224,8 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Returns [code]true[/code] if physics interpolation is enabled (see [method " -"set_physics_interpolated]) [b]and[/b] enabled in the [SceneTree].\n" +"Returns [code]true[/code] if physics interpolation is enabled (see [member " +"physics_interpolation_mode]) [b]and[/b] enabled in the [SceneTree].\n" "This is a convenience version of [method is_physics_interpolated] that also " "checks whether physics interpolation is enabled globally.\n" "See [member SceneTree.physics_interpolation] and [member ProjectSettings." @@ -39416,14 +39519,6 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Enables or disables physics interpolation per node, offering a finer grain " -"of control than turning physics interpolation on and off globally.\n" -"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " -"interpolation can sometimes give superior results." -msgstr "" - -#: doc/classes/Node.xml -msgid "" "Enables or disables physics (i.e. fixed framerate) processing. When a node " "is being processed, it will receive a [constant " "NOTIFICATION_PHYSICS_PROCESS] at a fixed (usually 60 FPS, see [member Engine." @@ -39556,6 +39651,15 @@ msgstr "" #: doc/classes/Node.xml msgid "" +"Allows enabling or disabling physics interpolation per node, offering a " +"finer grain of control than turning physics interpolation on and off " +"globally.\n" +"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " +"interpolation can sometimes give superior results." +msgstr "" + +#: doc/classes/Node.xml +msgid "" "The node's priority in the execution order of the enabled processing " "callbacks (i.e. [constant NOTIFICATION_PROCESS], [constant " "NOTIFICATION_PHYSICS_PROCESS] and their internal counterparts). Nodes whose " @@ -39717,6 +39821,24 @@ msgid "Continue to process regardless of the [SceneTree] pause state." msgstr "" #: doc/classes/Node.xml +msgid "" +"Inherits physics interpolation mode from the node's parent. For the root " +"node, it is equivalent to [constant PHYSICS_INTERPOLATION_MODE_ON]. Default." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn off physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn on physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml msgid "Duplicate the node's signals." msgstr "" @@ -40962,10 +41084,13 @@ msgid "Returns the tooltip of the item at index [code]idx[/code]." msgstr "Возвращает ÑкалÑрное произведение Ñ Ð²ÐµÐºÑ‚Ð¾Ñ€Ð¾Ð¼ [code]b[/code]." #: doc/classes/OptionButton.xml +#, fuzzy msgid "" -"Returns the ID of the selected item, or [code]0[/code] if no item is " +"Returns the ID of the selected item, or [code]-1[/code] if no item is " "selected." msgstr "" +"УдалÑет и возвращает первый Ñлемент маÑÑива. Возвращает [code]null[/code] " +"еÑли маÑÑив пуÑтой." #: doc/classes/OptionButton.xml msgid "" @@ -40985,7 +41110,8 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" "Selects an item by index and makes it the current item. This will work even " -"if the item is disabled." +"if the item is disabled.\n" +"Passing [code]-1[/code] as the index deselects any currently selected item." msgstr "" #: doc/classes/OptionButton.xml @@ -46367,6 +46493,18 @@ msgid "" "should always be preferred." msgstr "" +#: doc/classes/PoolByteArray.xml doc/classes/PoolColorArray.xml +#: doc/classes/PoolIntArray.xml doc/classes/PoolRealArray.xml +#: doc/classes/PoolStringArray.xml doc/classes/PoolVector2Array.xml +#: doc/classes/PoolVector3Array.xml +#, fuzzy +msgid "" +"Returns [code]true[/code] if the array contains the given value.\n" +"[b]Note:[/b] This is equivalent to using the [code]in[/code] operator." +msgstr "" +"Возвращает [code]true[/code] еÑли [code]a[/code] и [code]b[/code] " +"приблизительно равны друг другу." + #: doc/classes/PoolByteArray.xml msgid "" "Returns a hexadecimal representation of this array as a [String].\n" @@ -47180,6 +47318,11 @@ msgid "[Font] used for the menu items." msgstr "" #: doc/classes/PopupMenu.xml +#, fuzzy +msgid "[Font] used for the labeled separator." +msgstr "Ðет подÑказки Ð´Ð»Ñ Ð¾Ñ‚Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð¾Ð³Ð¾ ÑвойÑтва." + +#: doc/classes/PopupMenu.xml msgid "[Texture] icon for the checked checkbox items." msgstr "" @@ -50639,19 +50782,6 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used easing from [enum Tween.EaseType]. If not set, the " -"default easing is used from the [Tween] that contains this Tweener." -msgstr "" - -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used transition from [enum Tween.TransitionType]. If not " -"set, the default transition is used from the [Tween] that contains this " -"Tweener." -msgstr "" - #: doc/classes/ProximityGroup.xml msgid "General-purpose 3D proximity detection node." msgstr "" @@ -55541,8 +55671,15 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape touches another. If there are " -"no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape touches another.\n" +"If there are no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the shape to check collisions with " "([code]with_shape[/code]), and the transformation matrix of that shape " @@ -55563,8 +55700,16 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape would touch another, if a " -"given movement was applied. If there are no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape would touch another, " +"if a given movement was applied.\n" +"If there would be no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the movement to test on this shape " "([code]local_motion[/code]), the shape to check collisions with " diff --git a/doc/translations/sk.po b/doc/translations/sk.po index 380af3d949..0175bba4cc 100644 --- a/doc/translations/sk.po +++ b/doc/translations/sk.po @@ -935,11 +935,12 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Random range, any floating point value between [code]from[/code] and " -"[code]to[/code].\n" +"Returns a random floating point value between [code]from[/code] and " +"[code]to[/code] (both endpoints inclusive).\n" "[codeblock]\n" "prints(rand_range(0, 1), rand_range(0, 1)) # Prints e.g. 0.135591 0.405263\n" -"[/codeblock]" +"[/codeblock]\n" +"[b]Note:[/b] This is equivalent to [code]randf() * (to - from) + from[/code]." msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml @@ -983,37 +984,36 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Returns an array with the given range. Range can be 1 argument [code]N[/" -"code] (0 to [code]N[/code] - 1), two arguments ([code]initial[/code], " -"[code]final - 1[/code]) or three arguments ([code]initial[/code], " -"[code]final - 1[/code], [code]increment[/code]). Returns an empty array if " -"the range isn't valid (e.g. [code]range(2, 5, -1)[/code] or [code]range(5, " -"5, 1)[/code]).\n" -"Returns an array with the given range. [code]range()[/code] can have 1 " -"argument N ([code]0[/code] to [code]N - 1[/code]), two arguments " -"([code]initial[/code], [code]final - 1[/code]) or three arguments " -"([code]initial[/code], [code]final - 1[/code], [code]increment[/code]). " -"[code]increment[/code] can be negative. If [code]increment[/code] is " -"negative, [code]final - 1[/code] will become [code]final + 1[/code]. Also, " -"the initial value must be greater than the final value for the loop to run.\n" -"[codeblock]\n" -"print(range(4))\n" -"print(range(2, 5))\n" -"print(range(0, 6, 2))\n" -"[/codeblock]\n" -"Output:\n" +"Returns an array with the given range. [method range] can be called in three " +"ways:\n" +"[code]range(n: int)[/code]: Starts from 0, increases by steps of 1, and " +"stops [i]before[/i] [code]n[/code]. The argument [code]n[/code] is " +"[b]exclusive[/b].\n" +"[code]range(b: int, n: int)[/code]: Starts from [code]b[/code], increases by " +"steps of 1, and stops [i]before[/i] [code]n[/code]. The arguments [code]b[/" +"code] and [code]n[/code] are [b]inclusive[/b] and [b]exclusive[/b], " +"respectively.\n" +"[code]range(b: int, n: int, s: int)[/code]: Starts from [code]b[/code], " +"increases/decreases by steps of [code]s[/code], and stops [i]before[/i] " +"[code]n[/code]. The arguments [code]b[/code] and [code]n[/code] are " +"[b]inclusive[/b] and [b]exclusive[/b], respectively. The argument [code]s[/" +"code] [b]can[/b] be negative, but not [code]0[/code]. If [code]s[/code] is " +"[code]0[/code], an error message is printed.\n" +"[method range] converts all arguments to [int] before processing.\n" +"[b]Note:[/b] Returns an empty array if no value meets the value constraint " +"(e.g. [code]range(2, 5, -1)[/code] or [code]range(5, 5, 1)[/code]).\n" +"Examples:\n" "[codeblock]\n" -"[0, 1, 2, 3]\n" -"[2, 3, 4]\n" -"[0, 2, 4]\n" +"print(range(4)) # Prints [0, 1, 2, 3]\n" +"print(range(2, 5)) # Prints [2, 3, 4]\n" +"print(range(0, 6, 2)) # Prints [0, 2, 4]\n" +"print(range(4, 1, -1)) # Prints [4, 3, 2]\n" "[/codeblock]\n" "To iterate over an [Array] backwards, use:\n" "[codeblock]\n" "var array = [3, 6, 9]\n" -"var i := array.size() - 1\n" -"while i >= 0:\n" -" print(array[i])\n" -" i -= 1\n" +"for i in range(array.size(), 0, -1):\n" +" print(array[i - 1])\n" "[/codeblock]\n" "Output:\n" "[codeblock]\n" @@ -4108,17 +4108,24 @@ msgid "Maximum value for the mode enum." msgstr "" #: doc/classes/AnimatedSprite.xml -msgid "Sprite node that can use multiple textures for animation." +msgid "" +"Sprite node that contains multiple textures as frames to play for animation." msgstr "" #: doc/classes/AnimatedSprite.xml msgid "" -"Animations are created using a [SpriteFrames] resource, which can be " -"configured in the editor via the SpriteFrames panel.\n" -"[b]Note:[/b] You can associate a set of normal maps by creating additional " -"[SpriteFrames] resources with a [code]_normal[/code] suffix. For example, " -"having 2 [SpriteFrames] resources [code]run[/code] and [code]run_normal[/" -"code] will make it so the [code]run[/code] animation uses the normal map." +"[AnimatedSprite] is similar to the [Sprite] node, except it carries multiple " +"textures as animation frames. Animations are created using a [SpriteFrames] " +"resource, which allows you to import image files (or a folder containing " +"said files) to provide the animation frames for the sprite. The " +"[SpriteFrames] resource can be configured in the editor via the SpriteFrames " +"bottom panel.\n" +"[b]Note:[/b] You can associate a set of normal or specular maps by creating " +"additional [SpriteFrames] resources with a [code]_normal[/code] or " +"[code]_specular[/code] suffix. For example, having 3 [SpriteFrames] " +"resources [code]run[/code], [code]run_normal[/code], and [code]run_specular[/" +"code] will make it so the [code]run[/code] animation uses normal and " +"specular maps." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml @@ -4146,9 +4153,9 @@ msgstr "" msgid "Stops the current animation (does not reset the frame counter)." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml +#: doc/classes/AnimatedSprite.xml msgid "" -"The current animation from the [code]frames[/code] resource. If this value " +"The current animation from the [member frames] resource. If this value " "changes, the [code]frame[/code] counter is reset." msgstr "" @@ -4172,8 +4179,11 @@ msgstr "" msgid "The displayed animation frame's index." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml -msgid "The [SpriteFrames] resource containing the animation(s)." +#: doc/classes/AnimatedSprite.xml +msgid "" +"The [SpriteFrames] resource containing the animation(s). Allows you the " +"option to load, edit, clear, make unique and save the states of the " +"[SpriteFrames] resource." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/Sprite.xml @@ -4225,6 +4235,16 @@ msgid "" "provided, the current animation is played." msgstr "" +#: doc/classes/AnimatedSprite3D.xml +msgid "" +"The current animation from the [code]frames[/code] resource. If this value " +"changes, the [code]frame[/code] counter is reset." +msgstr "" + +#: doc/classes/AnimatedSprite3D.xml +msgid "The [SpriteFrames] resource containing the animation(s)." +msgstr "" + #: doc/classes/AnimatedTexture.xml msgid "Proxy texture for simple frame-based animations." msgstr "" @@ -4740,11 +4760,11 @@ msgstr "" msgid "No interpolation (nearest value)." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Linear interpolation." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Cubic interpolation." msgstr "" @@ -5779,7 +5799,10 @@ msgid "" "Seeks the animation to the [code]seconds[/code] point in time (in seconds). " "If [code]update[/code] is [code]true[/code], the animation updates too, " "otherwise it updates at process time. Events between the current frame and " -"[code]seconds[/code] are skipped." +"[code]seconds[/code] are skipped.\n" +"[b]Note:[/b] Seeking to the end of the animation doesn't emit [signal " +"animation_finished]. If you want to skip animation and emit the signal, use " +"[method advance]." msgstr "" #: doc/classes/AnimationPlayer.xml @@ -6969,7 +6992,10 @@ msgid "" "[code]0[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "Returns the number of times an element is in the array." msgstr "" @@ -7014,10 +7040,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array for a value and returns its index or [code]-1[/code] if " -"not found. Optionally, the initial search index can be passed." +"not found. Optionally, the initial search index can be passed. Returns " +"[code]-1[/code] if [code]from[/code] is out of bounds." msgstr "" #: doc/classes/Array.xml @@ -7155,11 +7185,15 @@ msgid "" "[code]null[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array in reverse order. Optionally, a start search index can be " "passed. If negative, the start index is considered relative to the end of " -"the array." +"the array. If the adjusted start index is out of bounds, this method " +"searches from the end of the array." msgstr "" #: doc/classes/Array.xml @@ -8294,7 +8328,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -8516,7 +8550,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -11627,17 +11661,17 @@ msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a normal vector in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a 3D position in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml @@ -13886,7 +13920,9 @@ msgstr "" #: doc/classes/CollisionPolygon2D.xml msgid "" "If [code]true[/code], only edges that face up, relative to " -"[CollisionPolygon2D]'s rotation, will collide with other objects." +"[CollisionPolygon2D]'s rotation, will collide with other objects.\n" +"[b]Note:[/b] This property has no effect if this [CollisionPolygon2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionPolygon2D.xml @@ -13982,7 +14018,9 @@ msgstr "" #: doc/classes/CollisionShape2D.xml msgid "" "Sets whether this collision shape should only detect collision on one side " -"(top or bottom)." +"(top or bottom).\n" +"[b]Note:[/b] This property has no effect if this [CollisionShape2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionShape2D.xml @@ -22388,6 +22426,10 @@ msgid "" "same behavior." msgstr "" +#: doc/classes/EditorSpinSlider.xml +msgid "If [code]true[/code], the slider is hidden." +msgstr "" + #: doc/classes/EditorVCSInterface.xml msgid "" "Version Control System (VCS) interface, which reads and writes to the local " @@ -25972,9 +26014,22 @@ msgid "Gradient's colors returned as a [PoolColorArray]." msgstr "" #: doc/classes/Gradient.xml +msgid "" +"Defines how the colors between points of the gradient are interpolated. See " +"[enum InterpolationMode] for available modes." +msgstr "" + +#: doc/classes/Gradient.xml msgid "Gradient's offsets returned as a [PoolRealArray]." msgstr "" +#: doc/classes/Gradient.xml +msgid "" +"Constant interpolation, color changes abruptly at each point and stays " +"uniform between. This might cause visible aliasing when used for a gradient " +"texture in some cases." +msgstr "" + #: doc/classes/GradientTexture.xml msgid "Gradient-filled texture." msgstr "" @@ -34496,13 +34551,13 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used easing from [enum Tween.EaseType]. If not set, the " "default easing is used from the [SceneTreeTween] that contains this Tweener." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used transition from [enum Tween.TransitionType]. If not " "set, the default transition is used from the [SceneTreeTween] that contains " @@ -35208,6 +35263,12 @@ msgid "Creates the agent." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]agent[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" @@ -35271,6 +35332,12 @@ msgid "Create a new map." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation agents [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns the map cell size." msgstr "" @@ -35297,6 +35364,12 @@ msgid "Returns the navigation path to reach the destination from the origin." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation regions [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns [code]true[/code] if the map is active." msgstr "" @@ -35318,6 +35391,12 @@ msgid "Creates a new region." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]region[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the map for the region." msgstr "" @@ -35790,17 +35869,57 @@ msgid "Represents the size of the [enum SourceGeometryMode] enum." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "This class is responsible for creating and clearing navigation meshes." +msgid "Helper class for creating and clearing navigation meshes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml msgid "" -"Bakes the navigation mesh. This will allow you to use pathfinding with the " -"navigation system." +"This class is responsible for creating and clearing 3D navigation meshes " +"used as [NavigationMesh] resources inside [NavigationMeshInstance]. The " +"[NavigationMeshGenerator] has very limited to no use for 2D as the " +"navigation mesh baking process expects 3D node types and 3D source geometry " +"to parse.\n" +"The entire navigation mesh baking is best done in a separate thread as the " +"voxelization, collision tests and mesh optimization steps involved are very " +"performance and time hungry operations.\n" +"Navigation mesh baking happens in multiple steps and the result depends on " +"3D source geometry and properties of the [NavigationMesh] resource. In the " +"first step, starting from a root node and depending on [NavigationMesh] " +"properties all valid 3D source geometry nodes are collected from the " +"[SceneTree]. Second, all collected nodes are parsed for their relevant 3D " +"geometry data and a combined 3D mesh is build. Due to the many different " +"types of parsable objects, from normal [MeshInstance]s to [CSGShape]s or " +"various [CollisionObject]s, some operations to collect geometry data can " +"trigger [VisualServer] and [PhysicsServer] synchronizations. Server " +"synchronization can have a negative effect on baking time or framerate as it " +"often involves [Mutex] locking for thread security. Many parsable objects " +"and the continuous synchronization with other threaded Servers can increase " +"the baking time significantly. On the other hand only a few but very large " +"and complex objects will take some time to prepare for the Servers which can " +"noticeably stall the next frame render. As a general rule the total amount " +"of parsable objects and their individual size and complexity should be " +"balanced to avoid framerate issues or very long baking times. The combined " +"mesh is then passed to the Recast Navigation Object to test the source " +"geometry for walkable terrain suitable to [NavigationMesh] agent properties " +"by creating a voxel world around the meshes bounding area.\n" +"The finalized navigation mesh is then returned and stored inside the " +"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes." +msgstr "" + +#: doc/classes/NavigationMeshGenerator.xml +msgid "" +"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " +"nodes under the provided [code]root_node[/code] or a specific group of nodes " +"for potential source geometry. The parse behavior can be controlled with the " +"[member NavigationMesh.geometry/parsed_geometry_type] and [member " +"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[NavigationMesh] resource." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "Clears the navigation mesh." +msgid "" +"Removes all polygons and vertices from the provided [code]nav_mesh[/code] " +"resource." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -35821,7 +35940,10 @@ msgid "" "thread is useful because navigation baking is not a cheap operation. When it " "is completed, it automatically sets the new [NavigationMesh]. Please note " "that baking on separate thread may be very slow if geometry is parsed from " -"meshes as async access to each mesh involves heavy synchronization." +"meshes as async access to each mesh involves heavy synchronization. Also, " +"please note that baking on a separate thread is automatically disabled on " +"operating systems that cannot use threads (such as HTML5 with threads " +"disabled)." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -35867,6 +35989,10 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle.xml +msgid "Returns the [RID] of this obstacle on the [NavigationServer]." +msgstr "" + +#: doc/classes/NavigationObstacle.xml msgid "" "Sets the [Navigation] node used by the obstacle. Useful when you don't want " "to make the obstacle a child of a [Navigation] node." @@ -35903,6 +36029,10 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle2D.xml +msgid "Returns the [RID] of this obstacle on the [Navigation2DServer]." +msgstr "" + +#: doc/classes/NavigationObstacle2D.xml msgid "" "Sets the [Navigation2D] node used by the obstacle. Useful when you don't " "want to make the obstacle a child of a [Navigation2D] node." @@ -37087,7 +37217,7 @@ msgstr "" #: doc/classes/Node.xml msgid "" "Returns [code]true[/code] if the physics interpolated flag is set for this " -"Node (see [method set_physics_interpolated]).\n" +"Node (see [member physics_interpolation_mode]).\n" "[b]Note:[/b] Interpolation will only be active is both the flag is set " "[b]and[/b] physics interpolation is enabled within the [SceneTree]. This can " "be tested using [method is_physics_interpolated_and_enabled]." @@ -37095,8 +37225,8 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Returns [code]true[/code] if physics interpolation is enabled (see [method " -"set_physics_interpolated]) [b]and[/b] enabled in the [SceneTree].\n" +"Returns [code]true[/code] if physics interpolation is enabled (see [member " +"physics_interpolation_mode]) [b]and[/b] enabled in the [SceneTree].\n" "This is a convenience version of [method is_physics_interpolated] that also " "checks whether physics interpolation is enabled globally.\n" "See [member SceneTree.physics_interpolation] and [member ProjectSettings." @@ -37390,14 +37520,6 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Enables or disables physics interpolation per node, offering a finer grain " -"of control than turning physics interpolation on and off globally.\n" -"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " -"interpolation can sometimes give superior results." -msgstr "" - -#: doc/classes/Node.xml -msgid "" "Enables or disables physics (i.e. fixed framerate) processing. When a node " "is being processed, it will receive a [constant " "NOTIFICATION_PHYSICS_PROCESS] at a fixed (usually 60 FPS, see [member Engine." @@ -37530,6 +37652,15 @@ msgstr "" #: doc/classes/Node.xml msgid "" +"Allows enabling or disabling physics interpolation per node, offering a " +"finer grain of control than turning physics interpolation on and off " +"globally.\n" +"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " +"interpolation can sometimes give superior results." +msgstr "" + +#: doc/classes/Node.xml +msgid "" "The node's priority in the execution order of the enabled processing " "callbacks (i.e. [constant NOTIFICATION_PROCESS], [constant " "NOTIFICATION_PHYSICS_PROCESS] and their internal counterparts). Nodes whose " @@ -37691,6 +37822,24 @@ msgid "Continue to process regardless of the [SceneTree] pause state." msgstr "" #: doc/classes/Node.xml +msgid "" +"Inherits physics interpolation mode from the node's parent. For the root " +"node, it is equivalent to [constant PHYSICS_INTERPOLATION_MODE_ON]. Default." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn off physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn on physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml msgid "Duplicate the node's signals." msgstr "" @@ -38931,7 +39080,7 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" -"Returns the ID of the selected item, or [code]0[/code] if no item is " +"Returns the ID of the selected item, or [code]-1[/code] if no item is " "selected." msgstr "" @@ -38953,7 +39102,8 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" "Selects an item by index and makes it the current item. This will work even " -"if the item is disabled." +"if the item is disabled.\n" +"Passing [code]-1[/code] as the index deselects any currently selected item." msgstr "" #: doc/classes/OptionButton.xml @@ -44280,6 +44430,15 @@ msgid "" "should always be preferred." msgstr "" +#: doc/classes/PoolByteArray.xml doc/classes/PoolColorArray.xml +#: doc/classes/PoolIntArray.xml doc/classes/PoolRealArray.xml +#: doc/classes/PoolStringArray.xml doc/classes/PoolVector2Array.xml +#: doc/classes/PoolVector3Array.xml +msgid "" +"Returns [code]true[/code] if the array contains the given value.\n" +"[b]Note:[/b] This is equivalent to using the [code]in[/code] operator." +msgstr "" + #: doc/classes/PoolByteArray.xml msgid "" "Returns a hexadecimal representation of this array as a [String].\n" @@ -45073,6 +45232,10 @@ msgid "[Font] used for the menu items." msgstr "" #: doc/classes/PopupMenu.xml +msgid "[Font] used for the labeled separator." +msgstr "" + +#: doc/classes/PopupMenu.xml msgid "[Texture] icon for the checked checkbox items." msgstr "" @@ -48518,19 +48681,6 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used easing from [enum Tween.EaseType]. If not set, the " -"default easing is used from the [Tween] that contains this Tweener." -msgstr "" - -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used transition from [enum Tween.TransitionType]. If not " -"set, the default transition is used from the [Tween] that contains this " -"Tweener." -msgstr "" - #: doc/classes/ProximityGroup.xml msgid "General-purpose 3D proximity detection node." msgstr "" @@ -53360,8 +53510,15 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape touches another. If there are " -"no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape touches another.\n" +"If there are no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the shape to check collisions with " "([code]with_shape[/code]), and the transformation matrix of that shape " @@ -53382,8 +53539,16 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape would touch another, if a " -"given movement was applied. If there are no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape would touch another, " +"if a given movement was applied.\n" +"If there would be no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the movement to test on this shape " "([code]local_motion[/code]), the shape to check collisions with " diff --git a/doc/translations/sr_Cyrl.po b/doc/translations/sr_Cyrl.po index b3af766f44..da384b07a7 100644 --- a/doc/translations/sr_Cyrl.po +++ b/doc/translations/sr_Cyrl.po @@ -946,11 +946,12 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Random range, any floating point value between [code]from[/code] and " -"[code]to[/code].\n" +"Returns a random floating point value between [code]from[/code] and " +"[code]to[/code] (both endpoints inclusive).\n" "[codeblock]\n" "prints(rand_range(0, 1), rand_range(0, 1)) # Prints e.g. 0.135591 0.405263\n" -"[/codeblock]" +"[/codeblock]\n" +"[b]Note:[/b] This is equivalent to [code]randf() * (to - from) + from[/code]." msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml @@ -994,37 +995,36 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Returns an array with the given range. Range can be 1 argument [code]N[/" -"code] (0 to [code]N[/code] - 1), two arguments ([code]initial[/code], " -"[code]final - 1[/code]) or three arguments ([code]initial[/code], " -"[code]final - 1[/code], [code]increment[/code]). Returns an empty array if " -"the range isn't valid (e.g. [code]range(2, 5, -1)[/code] or [code]range(5, " -"5, 1)[/code]).\n" -"Returns an array with the given range. [code]range()[/code] can have 1 " -"argument N ([code]0[/code] to [code]N - 1[/code]), two arguments " -"([code]initial[/code], [code]final - 1[/code]) or three arguments " -"([code]initial[/code], [code]final - 1[/code], [code]increment[/code]). " -"[code]increment[/code] can be negative. If [code]increment[/code] is " -"negative, [code]final - 1[/code] will become [code]final + 1[/code]. Also, " -"the initial value must be greater than the final value for the loop to run.\n" -"[codeblock]\n" -"print(range(4))\n" -"print(range(2, 5))\n" -"print(range(0, 6, 2))\n" -"[/codeblock]\n" -"Output:\n" +"Returns an array with the given range. [method range] can be called in three " +"ways:\n" +"[code]range(n: int)[/code]: Starts from 0, increases by steps of 1, and " +"stops [i]before[/i] [code]n[/code]. The argument [code]n[/code] is " +"[b]exclusive[/b].\n" +"[code]range(b: int, n: int)[/code]: Starts from [code]b[/code], increases by " +"steps of 1, and stops [i]before[/i] [code]n[/code]. The arguments [code]b[/" +"code] and [code]n[/code] are [b]inclusive[/b] and [b]exclusive[/b], " +"respectively.\n" +"[code]range(b: int, n: int, s: int)[/code]: Starts from [code]b[/code], " +"increases/decreases by steps of [code]s[/code], and stops [i]before[/i] " +"[code]n[/code]. The arguments [code]b[/code] and [code]n[/code] are " +"[b]inclusive[/b] and [b]exclusive[/b], respectively. The argument [code]s[/" +"code] [b]can[/b] be negative, but not [code]0[/code]. If [code]s[/code] is " +"[code]0[/code], an error message is printed.\n" +"[method range] converts all arguments to [int] before processing.\n" +"[b]Note:[/b] Returns an empty array if no value meets the value constraint " +"(e.g. [code]range(2, 5, -1)[/code] or [code]range(5, 5, 1)[/code]).\n" +"Examples:\n" "[codeblock]\n" -"[0, 1, 2, 3]\n" -"[2, 3, 4]\n" -"[0, 2, 4]\n" +"print(range(4)) # Prints [0, 1, 2, 3]\n" +"print(range(2, 5)) # Prints [2, 3, 4]\n" +"print(range(0, 6, 2)) # Prints [0, 2, 4]\n" +"print(range(4, 1, -1)) # Prints [4, 3, 2]\n" "[/codeblock]\n" "To iterate over an [Array] backwards, use:\n" "[codeblock]\n" "var array = [3, 6, 9]\n" -"var i := array.size() - 1\n" -"while i >= 0:\n" -" print(array[i])\n" -" i -= 1\n" +"for i in range(array.size(), 0, -1):\n" +" print(array[i - 1])\n" "[/codeblock]\n" "Output:\n" "[codeblock]\n" @@ -4119,17 +4119,24 @@ msgid "Maximum value for the mode enum." msgstr "" #: doc/classes/AnimatedSprite.xml -msgid "Sprite node that can use multiple textures for animation." +msgid "" +"Sprite node that contains multiple textures as frames to play for animation." msgstr "" #: doc/classes/AnimatedSprite.xml msgid "" -"Animations are created using a [SpriteFrames] resource, which can be " -"configured in the editor via the SpriteFrames panel.\n" -"[b]Note:[/b] You can associate a set of normal maps by creating additional " -"[SpriteFrames] resources with a [code]_normal[/code] suffix. For example, " -"having 2 [SpriteFrames] resources [code]run[/code] and [code]run_normal[/" -"code] will make it so the [code]run[/code] animation uses the normal map." +"[AnimatedSprite] is similar to the [Sprite] node, except it carries multiple " +"textures as animation frames. Animations are created using a [SpriteFrames] " +"resource, which allows you to import image files (or a folder containing " +"said files) to provide the animation frames for the sprite. The " +"[SpriteFrames] resource can be configured in the editor via the SpriteFrames " +"bottom panel.\n" +"[b]Note:[/b] You can associate a set of normal or specular maps by creating " +"additional [SpriteFrames] resources with a [code]_normal[/code] or " +"[code]_specular[/code] suffix. For example, having 3 [SpriteFrames] " +"resources [code]run[/code], [code]run_normal[/code], and [code]run_specular[/" +"code] will make it so the [code]run[/code] animation uses normal and " +"specular maps." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml @@ -4157,9 +4164,9 @@ msgstr "" msgid "Stops the current animation (does not reset the frame counter)." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml +#: doc/classes/AnimatedSprite.xml msgid "" -"The current animation from the [code]frames[/code] resource. If this value " +"The current animation from the [member frames] resource. If this value " "changes, the [code]frame[/code] counter is reset." msgstr "" @@ -4183,8 +4190,11 @@ msgstr "" msgid "The displayed animation frame's index." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml -msgid "The [SpriteFrames] resource containing the animation(s)." +#: doc/classes/AnimatedSprite.xml +msgid "" +"The [SpriteFrames] resource containing the animation(s). Allows you the " +"option to load, edit, clear, make unique and save the states of the " +"[SpriteFrames] resource." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/Sprite.xml @@ -4236,6 +4246,16 @@ msgid "" "provided, the current animation is played." msgstr "" +#: doc/classes/AnimatedSprite3D.xml +msgid "" +"The current animation from the [code]frames[/code] resource. If this value " +"changes, the [code]frame[/code] counter is reset." +msgstr "" + +#: doc/classes/AnimatedSprite3D.xml +msgid "The [SpriteFrames] resource containing the animation(s)." +msgstr "" + #: doc/classes/AnimatedTexture.xml msgid "Proxy texture for simple frame-based animations." msgstr "" @@ -4751,11 +4771,11 @@ msgstr "" msgid "No interpolation (nearest value)." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Linear interpolation." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Cubic interpolation." msgstr "" @@ -5790,7 +5810,10 @@ msgid "" "Seeks the animation to the [code]seconds[/code] point in time (in seconds). " "If [code]update[/code] is [code]true[/code], the animation updates too, " "otherwise it updates at process time. Events between the current frame and " -"[code]seconds[/code] are skipped." +"[code]seconds[/code] are skipped.\n" +"[b]Note:[/b] Seeking to the end of the animation doesn't emit [signal " +"animation_finished]. If you want to skip animation and emit the signal, use " +"[method advance]." msgstr "" #: doc/classes/AnimationPlayer.xml @@ -6980,7 +7003,10 @@ msgid "" "[code]0[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "Returns the number of times an element is in the array." msgstr "" @@ -7025,10 +7051,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array for a value and returns its index or [code]-1[/code] if " -"not found. Optionally, the initial search index can be passed." +"not found. Optionally, the initial search index can be passed. Returns " +"[code]-1[/code] if [code]from[/code] is out of bounds." msgstr "" #: doc/classes/Array.xml @@ -7166,11 +7196,15 @@ msgid "" "[code]null[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array in reverse order. Optionally, a start search index can be " "passed. If negative, the start index is considered relative to the end of " -"the array." +"the array. If the adjusted start index is out of bounds, this method " +"searches from the end of the array." msgstr "" #: doc/classes/Array.xml @@ -8305,7 +8339,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -8527,7 +8561,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -11638,17 +11672,17 @@ msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a normal vector in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a 3D position in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml @@ -13897,7 +13931,9 @@ msgstr "" #: doc/classes/CollisionPolygon2D.xml msgid "" "If [code]true[/code], only edges that face up, relative to " -"[CollisionPolygon2D]'s rotation, will collide with other objects." +"[CollisionPolygon2D]'s rotation, will collide with other objects.\n" +"[b]Note:[/b] This property has no effect if this [CollisionPolygon2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionPolygon2D.xml @@ -13993,7 +14029,9 @@ msgstr "" #: doc/classes/CollisionShape2D.xml msgid "" "Sets whether this collision shape should only detect collision on one side " -"(top or bottom)." +"(top or bottom).\n" +"[b]Note:[/b] This property has no effect if this [CollisionShape2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionShape2D.xml @@ -22399,6 +22437,10 @@ msgid "" "same behavior." msgstr "" +#: doc/classes/EditorSpinSlider.xml +msgid "If [code]true[/code], the slider is hidden." +msgstr "" + #: doc/classes/EditorVCSInterface.xml msgid "" "Version Control System (VCS) interface, which reads and writes to the local " @@ -25983,9 +26025,22 @@ msgid "Gradient's colors returned as a [PoolColorArray]." msgstr "" #: doc/classes/Gradient.xml +msgid "" +"Defines how the colors between points of the gradient are interpolated. See " +"[enum InterpolationMode] for available modes." +msgstr "" + +#: doc/classes/Gradient.xml msgid "Gradient's offsets returned as a [PoolRealArray]." msgstr "" +#: doc/classes/Gradient.xml +msgid "" +"Constant interpolation, color changes abruptly at each point and stays " +"uniform between. This might cause visible aliasing when used for a gradient " +"texture in some cases." +msgstr "" + #: doc/classes/GradientTexture.xml msgid "Gradient-filled texture." msgstr "" @@ -34507,13 +34562,13 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used easing from [enum Tween.EaseType]. If not set, the " "default easing is used from the [SceneTreeTween] that contains this Tweener." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used transition from [enum Tween.TransitionType]. If not " "set, the default transition is used from the [SceneTreeTween] that contains " @@ -35219,6 +35274,12 @@ msgid "Creates the agent." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]agent[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" @@ -35282,6 +35343,12 @@ msgid "Create a new map." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation agents [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns the map cell size." msgstr "" @@ -35308,6 +35375,12 @@ msgid "Returns the navigation path to reach the destination from the origin." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation regions [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns [code]true[/code] if the map is active." msgstr "" @@ -35329,6 +35402,12 @@ msgid "Creates a new region." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]region[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the map for the region." msgstr "" @@ -35801,17 +35880,57 @@ msgid "Represents the size of the [enum SourceGeometryMode] enum." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "This class is responsible for creating and clearing navigation meshes." +msgid "Helper class for creating and clearing navigation meshes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml msgid "" -"Bakes the navigation mesh. This will allow you to use pathfinding with the " -"navigation system." +"This class is responsible for creating and clearing 3D navigation meshes " +"used as [NavigationMesh] resources inside [NavigationMeshInstance]. The " +"[NavigationMeshGenerator] has very limited to no use for 2D as the " +"navigation mesh baking process expects 3D node types and 3D source geometry " +"to parse.\n" +"The entire navigation mesh baking is best done in a separate thread as the " +"voxelization, collision tests and mesh optimization steps involved are very " +"performance and time hungry operations.\n" +"Navigation mesh baking happens in multiple steps and the result depends on " +"3D source geometry and properties of the [NavigationMesh] resource. In the " +"first step, starting from a root node and depending on [NavigationMesh] " +"properties all valid 3D source geometry nodes are collected from the " +"[SceneTree]. Second, all collected nodes are parsed for their relevant 3D " +"geometry data and a combined 3D mesh is build. Due to the many different " +"types of parsable objects, from normal [MeshInstance]s to [CSGShape]s or " +"various [CollisionObject]s, some operations to collect geometry data can " +"trigger [VisualServer] and [PhysicsServer] synchronizations. Server " +"synchronization can have a negative effect on baking time or framerate as it " +"often involves [Mutex] locking for thread security. Many parsable objects " +"and the continuous synchronization with other threaded Servers can increase " +"the baking time significantly. On the other hand only a few but very large " +"and complex objects will take some time to prepare for the Servers which can " +"noticeably stall the next frame render. As a general rule the total amount " +"of parsable objects and their individual size and complexity should be " +"balanced to avoid framerate issues or very long baking times. The combined " +"mesh is then passed to the Recast Navigation Object to test the source " +"geometry for walkable terrain suitable to [NavigationMesh] agent properties " +"by creating a voxel world around the meshes bounding area.\n" +"The finalized navigation mesh is then returned and stored inside the " +"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes." +msgstr "" + +#: doc/classes/NavigationMeshGenerator.xml +msgid "" +"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " +"nodes under the provided [code]root_node[/code] or a specific group of nodes " +"for potential source geometry. The parse behavior can be controlled with the " +"[member NavigationMesh.geometry/parsed_geometry_type] and [member " +"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[NavigationMesh] resource." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "Clears the navigation mesh." +msgid "" +"Removes all polygons and vertices from the provided [code]nav_mesh[/code] " +"resource." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -35832,7 +35951,10 @@ msgid "" "thread is useful because navigation baking is not a cheap operation. When it " "is completed, it automatically sets the new [NavigationMesh]. Please note " "that baking on separate thread may be very slow if geometry is parsed from " -"meshes as async access to each mesh involves heavy synchronization." +"meshes as async access to each mesh involves heavy synchronization. Also, " +"please note that baking on a separate thread is automatically disabled on " +"operating systems that cannot use threads (such as HTML5 with threads " +"disabled)." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -35878,6 +36000,10 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle.xml +msgid "Returns the [RID] of this obstacle on the [NavigationServer]." +msgstr "" + +#: doc/classes/NavigationObstacle.xml msgid "" "Sets the [Navigation] node used by the obstacle. Useful when you don't want " "to make the obstacle a child of a [Navigation] node." @@ -35914,6 +36040,10 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle2D.xml +msgid "Returns the [RID] of this obstacle on the [Navigation2DServer]." +msgstr "" + +#: doc/classes/NavigationObstacle2D.xml msgid "" "Sets the [Navigation2D] node used by the obstacle. Useful when you don't " "want to make the obstacle a child of a [Navigation2D] node." @@ -37098,7 +37228,7 @@ msgstr "" #: doc/classes/Node.xml msgid "" "Returns [code]true[/code] if the physics interpolated flag is set for this " -"Node (see [method set_physics_interpolated]).\n" +"Node (see [member physics_interpolation_mode]).\n" "[b]Note:[/b] Interpolation will only be active is both the flag is set " "[b]and[/b] physics interpolation is enabled within the [SceneTree]. This can " "be tested using [method is_physics_interpolated_and_enabled]." @@ -37106,8 +37236,8 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Returns [code]true[/code] if physics interpolation is enabled (see [method " -"set_physics_interpolated]) [b]and[/b] enabled in the [SceneTree].\n" +"Returns [code]true[/code] if physics interpolation is enabled (see [member " +"physics_interpolation_mode]) [b]and[/b] enabled in the [SceneTree].\n" "This is a convenience version of [method is_physics_interpolated] that also " "checks whether physics interpolation is enabled globally.\n" "See [member SceneTree.physics_interpolation] and [member ProjectSettings." @@ -37401,14 +37531,6 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Enables or disables physics interpolation per node, offering a finer grain " -"of control than turning physics interpolation on and off globally.\n" -"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " -"interpolation can sometimes give superior results." -msgstr "" - -#: doc/classes/Node.xml -msgid "" "Enables or disables physics (i.e. fixed framerate) processing. When a node " "is being processed, it will receive a [constant " "NOTIFICATION_PHYSICS_PROCESS] at a fixed (usually 60 FPS, see [member Engine." @@ -37541,6 +37663,15 @@ msgstr "" #: doc/classes/Node.xml msgid "" +"Allows enabling or disabling physics interpolation per node, offering a " +"finer grain of control than turning physics interpolation on and off " +"globally.\n" +"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " +"interpolation can sometimes give superior results." +msgstr "" + +#: doc/classes/Node.xml +msgid "" "The node's priority in the execution order of the enabled processing " "callbacks (i.e. [constant NOTIFICATION_PROCESS], [constant " "NOTIFICATION_PHYSICS_PROCESS] and their internal counterparts). Nodes whose " @@ -37702,6 +37833,24 @@ msgid "Continue to process regardless of the [SceneTree] pause state." msgstr "" #: doc/classes/Node.xml +msgid "" +"Inherits physics interpolation mode from the node's parent. For the root " +"node, it is equivalent to [constant PHYSICS_INTERPOLATION_MODE_ON]. Default." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn off physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn on physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml msgid "Duplicate the node's signals." msgstr "" @@ -38942,7 +39091,7 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" -"Returns the ID of the selected item, or [code]0[/code] if no item is " +"Returns the ID of the selected item, or [code]-1[/code] if no item is " "selected." msgstr "" @@ -38964,7 +39113,8 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" "Selects an item by index and makes it the current item. This will work even " -"if the item is disabled." +"if the item is disabled.\n" +"Passing [code]-1[/code] as the index deselects any currently selected item." msgstr "" #: doc/classes/OptionButton.xml @@ -44291,6 +44441,15 @@ msgid "" "should always be preferred." msgstr "" +#: doc/classes/PoolByteArray.xml doc/classes/PoolColorArray.xml +#: doc/classes/PoolIntArray.xml doc/classes/PoolRealArray.xml +#: doc/classes/PoolStringArray.xml doc/classes/PoolVector2Array.xml +#: doc/classes/PoolVector3Array.xml +msgid "" +"Returns [code]true[/code] if the array contains the given value.\n" +"[b]Note:[/b] This is equivalent to using the [code]in[/code] operator." +msgstr "" + #: doc/classes/PoolByteArray.xml msgid "" "Returns a hexadecimal representation of this array as a [String].\n" @@ -45084,6 +45243,10 @@ msgid "[Font] used for the menu items." msgstr "" #: doc/classes/PopupMenu.xml +msgid "[Font] used for the labeled separator." +msgstr "" + +#: doc/classes/PopupMenu.xml msgid "[Texture] icon for the checked checkbox items." msgstr "" @@ -48529,19 +48692,6 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used easing from [enum Tween.EaseType]. If not set, the " -"default easing is used from the [Tween] that contains this Tweener." -msgstr "" - -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used transition from [enum Tween.TransitionType]. If not " -"set, the default transition is used from the [Tween] that contains this " -"Tweener." -msgstr "" - #: doc/classes/ProximityGroup.xml msgid "General-purpose 3D proximity detection node." msgstr "" @@ -53371,8 +53521,15 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape touches another. If there are " -"no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape touches another.\n" +"If there are no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the shape to check collisions with " "([code]with_shape[/code]), and the transformation matrix of that shape " @@ -53393,8 +53550,16 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape would touch another, if a " -"given movement was applied. If there are no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape would touch another, " +"if a given movement was applied.\n" +"If there would be no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the movement to test on this shape " "([code]local_motion[/code]), the shape to check collisions with " diff --git a/doc/translations/sv.po b/doc/translations/sv.po index 8da5285250..3a8da5d2c5 100644 --- a/doc/translations/sv.po +++ b/doc/translations/sv.po @@ -935,11 +935,12 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Random range, any floating point value between [code]from[/code] and " -"[code]to[/code].\n" +"Returns a random floating point value between [code]from[/code] and " +"[code]to[/code] (both endpoints inclusive).\n" "[codeblock]\n" "prints(rand_range(0, 1), rand_range(0, 1)) # Prints e.g. 0.135591 0.405263\n" -"[/codeblock]" +"[/codeblock]\n" +"[b]Note:[/b] This is equivalent to [code]randf() * (to - from) + from[/code]." msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml @@ -983,37 +984,36 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Returns an array with the given range. Range can be 1 argument [code]N[/" -"code] (0 to [code]N[/code] - 1), two arguments ([code]initial[/code], " -"[code]final - 1[/code]) or three arguments ([code]initial[/code], " -"[code]final - 1[/code], [code]increment[/code]). Returns an empty array if " -"the range isn't valid (e.g. [code]range(2, 5, -1)[/code] or [code]range(5, " -"5, 1)[/code]).\n" -"Returns an array with the given range. [code]range()[/code] can have 1 " -"argument N ([code]0[/code] to [code]N - 1[/code]), two arguments " -"([code]initial[/code], [code]final - 1[/code]) or three arguments " -"([code]initial[/code], [code]final - 1[/code], [code]increment[/code]). " -"[code]increment[/code] can be negative. If [code]increment[/code] is " -"negative, [code]final - 1[/code] will become [code]final + 1[/code]. Also, " -"the initial value must be greater than the final value for the loop to run.\n" -"[codeblock]\n" -"print(range(4))\n" -"print(range(2, 5))\n" -"print(range(0, 6, 2))\n" -"[/codeblock]\n" -"Output:\n" +"Returns an array with the given range. [method range] can be called in three " +"ways:\n" +"[code]range(n: int)[/code]: Starts from 0, increases by steps of 1, and " +"stops [i]before[/i] [code]n[/code]. The argument [code]n[/code] is " +"[b]exclusive[/b].\n" +"[code]range(b: int, n: int)[/code]: Starts from [code]b[/code], increases by " +"steps of 1, and stops [i]before[/i] [code]n[/code]. The arguments [code]b[/" +"code] and [code]n[/code] are [b]inclusive[/b] and [b]exclusive[/b], " +"respectively.\n" +"[code]range(b: int, n: int, s: int)[/code]: Starts from [code]b[/code], " +"increases/decreases by steps of [code]s[/code], and stops [i]before[/i] " +"[code]n[/code]. The arguments [code]b[/code] and [code]n[/code] are " +"[b]inclusive[/b] and [b]exclusive[/b], respectively. The argument [code]s[/" +"code] [b]can[/b] be negative, but not [code]0[/code]. If [code]s[/code] is " +"[code]0[/code], an error message is printed.\n" +"[method range] converts all arguments to [int] before processing.\n" +"[b]Note:[/b] Returns an empty array if no value meets the value constraint " +"(e.g. [code]range(2, 5, -1)[/code] or [code]range(5, 5, 1)[/code]).\n" +"Examples:\n" "[codeblock]\n" -"[0, 1, 2, 3]\n" -"[2, 3, 4]\n" -"[0, 2, 4]\n" +"print(range(4)) # Prints [0, 1, 2, 3]\n" +"print(range(2, 5)) # Prints [2, 3, 4]\n" +"print(range(0, 6, 2)) # Prints [0, 2, 4]\n" +"print(range(4, 1, -1)) # Prints [4, 3, 2]\n" "[/codeblock]\n" "To iterate over an [Array] backwards, use:\n" "[codeblock]\n" "var array = [3, 6, 9]\n" -"var i := array.size() - 1\n" -"while i >= 0:\n" -" print(array[i])\n" -" i -= 1\n" +"for i in range(array.size(), 0, -1):\n" +" print(array[i - 1])\n" "[/codeblock]\n" "Output:\n" "[codeblock]\n" @@ -4108,17 +4108,24 @@ msgid "Maximum value for the mode enum." msgstr "" #: doc/classes/AnimatedSprite.xml -msgid "Sprite node that can use multiple textures for animation." +msgid "" +"Sprite node that contains multiple textures as frames to play for animation." msgstr "" #: doc/classes/AnimatedSprite.xml msgid "" -"Animations are created using a [SpriteFrames] resource, which can be " -"configured in the editor via the SpriteFrames panel.\n" -"[b]Note:[/b] You can associate a set of normal maps by creating additional " -"[SpriteFrames] resources with a [code]_normal[/code] suffix. For example, " -"having 2 [SpriteFrames] resources [code]run[/code] and [code]run_normal[/" -"code] will make it so the [code]run[/code] animation uses the normal map." +"[AnimatedSprite] is similar to the [Sprite] node, except it carries multiple " +"textures as animation frames. Animations are created using a [SpriteFrames] " +"resource, which allows you to import image files (or a folder containing " +"said files) to provide the animation frames for the sprite. The " +"[SpriteFrames] resource can be configured in the editor via the SpriteFrames " +"bottom panel.\n" +"[b]Note:[/b] You can associate a set of normal or specular maps by creating " +"additional [SpriteFrames] resources with a [code]_normal[/code] or " +"[code]_specular[/code] suffix. For example, having 3 [SpriteFrames] " +"resources [code]run[/code], [code]run_normal[/code], and [code]run_specular[/" +"code] will make it so the [code]run[/code] animation uses normal and " +"specular maps." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml @@ -4146,9 +4153,9 @@ msgstr "" msgid "Stops the current animation (does not reset the frame counter)." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml +#: doc/classes/AnimatedSprite.xml msgid "" -"The current animation from the [code]frames[/code] resource. If this value " +"The current animation from the [member frames] resource. If this value " "changes, the [code]frame[/code] counter is reset." msgstr "" @@ -4172,8 +4179,11 @@ msgstr "" msgid "The displayed animation frame's index." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml -msgid "The [SpriteFrames] resource containing the animation(s)." +#: doc/classes/AnimatedSprite.xml +msgid "" +"The [SpriteFrames] resource containing the animation(s). Allows you the " +"option to load, edit, clear, make unique and save the states of the " +"[SpriteFrames] resource." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/Sprite.xml @@ -4225,6 +4235,16 @@ msgid "" "provided, the current animation is played." msgstr "" +#: doc/classes/AnimatedSprite3D.xml +msgid "" +"The current animation from the [code]frames[/code] resource. If this value " +"changes, the [code]frame[/code] counter is reset." +msgstr "" + +#: doc/classes/AnimatedSprite3D.xml +msgid "The [SpriteFrames] resource containing the animation(s)." +msgstr "" + #: doc/classes/AnimatedTexture.xml msgid "Proxy texture for simple frame-based animations." msgstr "" @@ -4740,11 +4760,11 @@ msgstr "" msgid "No interpolation (nearest value)." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Linear interpolation." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Cubic interpolation." msgstr "" @@ -5779,7 +5799,10 @@ msgid "" "Seeks the animation to the [code]seconds[/code] point in time (in seconds). " "If [code]update[/code] is [code]true[/code], the animation updates too, " "otherwise it updates at process time. Events between the current frame and " -"[code]seconds[/code] are skipped." +"[code]seconds[/code] are skipped.\n" +"[b]Note:[/b] Seeking to the end of the animation doesn't emit [signal " +"animation_finished]. If you want to skip animation and emit the signal, use " +"[method advance]." msgstr "" #: doc/classes/AnimationPlayer.xml @@ -6969,7 +6992,10 @@ msgid "" "[code]0[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "Returns the number of times an element is in the array." msgstr "" @@ -7014,10 +7040,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array for a value and returns its index or [code]-1[/code] if " -"not found. Optionally, the initial search index can be passed." +"not found. Optionally, the initial search index can be passed. Returns " +"[code]-1[/code] if [code]from[/code] is out of bounds." msgstr "" #: doc/classes/Array.xml @@ -7155,11 +7185,15 @@ msgid "" "[code]null[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array in reverse order. Optionally, a start search index can be " "passed. If negative, the start index is considered relative to the end of " -"the array." +"the array. If the adjusted start index is out of bounds, this method " +"searches from the end of the array." msgstr "" #: doc/classes/Array.xml @@ -8294,7 +8328,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -8516,7 +8550,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -11627,17 +11661,17 @@ msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a normal vector in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a 3D position in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml @@ -13886,7 +13920,9 @@ msgstr "" #: doc/classes/CollisionPolygon2D.xml msgid "" "If [code]true[/code], only edges that face up, relative to " -"[CollisionPolygon2D]'s rotation, will collide with other objects." +"[CollisionPolygon2D]'s rotation, will collide with other objects.\n" +"[b]Note:[/b] This property has no effect if this [CollisionPolygon2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionPolygon2D.xml @@ -13982,7 +14018,9 @@ msgstr "" #: doc/classes/CollisionShape2D.xml msgid "" "Sets whether this collision shape should only detect collision on one side " -"(top or bottom)." +"(top or bottom).\n" +"[b]Note:[/b] This property has no effect if this [CollisionShape2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionShape2D.xml @@ -22388,6 +22426,10 @@ msgid "" "same behavior." msgstr "" +#: doc/classes/EditorSpinSlider.xml +msgid "If [code]true[/code], the slider is hidden." +msgstr "" + #: doc/classes/EditorVCSInterface.xml msgid "" "Version Control System (VCS) interface, which reads and writes to the local " @@ -25969,9 +26011,22 @@ msgid "Gradient's colors returned as a [PoolColorArray]." msgstr "" #: doc/classes/Gradient.xml +msgid "" +"Defines how the colors between points of the gradient are interpolated. See " +"[enum InterpolationMode] for available modes." +msgstr "" + +#: doc/classes/Gradient.xml msgid "Gradient's offsets returned as a [PoolRealArray]." msgstr "" +#: doc/classes/Gradient.xml +msgid "" +"Constant interpolation, color changes abruptly at each point and stays " +"uniform between. This might cause visible aliasing when used for a gradient " +"texture in some cases." +msgstr "" + #: doc/classes/GradientTexture.xml msgid "Gradient-filled texture." msgstr "" @@ -34493,13 +34548,13 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used easing from [enum Tween.EaseType]. If not set, the " "default easing is used from the [SceneTreeTween] that contains this Tweener." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used transition from [enum Tween.TransitionType]. If not " "set, the default transition is used from the [SceneTreeTween] that contains " @@ -35205,6 +35260,12 @@ msgid "Creates the agent." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]agent[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" @@ -35268,6 +35329,12 @@ msgid "Create a new map." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation agents [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns the map cell size." msgstr "" @@ -35294,6 +35361,12 @@ msgid "Returns the navigation path to reach the destination from the origin." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation regions [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns [code]true[/code] if the map is active." msgstr "" @@ -35315,6 +35388,12 @@ msgid "Creates a new region." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]region[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the map for the region." msgstr "" @@ -35787,17 +35866,57 @@ msgid "Represents the size of the [enum SourceGeometryMode] enum." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "This class is responsible for creating and clearing navigation meshes." +msgid "Helper class for creating and clearing navigation meshes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml msgid "" -"Bakes the navigation mesh. This will allow you to use pathfinding with the " -"navigation system." +"This class is responsible for creating and clearing 3D navigation meshes " +"used as [NavigationMesh] resources inside [NavigationMeshInstance]. The " +"[NavigationMeshGenerator] has very limited to no use for 2D as the " +"navigation mesh baking process expects 3D node types and 3D source geometry " +"to parse.\n" +"The entire navigation mesh baking is best done in a separate thread as the " +"voxelization, collision tests and mesh optimization steps involved are very " +"performance and time hungry operations.\n" +"Navigation mesh baking happens in multiple steps and the result depends on " +"3D source geometry and properties of the [NavigationMesh] resource. In the " +"first step, starting from a root node and depending on [NavigationMesh] " +"properties all valid 3D source geometry nodes are collected from the " +"[SceneTree]. Second, all collected nodes are parsed for their relevant 3D " +"geometry data and a combined 3D mesh is build. Due to the many different " +"types of parsable objects, from normal [MeshInstance]s to [CSGShape]s or " +"various [CollisionObject]s, some operations to collect geometry data can " +"trigger [VisualServer] and [PhysicsServer] synchronizations. Server " +"synchronization can have a negative effect on baking time or framerate as it " +"often involves [Mutex] locking for thread security. Many parsable objects " +"and the continuous synchronization with other threaded Servers can increase " +"the baking time significantly. On the other hand only a few but very large " +"and complex objects will take some time to prepare for the Servers which can " +"noticeably stall the next frame render. As a general rule the total amount " +"of parsable objects and their individual size and complexity should be " +"balanced to avoid framerate issues or very long baking times. The combined " +"mesh is then passed to the Recast Navigation Object to test the source " +"geometry for walkable terrain suitable to [NavigationMesh] agent properties " +"by creating a voxel world around the meshes bounding area.\n" +"The finalized navigation mesh is then returned and stored inside the " +"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes." +msgstr "" + +#: doc/classes/NavigationMeshGenerator.xml +msgid "" +"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " +"nodes under the provided [code]root_node[/code] or a specific group of nodes " +"for potential source geometry. The parse behavior can be controlled with the " +"[member NavigationMesh.geometry/parsed_geometry_type] and [member " +"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[NavigationMesh] resource." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "Clears the navigation mesh." +msgid "" +"Removes all polygons and vertices from the provided [code]nav_mesh[/code] " +"resource." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -35818,7 +35937,10 @@ msgid "" "thread is useful because navigation baking is not a cheap operation. When it " "is completed, it automatically sets the new [NavigationMesh]. Please note " "that baking on separate thread may be very slow if geometry is parsed from " -"meshes as async access to each mesh involves heavy synchronization." +"meshes as async access to each mesh involves heavy synchronization. Also, " +"please note that baking on a separate thread is automatically disabled on " +"operating systems that cannot use threads (such as HTML5 with threads " +"disabled)." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -35864,6 +35986,10 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle.xml +msgid "Returns the [RID] of this obstacle on the [NavigationServer]." +msgstr "" + +#: doc/classes/NavigationObstacle.xml msgid "" "Sets the [Navigation] node used by the obstacle. Useful when you don't want " "to make the obstacle a child of a [Navigation] node." @@ -35900,6 +36026,10 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle2D.xml +msgid "Returns the [RID] of this obstacle on the [Navigation2DServer]." +msgstr "" + +#: doc/classes/NavigationObstacle2D.xml msgid "" "Sets the [Navigation2D] node used by the obstacle. Useful when you don't " "want to make the obstacle a child of a [Navigation2D] node." @@ -37084,7 +37214,7 @@ msgstr "" #: doc/classes/Node.xml msgid "" "Returns [code]true[/code] if the physics interpolated flag is set for this " -"Node (see [method set_physics_interpolated]).\n" +"Node (see [member physics_interpolation_mode]).\n" "[b]Note:[/b] Interpolation will only be active is both the flag is set " "[b]and[/b] physics interpolation is enabled within the [SceneTree]. This can " "be tested using [method is_physics_interpolated_and_enabled]." @@ -37092,8 +37222,8 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Returns [code]true[/code] if physics interpolation is enabled (see [method " -"set_physics_interpolated]) [b]and[/b] enabled in the [SceneTree].\n" +"Returns [code]true[/code] if physics interpolation is enabled (see [member " +"physics_interpolation_mode]) [b]and[/b] enabled in the [SceneTree].\n" "This is a convenience version of [method is_physics_interpolated] that also " "checks whether physics interpolation is enabled globally.\n" "See [member SceneTree.physics_interpolation] and [member ProjectSettings." @@ -37387,14 +37517,6 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Enables or disables physics interpolation per node, offering a finer grain " -"of control than turning physics interpolation on and off globally.\n" -"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " -"interpolation can sometimes give superior results." -msgstr "" - -#: doc/classes/Node.xml -msgid "" "Enables or disables physics (i.e. fixed framerate) processing. When a node " "is being processed, it will receive a [constant " "NOTIFICATION_PHYSICS_PROCESS] at a fixed (usually 60 FPS, see [member Engine." @@ -37527,6 +37649,15 @@ msgstr "" #: doc/classes/Node.xml msgid "" +"Allows enabling or disabling physics interpolation per node, offering a " +"finer grain of control than turning physics interpolation on and off " +"globally.\n" +"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " +"interpolation can sometimes give superior results." +msgstr "" + +#: doc/classes/Node.xml +msgid "" "The node's priority in the execution order of the enabled processing " "callbacks (i.e. [constant NOTIFICATION_PROCESS], [constant " "NOTIFICATION_PHYSICS_PROCESS] and their internal counterparts). Nodes whose " @@ -37688,6 +37819,24 @@ msgid "Continue to process regardless of the [SceneTree] pause state." msgstr "" #: doc/classes/Node.xml +msgid "" +"Inherits physics interpolation mode from the node's parent. For the root " +"node, it is equivalent to [constant PHYSICS_INTERPOLATION_MODE_ON]. Default." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn off physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn on physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml msgid "Duplicate the node's signals." msgstr "" @@ -38928,7 +39077,7 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" -"Returns the ID of the selected item, or [code]0[/code] if no item is " +"Returns the ID of the selected item, or [code]-1[/code] if no item is " "selected." msgstr "" @@ -38950,7 +39099,8 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" "Selects an item by index and makes it the current item. This will work even " -"if the item is disabled." +"if the item is disabled.\n" +"Passing [code]-1[/code] as the index deselects any currently selected item." msgstr "" #: doc/classes/OptionButton.xml @@ -44277,6 +44427,15 @@ msgid "" "should always be preferred." msgstr "" +#: doc/classes/PoolByteArray.xml doc/classes/PoolColorArray.xml +#: doc/classes/PoolIntArray.xml doc/classes/PoolRealArray.xml +#: doc/classes/PoolStringArray.xml doc/classes/PoolVector2Array.xml +#: doc/classes/PoolVector3Array.xml +msgid "" +"Returns [code]true[/code] if the array contains the given value.\n" +"[b]Note:[/b] This is equivalent to using the [code]in[/code] operator." +msgstr "" + #: doc/classes/PoolByteArray.xml msgid "" "Returns a hexadecimal representation of this array as a [String].\n" @@ -45070,6 +45229,10 @@ msgid "[Font] used for the menu items." msgstr "" #: doc/classes/PopupMenu.xml +msgid "[Font] used for the labeled separator." +msgstr "" + +#: doc/classes/PopupMenu.xml msgid "[Texture] icon for the checked checkbox items." msgstr "" @@ -48515,19 +48678,6 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used easing from [enum Tween.EaseType]. If not set, the " -"default easing is used from the [Tween] that contains this Tweener." -msgstr "" - -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used transition from [enum Tween.TransitionType]. If not " -"set, the default transition is used from the [Tween] that contains this " -"Tweener." -msgstr "" - #: doc/classes/ProximityGroup.xml msgid "General-purpose 3D proximity detection node." msgstr "" @@ -53357,8 +53507,15 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape touches another. If there are " -"no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape touches another.\n" +"If there are no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the shape to check collisions with " "([code]with_shape[/code]), and the transformation matrix of that shape " @@ -53379,8 +53536,16 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape would touch another, if a " -"given movement was applied. If there are no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape would touch another, " +"if a given movement was applied.\n" +"If there would be no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the movement to test on this shape " "([code]local_motion[/code]), the shape to check collisions with " diff --git a/doc/translations/th.po b/doc/translations/th.po index c3e896aba7..d6e08f2985 100644 --- a/doc/translations/th.po +++ b/doc/translations/th.po @@ -1020,11 +1020,12 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Random range, any floating point value between [code]from[/code] and " -"[code]to[/code].\n" +"Returns a random floating point value between [code]from[/code] and " +"[code]to[/code] (both endpoints inclusive).\n" "[codeblock]\n" "prints(rand_range(0, 1), rand_range(0, 1)) # Prints e.g. 0.135591 0.405263\n" -"[/codeblock]" +"[/codeblock]\n" +"[b]Note:[/b] This is equivalent to [code]randf() * (to - from) + from[/code]." msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml @@ -1068,37 +1069,36 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Returns an array with the given range. Range can be 1 argument [code]N[/" -"code] (0 to [code]N[/code] - 1), two arguments ([code]initial[/code], " -"[code]final - 1[/code]) or three arguments ([code]initial[/code], " -"[code]final - 1[/code], [code]increment[/code]). Returns an empty array if " -"the range isn't valid (e.g. [code]range(2, 5, -1)[/code] or [code]range(5, " -"5, 1)[/code]).\n" -"Returns an array with the given range. [code]range()[/code] can have 1 " -"argument N ([code]0[/code] to [code]N - 1[/code]), two arguments " -"([code]initial[/code], [code]final - 1[/code]) or three arguments " -"([code]initial[/code], [code]final - 1[/code], [code]increment[/code]). " -"[code]increment[/code] can be negative. If [code]increment[/code] is " -"negative, [code]final - 1[/code] will become [code]final + 1[/code]. Also, " -"the initial value must be greater than the final value for the loop to run.\n" -"[codeblock]\n" -"print(range(4))\n" -"print(range(2, 5))\n" -"print(range(0, 6, 2))\n" -"[/codeblock]\n" -"Output:\n" +"Returns an array with the given range. [method range] can be called in three " +"ways:\n" +"[code]range(n: int)[/code]: Starts from 0, increases by steps of 1, and " +"stops [i]before[/i] [code]n[/code]. The argument [code]n[/code] is " +"[b]exclusive[/b].\n" +"[code]range(b: int, n: int)[/code]: Starts from [code]b[/code], increases by " +"steps of 1, and stops [i]before[/i] [code]n[/code]. The arguments [code]b[/" +"code] and [code]n[/code] are [b]inclusive[/b] and [b]exclusive[/b], " +"respectively.\n" +"[code]range(b: int, n: int, s: int)[/code]: Starts from [code]b[/code], " +"increases/decreases by steps of [code]s[/code], and stops [i]before[/i] " +"[code]n[/code]. The arguments [code]b[/code] and [code]n[/code] are " +"[b]inclusive[/b] and [b]exclusive[/b], respectively. The argument [code]s[/" +"code] [b]can[/b] be negative, but not [code]0[/code]. If [code]s[/code] is " +"[code]0[/code], an error message is printed.\n" +"[method range] converts all arguments to [int] before processing.\n" +"[b]Note:[/b] Returns an empty array if no value meets the value constraint " +"(e.g. [code]range(2, 5, -1)[/code] or [code]range(5, 5, 1)[/code]).\n" +"Examples:\n" "[codeblock]\n" -"[0, 1, 2, 3]\n" -"[2, 3, 4]\n" -"[0, 2, 4]\n" +"print(range(4)) # Prints [0, 1, 2, 3]\n" +"print(range(2, 5)) # Prints [2, 3, 4]\n" +"print(range(0, 6, 2)) # Prints [0, 2, 4]\n" +"print(range(4, 1, -1)) # Prints [4, 3, 2]\n" "[/codeblock]\n" "To iterate over an [Array] backwards, use:\n" "[codeblock]\n" "var array = [3, 6, 9]\n" -"var i := array.size() - 1\n" -"while i >= 0:\n" -" print(array[i])\n" -" i -= 1\n" +"for i in range(array.size(), 0, -1):\n" +" print(array[i - 1])\n" "[/codeblock]\n" "Output:\n" "[codeblock]\n" @@ -4209,17 +4209,24 @@ msgid "Maximum value for the mode enum." msgstr "" #: doc/classes/AnimatedSprite.xml -msgid "Sprite node that can use multiple textures for animation." +msgid "" +"Sprite node that contains multiple textures as frames to play for animation." msgstr "" #: doc/classes/AnimatedSprite.xml msgid "" -"Animations are created using a [SpriteFrames] resource, which can be " -"configured in the editor via the SpriteFrames panel.\n" -"[b]Note:[/b] You can associate a set of normal maps by creating additional " -"[SpriteFrames] resources with a [code]_normal[/code] suffix. For example, " -"having 2 [SpriteFrames] resources [code]run[/code] and [code]run_normal[/" -"code] will make it so the [code]run[/code] animation uses the normal map." +"[AnimatedSprite] is similar to the [Sprite] node, except it carries multiple " +"textures as animation frames. Animations are created using a [SpriteFrames] " +"resource, which allows you to import image files (or a folder containing " +"said files) to provide the animation frames for the sprite. The " +"[SpriteFrames] resource can be configured in the editor via the SpriteFrames " +"bottom panel.\n" +"[b]Note:[/b] You can associate a set of normal or specular maps by creating " +"additional [SpriteFrames] resources with a [code]_normal[/code] or " +"[code]_specular[/code] suffix. For example, having 3 [SpriteFrames] " +"resources [code]run[/code], [code]run_normal[/code], and [code]run_specular[/" +"code] will make it so the [code]run[/code] animation uses normal and " +"specular maps." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml @@ -4247,9 +4254,9 @@ msgstr "" msgid "Stops the current animation (does not reset the frame counter)." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml +#: doc/classes/AnimatedSprite.xml msgid "" -"The current animation from the [code]frames[/code] resource. If this value " +"The current animation from the [member frames] resource. If this value " "changes, the [code]frame[/code] counter is reset." msgstr "" @@ -4273,8 +4280,11 @@ msgstr "" msgid "The displayed animation frame's index." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml -msgid "The [SpriteFrames] resource containing the animation(s)." +#: doc/classes/AnimatedSprite.xml +msgid "" +"The [SpriteFrames] resource containing the animation(s). Allows you the " +"option to load, edit, clear, make unique and save the states of the " +"[SpriteFrames] resource." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/Sprite.xml @@ -4326,6 +4336,16 @@ msgid "" "provided, the current animation is played." msgstr "" +#: doc/classes/AnimatedSprite3D.xml +msgid "" +"The current animation from the [code]frames[/code] resource. If this value " +"changes, the [code]frame[/code] counter is reset." +msgstr "" + +#: doc/classes/AnimatedSprite3D.xml +msgid "The [SpriteFrames] resource containing the animation(s)." +msgstr "" + #: doc/classes/AnimatedTexture.xml msgid "Proxy texture for simple frame-based animations." msgstr "" @@ -4841,11 +4861,11 @@ msgstr "" msgid "No interpolation (nearest value)." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Linear interpolation." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Cubic interpolation." msgstr "" @@ -5883,7 +5903,10 @@ msgid "" "Seeks the animation to the [code]seconds[/code] point in time (in seconds). " "If [code]update[/code] is [code]true[/code], the animation updates too, " "otherwise it updates at process time. Events between the current frame and " -"[code]seconds[/code] are skipped." +"[code]seconds[/code] are skipped.\n" +"[b]Note:[/b] Seeking to the end of the animation doesn't emit [signal " +"animation_finished]. If you want to skip animation and emit the signal, use " +"[method advance]." msgstr "" #: doc/classes/AnimationPlayer.xml @@ -7074,7 +7097,10 @@ msgid "" "[code]0[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "Returns the number of times an element is in the array." msgstr "" @@ -7119,10 +7145,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array for a value and returns its index or [code]-1[/code] if " -"not found. Optionally, the initial search index can be passed." +"not found. Optionally, the initial search index can be passed. Returns " +"[code]-1[/code] if [code]from[/code] is out of bounds." msgstr "" #: doc/classes/Array.xml @@ -7260,11 +7290,15 @@ msgid "" "[code]null[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array in reverse order. Optionally, a start search index can be " "passed. If negative, the start index is considered relative to the end of " -"the array." +"the array. If the adjusted start index is out of bounds, this method " +"searches from the end of the array." msgstr "" #: doc/classes/Array.xml @@ -8399,7 +8433,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -8621,7 +8655,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -11733,17 +11767,17 @@ msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a normal vector in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a 3D position in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml @@ -13994,7 +14028,9 @@ msgstr "" #: doc/classes/CollisionPolygon2D.xml msgid "" "If [code]true[/code], only edges that face up, relative to " -"[CollisionPolygon2D]'s rotation, will collide with other objects." +"[CollisionPolygon2D]'s rotation, will collide with other objects.\n" +"[b]Note:[/b] This property has no effect if this [CollisionPolygon2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionPolygon2D.xml @@ -14090,7 +14126,9 @@ msgstr "" #: doc/classes/CollisionShape2D.xml msgid "" "Sets whether this collision shape should only detect collision on one side " -"(top or bottom)." +"(top or bottom).\n" +"[b]Note:[/b] This property has no effect if this [CollisionShape2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionShape2D.xml @@ -22497,6 +22535,10 @@ msgid "" "same behavior." msgstr "" +#: doc/classes/EditorSpinSlider.xml +msgid "If [code]true[/code], the slider is hidden." +msgstr "" + #: doc/classes/EditorVCSInterface.xml msgid "" "Version Control System (VCS) interface, which reads and writes to the local " @@ -26083,9 +26125,22 @@ msgid "Gradient's colors returned as a [PoolColorArray]." msgstr "" #: doc/classes/Gradient.xml +msgid "" +"Defines how the colors between points of the gradient are interpolated. See " +"[enum InterpolationMode] for available modes." +msgstr "" + +#: doc/classes/Gradient.xml msgid "Gradient's offsets returned as a [PoolRealArray]." msgstr "" +#: doc/classes/Gradient.xml +msgid "" +"Constant interpolation, color changes abruptly at each point and stays " +"uniform between. This might cause visible aliasing when used for a gradient " +"texture in some cases." +msgstr "" + #: doc/classes/GradientTexture.xml msgid "Gradient-filled texture." msgstr "" @@ -34662,13 +34717,13 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used easing from [enum Tween.EaseType]. If not set, the " "default easing is used from the [SceneTreeTween] that contains this Tweener." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used transition from [enum Tween.TransitionType]. If not " "set, the default transition is used from the [SceneTreeTween] that contains " @@ -35374,6 +35429,12 @@ msgid "Creates the agent." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]agent[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" @@ -35440,6 +35501,12 @@ msgid "Create a new map." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation agents [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns the map cell size." msgstr "คืนค่าà¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าขà¸à¸‡à¸¥à¸³à¹‚พง" @@ -35467,6 +35534,12 @@ msgid "Returns the navigation path to reach the destination from the origin." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation regions [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns [code]true[/code] if the map is active." msgstr "" @@ -35489,6 +35562,12 @@ msgid "Creates a new region." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]region[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Sets the map for the region." msgstr "คืนค่าà¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าขà¸à¸‡à¸¥à¸³à¹‚พง" @@ -35963,17 +36042,57 @@ msgid "Represents the size of the [enum SourceGeometryMode] enum." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "This class is responsible for creating and clearing navigation meshes." +msgid "Helper class for creating and clearing navigation meshes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml msgid "" -"Bakes the navigation mesh. This will allow you to use pathfinding with the " -"navigation system." +"This class is responsible for creating and clearing 3D navigation meshes " +"used as [NavigationMesh] resources inside [NavigationMeshInstance]. The " +"[NavigationMeshGenerator] has very limited to no use for 2D as the " +"navigation mesh baking process expects 3D node types and 3D source geometry " +"to parse.\n" +"The entire navigation mesh baking is best done in a separate thread as the " +"voxelization, collision tests and mesh optimization steps involved are very " +"performance and time hungry operations.\n" +"Navigation mesh baking happens in multiple steps and the result depends on " +"3D source geometry and properties of the [NavigationMesh] resource. In the " +"first step, starting from a root node and depending on [NavigationMesh] " +"properties all valid 3D source geometry nodes are collected from the " +"[SceneTree]. Second, all collected nodes are parsed for their relevant 3D " +"geometry data and a combined 3D mesh is build. Due to the many different " +"types of parsable objects, from normal [MeshInstance]s to [CSGShape]s or " +"various [CollisionObject]s, some operations to collect geometry data can " +"trigger [VisualServer] and [PhysicsServer] synchronizations. Server " +"synchronization can have a negative effect on baking time or framerate as it " +"often involves [Mutex] locking for thread security. Many parsable objects " +"and the continuous synchronization with other threaded Servers can increase " +"the baking time significantly. On the other hand only a few but very large " +"and complex objects will take some time to prepare for the Servers which can " +"noticeably stall the next frame render. As a general rule the total amount " +"of parsable objects and their individual size and complexity should be " +"balanced to avoid framerate issues or very long baking times. The combined " +"mesh is then passed to the Recast Navigation Object to test the source " +"geometry for walkable terrain suitable to [NavigationMesh] agent properties " +"by creating a voxel world around the meshes bounding area.\n" +"The finalized navigation mesh is then returned and stored inside the " +"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes." +msgstr "" + +#: doc/classes/NavigationMeshGenerator.xml +msgid "" +"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " +"nodes under the provided [code]root_node[/code] or a specific group of nodes " +"for potential source geometry. The parse behavior can be controlled with the " +"[member NavigationMesh.geometry/parsed_geometry_type] and [member " +"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[NavigationMesh] resource." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "Clears the navigation mesh." +msgid "" +"Removes all polygons and vertices from the provided [code]nav_mesh[/code] " +"resource." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -35994,7 +36113,10 @@ msgid "" "thread is useful because navigation baking is not a cheap operation. When it " "is completed, it automatically sets the new [NavigationMesh]. Please note " "that baking on separate thread may be very slow if geometry is parsed from " -"meshes as async access to each mesh involves heavy synchronization." +"meshes as async access to each mesh involves heavy synchronization. Also, " +"please note that baking on a separate thread is automatically disabled on " +"operating systems that cannot use threads (such as HTML5 with threads " +"disabled)." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -36040,6 +36162,10 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle.xml +msgid "Returns the [RID] of this obstacle on the [NavigationServer]." +msgstr "" + +#: doc/classes/NavigationObstacle.xml msgid "" "Sets the [Navigation] node used by the obstacle. Useful when you don't want " "to make the obstacle a child of a [Navigation] node." @@ -36076,6 +36202,10 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle2D.xml +msgid "Returns the [RID] of this obstacle on the [Navigation2DServer]." +msgstr "" + +#: doc/classes/NavigationObstacle2D.xml msgid "" "Sets the [Navigation2D] node used by the obstacle. Useful when you don't " "want to make the obstacle a child of a [Navigation2D] node." @@ -37313,7 +37443,7 @@ msgstr "" #: doc/classes/Node.xml msgid "" "Returns [code]true[/code] if the physics interpolated flag is set for this " -"Node (see [method set_physics_interpolated]).\n" +"Node (see [member physics_interpolation_mode]).\n" "[b]Note:[/b] Interpolation will only be active is both the flag is set " "[b]and[/b] physics interpolation is enabled within the [SceneTree]. This can " "be tested using [method is_physics_interpolated_and_enabled]." @@ -37321,8 +37451,8 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Returns [code]true[/code] if physics interpolation is enabled (see [method " -"set_physics_interpolated]) [b]and[/b] enabled in the [SceneTree].\n" +"Returns [code]true[/code] if physics interpolation is enabled (see [member " +"physics_interpolation_mode]) [b]and[/b] enabled in the [SceneTree].\n" "This is a convenience version of [method is_physics_interpolated] that also " "checks whether physics interpolation is enabled globally.\n" "See [member SceneTree.physics_interpolation] and [member ProjectSettings." @@ -37616,14 +37746,6 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Enables or disables physics interpolation per node, offering a finer grain " -"of control than turning physics interpolation on and off globally.\n" -"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " -"interpolation can sometimes give superior results." -msgstr "" - -#: doc/classes/Node.xml -msgid "" "Enables or disables physics (i.e. fixed framerate) processing. When a node " "is being processed, it will receive a [constant " "NOTIFICATION_PHYSICS_PROCESS] at a fixed (usually 60 FPS, see [member Engine." @@ -37756,6 +37878,15 @@ msgstr "" #: doc/classes/Node.xml msgid "" +"Allows enabling or disabling physics interpolation per node, offering a " +"finer grain of control than turning physics interpolation on and off " +"globally.\n" +"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " +"interpolation can sometimes give superior results." +msgstr "" + +#: doc/classes/Node.xml +msgid "" "The node's priority in the execution order of the enabled processing " "callbacks (i.e. [constant NOTIFICATION_PROCESS], [constant " "NOTIFICATION_PHYSICS_PROCESS] and their internal counterparts). Nodes whose " @@ -37917,6 +38048,24 @@ msgid "Continue to process regardless of the [SceneTree] pause state." msgstr "" #: doc/classes/Node.xml +msgid "" +"Inherits physics interpolation mode from the node's parent. For the root " +"node, it is equivalent to [constant PHYSICS_INTERPOLATION_MODE_ON]. Default." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn off physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn on physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml msgid "Duplicate the node's signals." msgstr "" @@ -39158,7 +39307,7 @@ msgstr "คืนค่าà¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าขà¸à¸‡à¸¥à¸³à¹‚พ #: doc/classes/OptionButton.xml msgid "" -"Returns the ID of the selected item, or [code]0[/code] if no item is " +"Returns the ID of the selected item, or [code]-1[/code] if no item is " "selected." msgstr "" @@ -39180,7 +39329,8 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" "Selects an item by index and makes it the current item. This will work even " -"if the item is disabled." +"if the item is disabled.\n" +"Passing [code]-1[/code] as the index deselects any currently selected item." msgstr "" #: doc/classes/OptionButton.xml @@ -44515,6 +44665,15 @@ msgid "" "should always be preferred." msgstr "" +#: doc/classes/PoolByteArray.xml doc/classes/PoolColorArray.xml +#: doc/classes/PoolIntArray.xml doc/classes/PoolRealArray.xml +#: doc/classes/PoolStringArray.xml doc/classes/PoolVector2Array.xml +#: doc/classes/PoolVector3Array.xml +msgid "" +"Returns [code]true[/code] if the array contains the given value.\n" +"[b]Note:[/b] This is equivalent to using the [code]in[/code] operator." +msgstr "" + #: doc/classes/PoolByteArray.xml msgid "" "Returns a hexadecimal representation of this array as a [String].\n" @@ -45309,6 +45468,10 @@ msgid "[Font] used for the menu items." msgstr "" #: doc/classes/PopupMenu.xml +msgid "[Font] used for the labeled separator." +msgstr "" + +#: doc/classes/PopupMenu.xml msgid "[Texture] icon for the checked checkbox items." msgstr "" @@ -48759,19 +48922,6 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used easing from [enum Tween.EaseType]. If not set, the " -"default easing is used from the [Tween] that contains this Tweener." -msgstr "" - -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used transition from [enum Tween.TransitionType]. If not " -"set, the default transition is used from the [Tween] that contains this " -"Tweener." -msgstr "" - #: doc/classes/ProximityGroup.xml #, fuzzy msgid "General-purpose 3D proximity detection node." @@ -53604,8 +53754,15 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape touches another. If there are " -"no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape touches another.\n" +"If there are no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the shape to check collisions with " "([code]with_shape[/code]), and the transformation matrix of that shape " @@ -53626,8 +53783,16 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape would touch another, if a " -"given movement was applied. If there are no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape would touch another, " +"if a given movement was applied.\n" +"If there would be no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the movement to test on this shape " "([code]local_motion[/code]), the shape to check collisions with " diff --git a/doc/translations/tl.po b/doc/translations/tl.po index 701e32eba7..938734c910 100644 --- a/doc/translations/tl.po +++ b/doc/translations/tl.po @@ -1011,11 +1011,12 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Random range, any floating point value between [code]from[/code] and " -"[code]to[/code].\n" +"Returns a random floating point value between [code]from[/code] and " +"[code]to[/code] (both endpoints inclusive).\n" "[codeblock]\n" "prints(rand_range(0, 1), rand_range(0, 1)) # Prints e.g. 0.135591 0.405263\n" -"[/codeblock]" +"[/codeblock]\n" +"[b]Note:[/b] This is equivalent to [code]randf() * (to - from) + from[/code]." msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml @@ -1059,37 +1060,36 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Returns an array with the given range. Range can be 1 argument [code]N[/" -"code] (0 to [code]N[/code] - 1), two arguments ([code]initial[/code], " -"[code]final - 1[/code]) or three arguments ([code]initial[/code], " -"[code]final - 1[/code], [code]increment[/code]). Returns an empty array if " -"the range isn't valid (e.g. [code]range(2, 5, -1)[/code] or [code]range(5, " -"5, 1)[/code]).\n" -"Returns an array with the given range. [code]range()[/code] can have 1 " -"argument N ([code]0[/code] to [code]N - 1[/code]), two arguments " -"([code]initial[/code], [code]final - 1[/code]) or three arguments " -"([code]initial[/code], [code]final - 1[/code], [code]increment[/code]). " -"[code]increment[/code] can be negative. If [code]increment[/code] is " -"negative, [code]final - 1[/code] will become [code]final + 1[/code]. Also, " -"the initial value must be greater than the final value for the loop to run.\n" -"[codeblock]\n" -"print(range(4))\n" -"print(range(2, 5))\n" -"print(range(0, 6, 2))\n" -"[/codeblock]\n" -"Output:\n" +"Returns an array with the given range. [method range] can be called in three " +"ways:\n" +"[code]range(n: int)[/code]: Starts from 0, increases by steps of 1, and " +"stops [i]before[/i] [code]n[/code]. The argument [code]n[/code] is " +"[b]exclusive[/b].\n" +"[code]range(b: int, n: int)[/code]: Starts from [code]b[/code], increases by " +"steps of 1, and stops [i]before[/i] [code]n[/code]. The arguments [code]b[/" +"code] and [code]n[/code] are [b]inclusive[/b] and [b]exclusive[/b], " +"respectively.\n" +"[code]range(b: int, n: int, s: int)[/code]: Starts from [code]b[/code], " +"increases/decreases by steps of [code]s[/code], and stops [i]before[/i] " +"[code]n[/code]. The arguments [code]b[/code] and [code]n[/code] are " +"[b]inclusive[/b] and [b]exclusive[/b], respectively. The argument [code]s[/" +"code] [b]can[/b] be negative, but not [code]0[/code]. If [code]s[/code] is " +"[code]0[/code], an error message is printed.\n" +"[method range] converts all arguments to [int] before processing.\n" +"[b]Note:[/b] Returns an empty array if no value meets the value constraint " +"(e.g. [code]range(2, 5, -1)[/code] or [code]range(5, 5, 1)[/code]).\n" +"Examples:\n" "[codeblock]\n" -"[0, 1, 2, 3]\n" -"[2, 3, 4]\n" -"[0, 2, 4]\n" +"print(range(4)) # Prints [0, 1, 2, 3]\n" +"print(range(2, 5)) # Prints [2, 3, 4]\n" +"print(range(0, 6, 2)) # Prints [0, 2, 4]\n" +"print(range(4, 1, -1)) # Prints [4, 3, 2]\n" "[/codeblock]\n" "To iterate over an [Array] backwards, use:\n" "[codeblock]\n" "var array = [3, 6, 9]\n" -"var i := array.size() - 1\n" -"while i >= 0:\n" -" print(array[i])\n" -" i -= 1\n" +"for i in range(array.size(), 0, -1):\n" +" print(array[i - 1])\n" "[/codeblock]\n" "Output:\n" "[codeblock]\n" @@ -4184,17 +4184,24 @@ msgid "Maximum value for the mode enum." msgstr "" #: doc/classes/AnimatedSprite.xml -msgid "Sprite node that can use multiple textures for animation." +msgid "" +"Sprite node that contains multiple textures as frames to play for animation." msgstr "" #: doc/classes/AnimatedSprite.xml msgid "" -"Animations are created using a [SpriteFrames] resource, which can be " -"configured in the editor via the SpriteFrames panel.\n" -"[b]Note:[/b] You can associate a set of normal maps by creating additional " -"[SpriteFrames] resources with a [code]_normal[/code] suffix. For example, " -"having 2 [SpriteFrames] resources [code]run[/code] and [code]run_normal[/" -"code] will make it so the [code]run[/code] animation uses the normal map." +"[AnimatedSprite] is similar to the [Sprite] node, except it carries multiple " +"textures as animation frames. Animations are created using a [SpriteFrames] " +"resource, which allows you to import image files (or a folder containing " +"said files) to provide the animation frames for the sprite. The " +"[SpriteFrames] resource can be configured in the editor via the SpriteFrames " +"bottom panel.\n" +"[b]Note:[/b] You can associate a set of normal or specular maps by creating " +"additional [SpriteFrames] resources with a [code]_normal[/code] or " +"[code]_specular[/code] suffix. For example, having 3 [SpriteFrames] " +"resources [code]run[/code], [code]run_normal[/code], and [code]run_specular[/" +"code] will make it so the [code]run[/code] animation uses normal and " +"specular maps." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml @@ -4222,9 +4229,9 @@ msgstr "" msgid "Stops the current animation (does not reset the frame counter)." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml +#: doc/classes/AnimatedSprite.xml msgid "" -"The current animation from the [code]frames[/code] resource. If this value " +"The current animation from the [member frames] resource. If this value " "changes, the [code]frame[/code] counter is reset." msgstr "" @@ -4248,8 +4255,11 @@ msgstr "" msgid "The displayed animation frame's index." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml -msgid "The [SpriteFrames] resource containing the animation(s)." +#: doc/classes/AnimatedSprite.xml +msgid "" +"The [SpriteFrames] resource containing the animation(s). Allows you the " +"option to load, edit, clear, make unique and save the states of the " +"[SpriteFrames] resource." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/Sprite.xml @@ -4301,6 +4311,16 @@ msgid "" "provided, the current animation is played." msgstr "" +#: doc/classes/AnimatedSprite3D.xml +msgid "" +"The current animation from the [code]frames[/code] resource. If this value " +"changes, the [code]frame[/code] counter is reset." +msgstr "" + +#: doc/classes/AnimatedSprite3D.xml +msgid "The [SpriteFrames] resource containing the animation(s)." +msgstr "" + #: doc/classes/AnimatedTexture.xml msgid "Proxy texture for simple frame-based animations." msgstr "" @@ -4816,11 +4836,11 @@ msgstr "" msgid "No interpolation (nearest value)." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Linear interpolation." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Cubic interpolation." msgstr "" @@ -5855,7 +5875,10 @@ msgid "" "Seeks the animation to the [code]seconds[/code] point in time (in seconds). " "If [code]update[/code] is [code]true[/code], the animation updates too, " "otherwise it updates at process time. Events between the current frame and " -"[code]seconds[/code] are skipped." +"[code]seconds[/code] are skipped.\n" +"[b]Note:[/b] Seeking to the end of the animation doesn't emit [signal " +"animation_finished]. If you want to skip animation and emit the signal, use " +"[method advance]." msgstr "" #: doc/classes/AnimationPlayer.xml @@ -7045,7 +7068,10 @@ msgid "" "[code]0[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "Returns the number of times an element is in the array." msgstr "" @@ -7090,10 +7116,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array for a value and returns its index or [code]-1[/code] if " -"not found. Optionally, the initial search index can be passed." +"not found. Optionally, the initial search index can be passed. Returns " +"[code]-1[/code] if [code]from[/code] is out of bounds." msgstr "" #: doc/classes/Array.xml @@ -7231,11 +7261,15 @@ msgid "" "[code]null[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array in reverse order. Optionally, a start search index can be " "passed. If negative, the start index is considered relative to the end of " -"the array." +"the array. If the adjusted start index is out of bounds, this method " +"searches from the end of the array." msgstr "" #: doc/classes/Array.xml @@ -8370,7 +8404,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -8592,7 +8626,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -11707,17 +11741,17 @@ msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a normal vector in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a 3D position in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml @@ -13969,7 +14003,9 @@ msgstr "" #: doc/classes/CollisionPolygon2D.xml msgid "" "If [code]true[/code], only edges that face up, relative to " -"[CollisionPolygon2D]'s rotation, will collide with other objects." +"[CollisionPolygon2D]'s rotation, will collide with other objects.\n" +"[b]Note:[/b] This property has no effect if this [CollisionPolygon2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionPolygon2D.xml @@ -14065,7 +14101,9 @@ msgstr "" #: doc/classes/CollisionShape2D.xml msgid "" "Sets whether this collision shape should only detect collision on one side " -"(top or bottom)." +"(top or bottom).\n" +"[b]Note:[/b] This property has no effect if this [CollisionShape2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionShape2D.xml @@ -22471,6 +22509,13 @@ msgid "" "same behavior." msgstr "" +#: doc/classes/EditorSpinSlider.xml +#, fuzzy +msgid "If [code]true[/code], the slider is hidden." +msgstr "" +"Kung [code]true[/code], ang mga child nodes ay inaayos, kung hindi ang pag-" +"so-sort ay hindi pinapagana." + #: doc/classes/EditorVCSInterface.xml msgid "" "Version Control System (VCS) interface, which reads and writes to the local " @@ -26052,9 +26097,22 @@ msgid "Gradient's colors returned as a [PoolColorArray]." msgstr "" #: doc/classes/Gradient.xml +msgid "" +"Defines how the colors between points of the gradient are interpolated. See " +"[enum InterpolationMode] for available modes." +msgstr "" + +#: doc/classes/Gradient.xml msgid "Gradient's offsets returned as a [PoolRealArray]." msgstr "" +#: doc/classes/Gradient.xml +msgid "" +"Constant interpolation, color changes abruptly at each point and stays " +"uniform between. This might cause visible aliasing when used for a gradient " +"texture in some cases." +msgstr "" + #: doc/classes/GradientTexture.xml msgid "Gradient-filled texture." msgstr "" @@ -34579,13 +34637,13 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used easing from [enum Tween.EaseType]. If not set, the " "default easing is used from the [SceneTreeTween] that contains this Tweener." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used transition from [enum Tween.TransitionType]. If not " "set, the default transition is used from the [SceneTreeTween] that contains " @@ -35291,6 +35349,12 @@ msgid "Creates the agent." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]agent[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" @@ -35357,6 +35421,12 @@ msgid "Create a new map." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation agents [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns the map cell size." msgstr "" @@ -35383,6 +35453,12 @@ msgid "Returns the navigation path to reach the destination from the origin." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation regions [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns [code]true[/code] if the map is active." msgstr "" @@ -35407,6 +35483,12 @@ msgid "Creates a new region." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]region[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the map for the region." msgstr "" @@ -35879,17 +35961,57 @@ msgid "Represents the size of the [enum SourceGeometryMode] enum." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "This class is responsible for creating and clearing navigation meshes." +msgid "Helper class for creating and clearing navigation meshes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml msgid "" -"Bakes the navigation mesh. This will allow you to use pathfinding with the " -"navigation system." +"This class is responsible for creating and clearing 3D navigation meshes " +"used as [NavigationMesh] resources inside [NavigationMeshInstance]. The " +"[NavigationMeshGenerator] has very limited to no use for 2D as the " +"navigation mesh baking process expects 3D node types and 3D source geometry " +"to parse.\n" +"The entire navigation mesh baking is best done in a separate thread as the " +"voxelization, collision tests and mesh optimization steps involved are very " +"performance and time hungry operations.\n" +"Navigation mesh baking happens in multiple steps and the result depends on " +"3D source geometry and properties of the [NavigationMesh] resource. In the " +"first step, starting from a root node and depending on [NavigationMesh] " +"properties all valid 3D source geometry nodes are collected from the " +"[SceneTree]. Second, all collected nodes are parsed for their relevant 3D " +"geometry data and a combined 3D mesh is build. Due to the many different " +"types of parsable objects, from normal [MeshInstance]s to [CSGShape]s or " +"various [CollisionObject]s, some operations to collect geometry data can " +"trigger [VisualServer] and [PhysicsServer] synchronizations. Server " +"synchronization can have a negative effect on baking time or framerate as it " +"often involves [Mutex] locking for thread security. Many parsable objects " +"and the continuous synchronization with other threaded Servers can increase " +"the baking time significantly. On the other hand only a few but very large " +"and complex objects will take some time to prepare for the Servers which can " +"noticeably stall the next frame render. As a general rule the total amount " +"of parsable objects and their individual size and complexity should be " +"balanced to avoid framerate issues or very long baking times. The combined " +"mesh is then passed to the Recast Navigation Object to test the source " +"geometry for walkable terrain suitable to [NavigationMesh] agent properties " +"by creating a voxel world around the meshes bounding area.\n" +"The finalized navigation mesh is then returned and stored inside the " +"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "Clears the navigation mesh." +msgid "" +"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " +"nodes under the provided [code]root_node[/code] or a specific group of nodes " +"for potential source geometry. The parse behavior can be controlled with the " +"[member NavigationMesh.geometry/parsed_geometry_type] and [member " +"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[NavigationMesh] resource." +msgstr "" + +#: doc/classes/NavigationMeshGenerator.xml +msgid "" +"Removes all polygons and vertices from the provided [code]nav_mesh[/code] " +"resource." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -35910,7 +36032,10 @@ msgid "" "thread is useful because navigation baking is not a cheap operation. When it " "is completed, it automatically sets the new [NavigationMesh]. Please note " "that baking on separate thread may be very slow if geometry is parsed from " -"meshes as async access to each mesh involves heavy synchronization." +"meshes as async access to each mesh involves heavy synchronization. Also, " +"please note that baking on a separate thread is automatically disabled on " +"operating systems that cannot use threads (such as HTML5 with threads " +"disabled)." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -35956,6 +36081,10 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle.xml +msgid "Returns the [RID] of this obstacle on the [NavigationServer]." +msgstr "" + +#: doc/classes/NavigationObstacle.xml msgid "" "Sets the [Navigation] node used by the obstacle. Useful when you don't want " "to make the obstacle a child of a [Navigation] node." @@ -35992,6 +36121,10 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle2D.xml +msgid "Returns the [RID] of this obstacle on the [Navigation2DServer]." +msgstr "" + +#: doc/classes/NavigationObstacle2D.xml msgid "" "Sets the [Navigation2D] node used by the obstacle. Useful when you don't " "want to make the obstacle a child of a [Navigation2D] node." @@ -37176,7 +37309,7 @@ msgstr "" #: doc/classes/Node.xml msgid "" "Returns [code]true[/code] if the physics interpolated flag is set for this " -"Node (see [method set_physics_interpolated]).\n" +"Node (see [member physics_interpolation_mode]).\n" "[b]Note:[/b] Interpolation will only be active is both the flag is set " "[b]and[/b] physics interpolation is enabled within the [SceneTree]. This can " "be tested using [method is_physics_interpolated_and_enabled]." @@ -37184,8 +37317,8 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Returns [code]true[/code] if physics interpolation is enabled (see [method " -"set_physics_interpolated]) [b]and[/b] enabled in the [SceneTree].\n" +"Returns [code]true[/code] if physics interpolation is enabled (see [member " +"physics_interpolation_mode]) [b]and[/b] enabled in the [SceneTree].\n" "This is a convenience version of [method is_physics_interpolated] that also " "checks whether physics interpolation is enabled globally.\n" "See [member SceneTree.physics_interpolation] and [member ProjectSettings." @@ -37479,14 +37612,6 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Enables or disables physics interpolation per node, offering a finer grain " -"of control than turning physics interpolation on and off globally.\n" -"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " -"interpolation can sometimes give superior results." -msgstr "" - -#: doc/classes/Node.xml -msgid "" "Enables or disables physics (i.e. fixed framerate) processing. When a node " "is being processed, it will receive a [constant " "NOTIFICATION_PHYSICS_PROCESS] at a fixed (usually 60 FPS, see [member Engine." @@ -37619,6 +37744,15 @@ msgstr "" #: doc/classes/Node.xml msgid "" +"Allows enabling or disabling physics interpolation per node, offering a " +"finer grain of control than turning physics interpolation on and off " +"globally.\n" +"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " +"interpolation can sometimes give superior results." +msgstr "" + +#: doc/classes/Node.xml +msgid "" "The node's priority in the execution order of the enabled processing " "callbacks (i.e. [constant NOTIFICATION_PROCESS], [constant " "NOTIFICATION_PHYSICS_PROCESS] and their internal counterparts). Nodes whose " @@ -37780,6 +37914,24 @@ msgid "Continue to process regardless of the [SceneTree] pause state." msgstr "" #: doc/classes/Node.xml +msgid "" +"Inherits physics interpolation mode from the node's parent. For the root " +"node, it is equivalent to [constant PHYSICS_INTERPOLATION_MODE_ON]. Default." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn off physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn on physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml msgid "Duplicate the node's signals." msgstr "" @@ -39020,7 +39172,7 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" -"Returns the ID of the selected item, or [code]0[/code] if no item is " +"Returns the ID of the selected item, or [code]-1[/code] if no item is " "selected." msgstr "" @@ -39042,7 +39194,8 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" "Selects an item by index and makes it the current item. This will work even " -"if the item is disabled." +"if the item is disabled.\n" +"Passing [code]-1[/code] as the index deselects any currently selected item." msgstr "" #: doc/classes/OptionButton.xml @@ -44372,6 +44525,15 @@ msgid "" "should always be preferred." msgstr "" +#: doc/classes/PoolByteArray.xml doc/classes/PoolColorArray.xml +#: doc/classes/PoolIntArray.xml doc/classes/PoolRealArray.xml +#: doc/classes/PoolStringArray.xml doc/classes/PoolVector2Array.xml +#: doc/classes/PoolVector3Array.xml +msgid "" +"Returns [code]true[/code] if the array contains the given value.\n" +"[b]Note:[/b] This is equivalent to using the [code]in[/code] operator." +msgstr "" + #: doc/classes/PoolByteArray.xml msgid "" "Returns a hexadecimal representation of this array as a [String].\n" @@ -45165,6 +45327,10 @@ msgid "[Font] used for the menu items." msgstr "" #: doc/classes/PopupMenu.xml +msgid "[Font] used for the labeled separator." +msgstr "" + +#: doc/classes/PopupMenu.xml msgid "[Texture] icon for the checked checkbox items." msgstr "" @@ -48610,19 +48776,6 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used easing from [enum Tween.EaseType]. If not set, the " -"default easing is used from the [Tween] that contains this Tweener." -msgstr "" - -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used transition from [enum Tween.TransitionType]. If not " -"set, the default transition is used from the [Tween] that contains this " -"Tweener." -msgstr "" - #: doc/classes/ProximityGroup.xml msgid "General-purpose 3D proximity detection node." msgstr "" @@ -53452,8 +53605,15 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape touches another. If there are " -"no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape touches another.\n" +"If there are no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the shape to check collisions with " "([code]with_shape[/code]), and the transformation matrix of that shape " @@ -53474,8 +53634,16 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape would touch another, if a " -"given movement was applied. If there are no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape would touch another, " +"if a given movement was applied.\n" +"If there would be no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the movement to test on this shape " "([code]local_motion[/code]), the shape to check collisions with " diff --git a/doc/translations/tr.po b/doc/translations/tr.po index 43add1da92..1ce6082001 100644 --- a/doc/translations/tr.po +++ b/doc/translations/tr.po @@ -1440,12 +1440,14 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml +#, fuzzy msgid "" -"Random range, any floating point value between [code]from[/code] and " -"[code]to[/code].\n" +"Returns a random floating point value between [code]from[/code] and " +"[code]to[/code] (both endpoints inclusive).\n" "[codeblock]\n" "prints(rand_range(0, 1), rand_range(0, 1)) # Prints e.g. 0.135591 0.405263\n" -"[/codeblock]" +"[/codeblock]\n" +"[b]Note:[/b] This is equivalent to [code]randf() * (to - from) + from[/code]." msgstr "" "[code]from[/code] ve [code]to[/code] deÄŸerleri arasında rastgele bir kayan " "noktalı sayı üretir.\n" @@ -1523,37 +1525,36 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Returns an array with the given range. Range can be 1 argument [code]N[/" -"code] (0 to [code]N[/code] - 1), two arguments ([code]initial[/code], " -"[code]final - 1[/code]) or three arguments ([code]initial[/code], " -"[code]final - 1[/code], [code]increment[/code]). Returns an empty array if " -"the range isn't valid (e.g. [code]range(2, 5, -1)[/code] or [code]range(5, " -"5, 1)[/code]).\n" -"Returns an array with the given range. [code]range()[/code] can have 1 " -"argument N ([code]0[/code] to [code]N - 1[/code]), two arguments " -"([code]initial[/code], [code]final - 1[/code]) or three arguments " -"([code]initial[/code], [code]final - 1[/code], [code]increment[/code]). " -"[code]increment[/code] can be negative. If [code]increment[/code] is " -"negative, [code]final - 1[/code] will become [code]final + 1[/code]. Also, " -"the initial value must be greater than the final value for the loop to run.\n" -"[codeblock]\n" -"print(range(4))\n" -"print(range(2, 5))\n" -"print(range(0, 6, 2))\n" -"[/codeblock]\n" -"Output:\n" +"Returns an array with the given range. [method range] can be called in three " +"ways:\n" +"[code]range(n: int)[/code]: Starts from 0, increases by steps of 1, and " +"stops [i]before[/i] [code]n[/code]. The argument [code]n[/code] is " +"[b]exclusive[/b].\n" +"[code]range(b: int, n: int)[/code]: Starts from [code]b[/code], increases by " +"steps of 1, and stops [i]before[/i] [code]n[/code]. The arguments [code]b[/" +"code] and [code]n[/code] are [b]inclusive[/b] and [b]exclusive[/b], " +"respectively.\n" +"[code]range(b: int, n: int, s: int)[/code]: Starts from [code]b[/code], " +"increases/decreases by steps of [code]s[/code], and stops [i]before[/i] " +"[code]n[/code]. The arguments [code]b[/code] and [code]n[/code] are " +"[b]inclusive[/b] and [b]exclusive[/b], respectively. The argument [code]s[/" +"code] [b]can[/b] be negative, but not [code]0[/code]. If [code]s[/code] is " +"[code]0[/code], an error message is printed.\n" +"[method range] converts all arguments to [int] before processing.\n" +"[b]Note:[/b] Returns an empty array if no value meets the value constraint " +"(e.g. [code]range(2, 5, -1)[/code] or [code]range(5, 5, 1)[/code]).\n" +"Examples:\n" "[codeblock]\n" -"[0, 1, 2, 3]\n" -"[2, 3, 4]\n" -"[0, 2, 4]\n" +"print(range(4)) # Prints [0, 1, 2, 3]\n" +"print(range(2, 5)) # Prints [2, 3, 4]\n" +"print(range(0, 6, 2)) # Prints [0, 2, 4]\n" +"print(range(4, 1, -1)) # Prints [4, 3, 2]\n" "[/codeblock]\n" "To iterate over an [Array] backwards, use:\n" "[codeblock]\n" "var array = [3, 6, 9]\n" -"var i := array.size() - 1\n" -"while i >= 0:\n" -" print(array[i])\n" -" i -= 1\n" +"for i in range(array.size(), 0, -1):\n" +" print(array[i - 1])\n" "[/codeblock]\n" "Output:\n" "[codeblock]\n" @@ -4879,17 +4880,24 @@ msgid "Maximum value for the mode enum." msgstr "" #: doc/classes/AnimatedSprite.xml -msgid "Sprite node that can use multiple textures for animation." +msgid "" +"Sprite node that contains multiple textures as frames to play for animation." msgstr "" #: doc/classes/AnimatedSprite.xml msgid "" -"Animations are created using a [SpriteFrames] resource, which can be " -"configured in the editor via the SpriteFrames panel.\n" -"[b]Note:[/b] You can associate a set of normal maps by creating additional " -"[SpriteFrames] resources with a [code]_normal[/code] suffix. For example, " -"having 2 [SpriteFrames] resources [code]run[/code] and [code]run_normal[/" -"code] will make it so the [code]run[/code] animation uses the normal map." +"[AnimatedSprite] is similar to the [Sprite] node, except it carries multiple " +"textures as animation frames. Animations are created using a [SpriteFrames] " +"resource, which allows you to import image files (or a folder containing " +"said files) to provide the animation frames for the sprite. The " +"[SpriteFrames] resource can be configured in the editor via the SpriteFrames " +"bottom panel.\n" +"[b]Note:[/b] You can associate a set of normal or specular maps by creating " +"additional [SpriteFrames] resources with a [code]_normal[/code] or " +"[code]_specular[/code] suffix. For example, having 3 [SpriteFrames] " +"resources [code]run[/code], [code]run_normal[/code], and [code]run_specular[/" +"code] will make it so the [code]run[/code] animation uses normal and " +"specular maps." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml @@ -4917,9 +4925,9 @@ msgstr "" msgid "Stops the current animation (does not reset the frame counter)." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml +#: doc/classes/AnimatedSprite.xml msgid "" -"The current animation from the [code]frames[/code] resource. If this value " +"The current animation from the [member frames] resource. If this value " "changes, the [code]frame[/code] counter is reset." msgstr "" @@ -4943,8 +4951,11 @@ msgstr "" msgid "The displayed animation frame's index." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml -msgid "The [SpriteFrames] resource containing the animation(s)." +#: doc/classes/AnimatedSprite.xml +msgid "" +"The [SpriteFrames] resource containing the animation(s). Allows you the " +"option to load, edit, clear, make unique and save the states of the " +"[SpriteFrames] resource." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/Sprite.xml @@ -4996,6 +5007,16 @@ msgid "" "provided, the current animation is played." msgstr "" +#: doc/classes/AnimatedSprite3D.xml +msgid "" +"The current animation from the [code]frames[/code] resource. If this value " +"changes, the [code]frame[/code] counter is reset." +msgstr "" + +#: doc/classes/AnimatedSprite3D.xml +msgid "The [SpriteFrames] resource containing the animation(s)." +msgstr "" + #: doc/classes/AnimatedTexture.xml msgid "Proxy texture for simple frame-based animations." msgstr "" @@ -5512,11 +5533,11 @@ msgstr "" msgid "No interpolation (nearest value)." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Linear interpolation." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Cubic interpolation." msgstr "" @@ -6552,7 +6573,10 @@ msgid "" "Seeks the animation to the [code]seconds[/code] point in time (in seconds). " "If [code]update[/code] is [code]true[/code], the animation updates too, " "otherwise it updates at process time. Events between the current frame and " -"[code]seconds[/code] are skipped." +"[code]seconds[/code] are skipped.\n" +"[b]Note:[/b] Seeking to the end of the animation doesn't emit [signal " +"animation_finished]. If you want to skip animation and emit the signal, use " +"[method advance]." msgstr "" #: doc/classes/AnimationPlayer.xml @@ -7742,7 +7766,10 @@ msgid "" "[code]0[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "Returns the number of times an element is in the array." msgstr "" @@ -7787,10 +7814,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array for a value and returns its index or [code]-1[/code] if " -"not found. Optionally, the initial search index can be passed." +"not found. Optionally, the initial search index can be passed. Returns " +"[code]-1[/code] if [code]from[/code] is out of bounds." msgstr "" #: doc/classes/Array.xml @@ -7928,11 +7959,15 @@ msgid "" "[code]null[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array in reverse order. Optionally, a start search index can be " "passed. If negative, the start index is considered relative to the end of " -"the array." +"the array. If the adjusted start index is out of bounds, this method " +"searches from the end of the array." msgstr "" #: doc/classes/Array.xml @@ -9067,7 +9102,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -9289,7 +9324,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -12403,17 +12438,17 @@ msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a normal vector in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a 3D position in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml @@ -14673,7 +14708,9 @@ msgstr "" #: doc/classes/CollisionPolygon2D.xml msgid "" "If [code]true[/code], only edges that face up, relative to " -"[CollisionPolygon2D]'s rotation, will collide with other objects." +"[CollisionPolygon2D]'s rotation, will collide with other objects.\n" +"[b]Note:[/b] This property has no effect if this [CollisionPolygon2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionPolygon2D.xml @@ -14769,7 +14806,9 @@ msgstr "" #: doc/classes/CollisionShape2D.xml msgid "" "Sets whether this collision shape should only detect collision on one side " -"(top or bottom)." +"(top or bottom).\n" +"[b]Note:[/b] This property has no effect if this [CollisionShape2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionShape2D.xml @@ -23189,6 +23228,12 @@ msgid "" "same behavior." msgstr "" +#: doc/classes/EditorSpinSlider.xml +#, fuzzy +msgid "If [code]true[/code], the slider is hidden." +msgstr "" +"EÄŸer [code]true[/code] ise düğümler sıraya sokulur, yoksa sıraya sokulmaz." + #: doc/classes/EditorVCSInterface.xml msgid "" "Version Control System (VCS) interface, which reads and writes to the local " @@ -26782,9 +26827,22 @@ msgid "Gradient's colors returned as a [PoolColorArray]." msgstr "" #: doc/classes/Gradient.xml +msgid "" +"Defines how the colors between points of the gradient are interpolated. See " +"[enum InterpolationMode] for available modes." +msgstr "" + +#: doc/classes/Gradient.xml msgid "Gradient's offsets returned as a [PoolRealArray]." msgstr "" +#: doc/classes/Gradient.xml +msgid "" +"Constant interpolation, color changes abruptly at each point and stays " +"uniform between. This might cause visible aliasing when used for a gradient " +"texture in some cases." +msgstr "" + #: doc/classes/GradientTexture.xml msgid "Gradient-filled texture." msgstr "" @@ -35321,13 +35379,13 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used easing from [enum Tween.EaseType]. If not set, the " "default easing is used from the [SceneTreeTween] that contains this Tweener." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used transition from [enum Tween.TransitionType]. If not " "set, the default transition is used from the [SceneTreeTween] that contains " @@ -36039,6 +36097,12 @@ msgid "Creates the agent." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]agent[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" @@ -36110,6 +36174,12 @@ msgid "Create a new map." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation agents [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns the map cell size." msgstr "Verilen bir deÄŸerin ark-sinüsünü döndürür." @@ -36137,6 +36207,12 @@ msgid "Returns the navigation path to reach the destination from the origin." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation regions [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns [code]true[/code] if the map is active." msgstr "" @@ -36161,6 +36237,12 @@ msgid "Creates a new region." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]region[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Sets the map for the region." msgstr "Verilen deÄŸerin sinüsünü döndürür." @@ -36641,19 +36723,60 @@ msgid "Represents the size of the [enum SourceGeometryMode] enum." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "This class is responsible for creating and clearing navigation meshes." +msgid "Helper class for creating and clearing navigation meshes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml msgid "" -"Bakes the navigation mesh. This will allow you to use pathfinding with the " -"navigation system." +"This class is responsible for creating and clearing 3D navigation meshes " +"used as [NavigationMesh] resources inside [NavigationMeshInstance]. The " +"[NavigationMeshGenerator] has very limited to no use for 2D as the " +"navigation mesh baking process expects 3D node types and 3D source geometry " +"to parse.\n" +"The entire navigation mesh baking is best done in a separate thread as the " +"voxelization, collision tests and mesh optimization steps involved are very " +"performance and time hungry operations.\n" +"Navigation mesh baking happens in multiple steps and the result depends on " +"3D source geometry and properties of the [NavigationMesh] resource. In the " +"first step, starting from a root node and depending on [NavigationMesh] " +"properties all valid 3D source geometry nodes are collected from the " +"[SceneTree]. Second, all collected nodes are parsed for their relevant 3D " +"geometry data and a combined 3D mesh is build. Due to the many different " +"types of parsable objects, from normal [MeshInstance]s to [CSGShape]s or " +"various [CollisionObject]s, some operations to collect geometry data can " +"trigger [VisualServer] and [PhysicsServer] synchronizations. Server " +"synchronization can have a negative effect on baking time or framerate as it " +"often involves [Mutex] locking for thread security. Many parsable objects " +"and the continuous synchronization with other threaded Servers can increase " +"the baking time significantly. On the other hand only a few but very large " +"and complex objects will take some time to prepare for the Servers which can " +"noticeably stall the next frame render. As a general rule the total amount " +"of parsable objects and their individual size and complexity should be " +"balanced to avoid framerate issues or very long baking times. The combined " +"mesh is then passed to the Recast Navigation Object to test the source " +"geometry for walkable terrain suitable to [NavigationMesh] agent properties " +"by creating a voxel world around the meshes bounding area.\n" +"The finalized navigation mesh is then returned and stored inside the " +"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "Clears the navigation mesh." +msgid "" +"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " +"nodes under the provided [code]root_node[/code] or a specific group of nodes " +"for potential source geometry. The parse behavior can be controlled with the " +"[member NavigationMesh.geometry/parsed_geometry_type] and [member " +"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[NavigationMesh] resource." msgstr "" +#: doc/classes/NavigationMeshGenerator.xml +#, fuzzy +msgid "" +"Removes all polygons and vertices from the provided [code]nav_mesh[/code] " +"resource." +msgstr "Verilen deÄŸerin sinüsünü döndürür." + #: doc/classes/NavigationMeshInstance.xml msgid "An instance of a [NavigationMesh]." msgstr "" @@ -36672,7 +36795,10 @@ msgid "" "thread is useful because navigation baking is not a cheap operation. When it " "is completed, it automatically sets the new [NavigationMesh]. Please note " "that baking on separate thread may be very slow if geometry is parsed from " -"meshes as async access to each mesh involves heavy synchronization." +"meshes as async access to each mesh involves heavy synchronization. Also, " +"please note that baking on a separate thread is automatically disabled on " +"operating systems that cannot use threads (such as HTML5 with threads " +"disabled)." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -36719,6 +36845,11 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle.xml +#, fuzzy +msgid "Returns the [RID] of this obstacle on the [NavigationServer]." +msgstr "Verilen deÄŸerin sinüsünü döndürür." + +#: doc/classes/NavigationObstacle.xml msgid "" "Sets the [Navigation] node used by the obstacle. Useful when you don't want " "to make the obstacle a child of a [Navigation] node." @@ -36755,6 +36886,11 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle2D.xml +#, fuzzy +msgid "Returns the [RID] of this obstacle on the [Navigation2DServer]." +msgstr "Verilen deÄŸerin sinüsünü döndürür." + +#: doc/classes/NavigationObstacle2D.xml msgid "" "Sets the [Navigation2D] node used by the obstacle. Useful when you don't " "want to make the obstacle a child of a [Navigation2D] node." @@ -37943,7 +38079,7 @@ msgstr "" #: doc/classes/Node.xml msgid "" "Returns [code]true[/code] if the physics interpolated flag is set for this " -"Node (see [method set_physics_interpolated]).\n" +"Node (see [member physics_interpolation_mode]).\n" "[b]Note:[/b] Interpolation will only be active is both the flag is set " "[b]and[/b] physics interpolation is enabled within the [SceneTree]. This can " "be tested using [method is_physics_interpolated_and_enabled]." @@ -37951,8 +38087,8 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Returns [code]true[/code] if physics interpolation is enabled (see [method " -"set_physics_interpolated]) [b]and[/b] enabled in the [SceneTree].\n" +"Returns [code]true[/code] if physics interpolation is enabled (see [member " +"physics_interpolation_mode]) [b]and[/b] enabled in the [SceneTree].\n" "This is a convenience version of [method is_physics_interpolated] that also " "checks whether physics interpolation is enabled globally.\n" "See [member SceneTree.physics_interpolation] and [member ProjectSettings." @@ -38246,14 +38382,6 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Enables or disables physics interpolation per node, offering a finer grain " -"of control than turning physics interpolation on and off globally.\n" -"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " -"interpolation can sometimes give superior results." -msgstr "" - -#: doc/classes/Node.xml -msgid "" "Enables or disables physics (i.e. fixed framerate) processing. When a node " "is being processed, it will receive a [constant " "NOTIFICATION_PHYSICS_PROCESS] at a fixed (usually 60 FPS, see [member Engine." @@ -38386,6 +38514,15 @@ msgstr "" #: doc/classes/Node.xml msgid "" +"Allows enabling or disabling physics interpolation per node, offering a " +"finer grain of control than turning physics interpolation on and off " +"globally.\n" +"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " +"interpolation can sometimes give superior results." +msgstr "" + +#: doc/classes/Node.xml +msgid "" "The node's priority in the execution order of the enabled processing " "callbacks (i.e. [constant NOTIFICATION_PROCESS], [constant " "NOTIFICATION_PHYSICS_PROCESS] and their internal counterparts). Nodes whose " @@ -38547,6 +38684,24 @@ msgid "Continue to process regardless of the [SceneTree] pause state." msgstr "" #: doc/classes/Node.xml +msgid "" +"Inherits physics interpolation mode from the node's parent. For the root " +"node, it is equivalent to [constant PHYSICS_INTERPOLATION_MODE_ON]. Default." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn off physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn on physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml msgid "Duplicate the node's signals." msgstr "" @@ -39788,7 +39943,7 @@ msgstr "Verilen deÄŸerin sinüsünü döndürür." #: doc/classes/OptionButton.xml msgid "" -"Returns the ID of the selected item, or [code]0[/code] if no item is " +"Returns the ID of the selected item, or [code]-1[/code] if no item is " "selected." msgstr "" @@ -39810,7 +39965,8 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" "Selects an item by index and makes it the current item. This will work even " -"if the item is disabled." +"if the item is disabled.\n" +"Passing [code]-1[/code] as the index deselects any currently selected item." msgstr "" #: doc/classes/OptionButton.xml @@ -45173,6 +45329,15 @@ msgid "" "should always be preferred." msgstr "" +#: doc/classes/PoolByteArray.xml doc/classes/PoolColorArray.xml +#: doc/classes/PoolIntArray.xml doc/classes/PoolRealArray.xml +#: doc/classes/PoolStringArray.xml doc/classes/PoolVector2Array.xml +#: doc/classes/PoolVector3Array.xml +msgid "" +"Returns [code]true[/code] if the array contains the given value.\n" +"[b]Note:[/b] This is equivalent to using the [code]in[/code] operator." +msgstr "" + #: doc/classes/PoolByteArray.xml msgid "" "Returns a hexadecimal representation of this array as a [String].\n" @@ -45967,6 +46132,10 @@ msgid "[Font] used for the menu items." msgstr "" #: doc/classes/PopupMenu.xml +msgid "[Font] used for the labeled separator." +msgstr "" + +#: doc/classes/PopupMenu.xml msgid "[Texture] icon for the checked checkbox items." msgstr "" @@ -49413,19 +49582,6 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used easing from [enum Tween.EaseType]. If not set, the " -"default easing is used from the [Tween] that contains this Tweener." -msgstr "" - -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used transition from [enum Tween.TransitionType]. If not " -"set, the default transition is used from the [Tween] that contains this " -"Tweener." -msgstr "" - #: doc/classes/ProximityGroup.xml msgid "General-purpose 3D proximity detection node." msgstr "" @@ -54264,8 +54420,15 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape touches another. If there are " -"no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape touches another.\n" +"If there are no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the shape to check collisions with " "([code]with_shape[/code]), and the transformation matrix of that shape " @@ -54286,8 +54449,16 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape would touch another, if a " -"given movement was applied. If there are no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape would touch another, " +"if a given movement was applied.\n" +"If there would be no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the movement to test on this shape " "([code]local_motion[/code]), the shape to check collisions with " diff --git a/doc/translations/uk.po b/doc/translations/uk.po index 9ec0d5c89f..4122854441 100644 --- a/doc/translations/uk.po +++ b/doc/translations/uk.po @@ -17,8 +17,8 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine class reference\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" -"PO-Revision-Date: 2022-04-08 07:11+0000\n" -"Last-Translator: Гліб Соколов <ramithes@i.ua>\n" +"PO-Revision-Date: 2022-05-15 09:39+0000\n" +"Last-Translator: МироÑлав <hlopukmyroslav@gmail.com>\n" "Language-Team: Ukrainian <https://hosted.weblate.org/projects/godot-engine/" "godot-class-reference/uk/>\n" "Language: uk\n" @@ -27,7 +27,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.12-dev\n" +"X-Generator: Weblate 4.13-dev\n" #: doc/tools/make_rst.py msgid "Description" @@ -1078,11 +1078,12 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Random range, any floating point value between [code]from[/code] and " -"[code]to[/code].\n" +"Returns a random floating point value between [code]from[/code] and " +"[code]to[/code] (both endpoints inclusive).\n" "[codeblock]\n" "prints(rand_range(0, 1), rand_range(0, 1)) # Prints e.g. 0.135591 0.405263\n" -"[/codeblock]" +"[/codeblock]\n" +"[b]Note:[/b] This is equivalent to [code]randf() * (to - from) + from[/code]." msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml @@ -1126,37 +1127,36 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Returns an array with the given range. Range can be 1 argument [code]N[/" -"code] (0 to [code]N[/code] - 1), two arguments ([code]initial[/code], " -"[code]final - 1[/code]) or three arguments ([code]initial[/code], " -"[code]final - 1[/code], [code]increment[/code]). Returns an empty array if " -"the range isn't valid (e.g. [code]range(2, 5, -1)[/code] or [code]range(5, " -"5, 1)[/code]).\n" -"Returns an array with the given range. [code]range()[/code] can have 1 " -"argument N ([code]0[/code] to [code]N - 1[/code]), two arguments " -"([code]initial[/code], [code]final - 1[/code]) or three arguments " -"([code]initial[/code], [code]final - 1[/code], [code]increment[/code]). " -"[code]increment[/code] can be negative. If [code]increment[/code] is " -"negative, [code]final - 1[/code] will become [code]final + 1[/code]. Also, " -"the initial value must be greater than the final value for the loop to run.\n" -"[codeblock]\n" -"print(range(4))\n" -"print(range(2, 5))\n" -"print(range(0, 6, 2))\n" -"[/codeblock]\n" -"Output:\n" +"Returns an array with the given range. [method range] can be called in three " +"ways:\n" +"[code]range(n: int)[/code]: Starts from 0, increases by steps of 1, and " +"stops [i]before[/i] [code]n[/code]. The argument [code]n[/code] is " +"[b]exclusive[/b].\n" +"[code]range(b: int, n: int)[/code]: Starts from [code]b[/code], increases by " +"steps of 1, and stops [i]before[/i] [code]n[/code]. The arguments [code]b[/" +"code] and [code]n[/code] are [b]inclusive[/b] and [b]exclusive[/b], " +"respectively.\n" +"[code]range(b: int, n: int, s: int)[/code]: Starts from [code]b[/code], " +"increases/decreases by steps of [code]s[/code], and stops [i]before[/i] " +"[code]n[/code]. The arguments [code]b[/code] and [code]n[/code] are " +"[b]inclusive[/b] and [b]exclusive[/b], respectively. The argument [code]s[/" +"code] [b]can[/b] be negative, but not [code]0[/code]. If [code]s[/code] is " +"[code]0[/code], an error message is printed.\n" +"[method range] converts all arguments to [int] before processing.\n" +"[b]Note:[/b] Returns an empty array if no value meets the value constraint " +"(e.g. [code]range(2, 5, -1)[/code] or [code]range(5, 5, 1)[/code]).\n" +"Examples:\n" "[codeblock]\n" -"[0, 1, 2, 3]\n" -"[2, 3, 4]\n" -"[0, 2, 4]\n" +"print(range(4)) # Prints [0, 1, 2, 3]\n" +"print(range(2, 5)) # Prints [2, 3, 4]\n" +"print(range(0, 6, 2)) # Prints [0, 2, 4]\n" +"print(range(4, 1, -1)) # Prints [4, 3, 2]\n" "[/codeblock]\n" "To iterate over an [Array] backwards, use:\n" "[codeblock]\n" "var array = [3, 6, 9]\n" -"var i := array.size() - 1\n" -"while i >= 0:\n" -" print(array[i])\n" -" i -= 1\n" +"for i in range(array.size(), 0, -1):\n" +" print(array[i - 1])\n" "[/codeblock]\n" "Output:\n" "[codeblock]\n" @@ -4258,17 +4258,24 @@ msgid "Maximum value for the mode enum." msgstr "" #: doc/classes/AnimatedSprite.xml -msgid "Sprite node that can use multiple textures for animation." +msgid "" +"Sprite node that contains multiple textures as frames to play for animation." msgstr "" #: doc/classes/AnimatedSprite.xml msgid "" -"Animations are created using a [SpriteFrames] resource, which can be " -"configured in the editor via the SpriteFrames panel.\n" -"[b]Note:[/b] You can associate a set of normal maps by creating additional " -"[SpriteFrames] resources with a [code]_normal[/code] suffix. For example, " -"having 2 [SpriteFrames] resources [code]run[/code] and [code]run_normal[/" -"code] will make it so the [code]run[/code] animation uses the normal map." +"[AnimatedSprite] is similar to the [Sprite] node, except it carries multiple " +"textures as animation frames. Animations are created using a [SpriteFrames] " +"resource, which allows you to import image files (or a folder containing " +"said files) to provide the animation frames for the sprite. The " +"[SpriteFrames] resource can be configured in the editor via the SpriteFrames " +"bottom panel.\n" +"[b]Note:[/b] You can associate a set of normal or specular maps by creating " +"additional [SpriteFrames] resources with a [code]_normal[/code] or " +"[code]_specular[/code] suffix. For example, having 3 [SpriteFrames] " +"resources [code]run[/code], [code]run_normal[/code], and [code]run_specular[/" +"code] will make it so the [code]run[/code] animation uses normal and " +"specular maps." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml @@ -4296,9 +4303,9 @@ msgstr "" msgid "Stops the current animation (does not reset the frame counter)." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml +#: doc/classes/AnimatedSprite.xml msgid "" -"The current animation from the [code]frames[/code] resource. If this value " +"The current animation from the [member frames] resource. If this value " "changes, the [code]frame[/code] counter is reset." msgstr "" @@ -4322,8 +4329,11 @@ msgstr "" msgid "The displayed animation frame's index." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml -msgid "The [SpriteFrames] resource containing the animation(s)." +#: doc/classes/AnimatedSprite.xml +msgid "" +"The [SpriteFrames] resource containing the animation(s). Allows you the " +"option to load, edit, clear, make unique and save the states of the " +"[SpriteFrames] resource." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/Sprite.xml @@ -4375,6 +4385,16 @@ msgid "" "provided, the current animation is played." msgstr "" +#: doc/classes/AnimatedSprite3D.xml +msgid "" +"The current animation from the [code]frames[/code] resource. If this value " +"changes, the [code]frame[/code] counter is reset." +msgstr "" + +#: doc/classes/AnimatedSprite3D.xml +msgid "The [SpriteFrames] resource containing the animation(s)." +msgstr "" + #: doc/classes/AnimatedTexture.xml msgid "Proxy texture for simple frame-based animations." msgstr "" @@ -4891,11 +4911,11 @@ msgstr "" msgid "No interpolation (nearest value)." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Linear interpolation." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Cubic interpolation." msgstr "" @@ -5931,7 +5951,10 @@ msgid "" "Seeks the animation to the [code]seconds[/code] point in time (in seconds). " "If [code]update[/code] is [code]true[/code], the animation updates too, " "otherwise it updates at process time. Events between the current frame and " -"[code]seconds[/code] are skipped." +"[code]seconds[/code] are skipped.\n" +"[b]Note:[/b] Seeking to the end of the animation doesn't emit [signal " +"animation_finished]. If you want to skip animation and emit the signal, use " +"[method advance]." msgstr "" #: doc/classes/AnimationPlayer.xml @@ -7127,7 +7150,10 @@ msgid "" "[code]0[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "Returns the number of times an element is in the array." msgstr "" @@ -7172,10 +7198,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array for a value and returns its index or [code]-1[/code] if " -"not found. Optionally, the initial search index can be passed." +"not found. Optionally, the initial search index can be passed. Returns " +"[code]-1[/code] if [code]from[/code] is out of bounds." msgstr "" #: doc/classes/Array.xml @@ -7313,11 +7343,15 @@ msgid "" "[code]null[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array in reverse order. Optionally, a start search index can be " "passed. If negative, the start index is considered relative to the end of " -"the array." +"the array. If the adjusted start index is out of bounds, this method " +"searches from the end of the array." msgstr "" #: doc/classes/Array.xml @@ -8452,7 +8486,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -8674,7 +8708,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -11789,17 +11823,17 @@ msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a normal vector in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a 3D position in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml @@ -14054,7 +14088,9 @@ msgstr "" #: doc/classes/CollisionPolygon2D.xml msgid "" "If [code]true[/code], only edges that face up, relative to " -"[CollisionPolygon2D]'s rotation, will collide with other objects." +"[CollisionPolygon2D]'s rotation, will collide with other objects.\n" +"[b]Note:[/b] This property has no effect if this [CollisionPolygon2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionPolygon2D.xml @@ -14150,7 +14186,9 @@ msgstr "" #: doc/classes/CollisionShape2D.xml msgid "" "Sets whether this collision shape should only detect collision on one side " -"(top or bottom)." +"(top or bottom).\n" +"[b]Note:[/b] This property has no effect if this [CollisionShape2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionShape2D.xml @@ -18042,7 +18080,7 @@ msgstr "" #: modules/csg/doc_classes/CSGShape.xml modules/csg/doc_classes/CSGSphere.xml #: modules/csg/doc_classes/CSGTorus.xml msgid "Prototyping levels with CSG" -msgstr "" +msgstr "ÐŸÑ€Ð¾Ñ‚Ð¾Ñ‚Ð¸Ð¿ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€Ñ–Ð²Ð½Ñ–Ð² з CSG" #: modules/csg/doc_classes/CSGBox.xml msgid "Depth of the box measured from the center of the box." @@ -22566,6 +22604,11 @@ msgid "" "same behavior." msgstr "" +#: doc/classes/EditorSpinSlider.xml +#, fuzzy +msgid "If [code]true[/code], the slider is hidden." +msgstr "Повертає коÑÐ¸Ð½ÑƒÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°." + #: doc/classes/EditorVCSInterface.xml msgid "" "Version Control System (VCS) interface, which reads and writes to the local " @@ -26151,9 +26194,22 @@ msgid "Gradient's colors returned as a [PoolColorArray]." msgstr "" #: doc/classes/Gradient.xml +msgid "" +"Defines how the colors between points of the gradient are interpolated. See " +"[enum InterpolationMode] for available modes." +msgstr "" + +#: doc/classes/Gradient.xml msgid "Gradient's offsets returned as a [PoolRealArray]." msgstr "" +#: doc/classes/Gradient.xml +msgid "" +"Constant interpolation, color changes abruptly at each point and stays " +"uniform between. This might cause visible aliasing when used for a gradient " +"texture in some cases." +msgstr "" + #: doc/classes/GradientTexture.xml msgid "Gradient-filled texture." msgstr "" @@ -34690,13 +34746,13 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used easing from [enum Tween.EaseType]. If not set, the " "default easing is used from the [SceneTreeTween] that contains this Tweener." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used transition from [enum Tween.TransitionType]. If not " "set, the default transition is used from the [SceneTreeTween] that contains " @@ -35409,6 +35465,12 @@ msgid "Creates the agent." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]agent[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" @@ -35478,6 +35540,12 @@ msgid "Create a new map." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation agents [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns the map cell size." msgstr "Повертає аркÑÐ¸Ð½ÑƒÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°." @@ -35505,6 +35573,12 @@ msgid "Returns the navigation path to reach the destination from the origin." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation regions [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns [code]true[/code] if the map is active." msgstr "Повертає коÑÐ¸Ð½ÑƒÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°." @@ -35528,6 +35602,12 @@ msgid "Creates a new region." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]region[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Sets the map for the region." msgstr "Повертає ÑÐ¸Ð½ÑƒÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°." @@ -36007,19 +36087,60 @@ msgid "Represents the size of the [enum SourceGeometryMode] enum." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "This class is responsible for creating and clearing navigation meshes." +msgid "Helper class for creating and clearing navigation meshes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml msgid "" -"Bakes the navigation mesh. This will allow you to use pathfinding with the " -"navigation system." +"This class is responsible for creating and clearing 3D navigation meshes " +"used as [NavigationMesh] resources inside [NavigationMeshInstance]. The " +"[NavigationMeshGenerator] has very limited to no use for 2D as the " +"navigation mesh baking process expects 3D node types and 3D source geometry " +"to parse.\n" +"The entire navigation mesh baking is best done in a separate thread as the " +"voxelization, collision tests and mesh optimization steps involved are very " +"performance and time hungry operations.\n" +"Navigation mesh baking happens in multiple steps and the result depends on " +"3D source geometry and properties of the [NavigationMesh] resource. In the " +"first step, starting from a root node and depending on [NavigationMesh] " +"properties all valid 3D source geometry nodes are collected from the " +"[SceneTree]. Second, all collected nodes are parsed for their relevant 3D " +"geometry data and a combined 3D mesh is build. Due to the many different " +"types of parsable objects, from normal [MeshInstance]s to [CSGShape]s or " +"various [CollisionObject]s, some operations to collect geometry data can " +"trigger [VisualServer] and [PhysicsServer] synchronizations. Server " +"synchronization can have a negative effect on baking time or framerate as it " +"often involves [Mutex] locking for thread security. Many parsable objects " +"and the continuous synchronization with other threaded Servers can increase " +"the baking time significantly. On the other hand only a few but very large " +"and complex objects will take some time to prepare for the Servers which can " +"noticeably stall the next frame render. As a general rule the total amount " +"of parsable objects and their individual size and complexity should be " +"balanced to avoid framerate issues or very long baking times. The combined " +"mesh is then passed to the Recast Navigation Object to test the source " +"geometry for walkable terrain suitable to [NavigationMesh] agent properties " +"by creating a voxel world around the meshes bounding area.\n" +"The finalized navigation mesh is then returned and stored inside the " +"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "Clears the navigation mesh." +msgid "" +"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " +"nodes under the provided [code]root_node[/code] or a specific group of nodes " +"for potential source geometry. The parse behavior can be controlled with the " +"[member NavigationMesh.geometry/parsed_geometry_type] and [member " +"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[NavigationMesh] resource." msgstr "" +#: doc/classes/NavigationMeshGenerator.xml +#, fuzzy +msgid "" +"Removes all polygons and vertices from the provided [code]nav_mesh[/code] " +"resource." +msgstr "ОбчиÑлює векторний добуток двох векторів та [code]with[/code]." + #: doc/classes/NavigationMeshInstance.xml msgid "An instance of a [NavigationMesh]." msgstr "" @@ -36038,7 +36159,10 @@ msgid "" "thread is useful because navigation baking is not a cheap operation. When it " "is completed, it automatically sets the new [NavigationMesh]. Please note " "that baking on separate thread may be very slow if geometry is parsed from " -"meshes as async access to each mesh involves heavy synchronization." +"meshes as async access to each mesh involves heavy synchronization. Also, " +"please note that baking on a separate thread is automatically disabled on " +"operating systems that cannot use threads (such as HTML5 with threads " +"disabled)." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -36084,6 +36208,11 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle.xml +#, fuzzy +msgid "Returns the [RID] of this obstacle on the [NavigationServer]." +msgstr "Повертає ÑÐ¸Ð½ÑƒÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°." + +#: doc/classes/NavigationObstacle.xml msgid "" "Sets the [Navigation] node used by the obstacle. Useful when you don't want " "to make the obstacle a child of a [Navigation] node." @@ -36120,6 +36249,11 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle2D.xml +#, fuzzy +msgid "Returns the [RID] of this obstacle on the [Navigation2DServer]." +msgstr "Повертає ÑÐ¸Ð½ÑƒÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°." + +#: doc/classes/NavigationObstacle2D.xml msgid "" "Sets the [Navigation2D] node used by the obstacle. Useful when you don't " "want to make the obstacle a child of a [Navigation2D] node." @@ -37308,7 +37442,7 @@ msgstr "" #: doc/classes/Node.xml msgid "" "Returns [code]true[/code] if the physics interpolated flag is set for this " -"Node (see [method set_physics_interpolated]).\n" +"Node (see [member physics_interpolation_mode]).\n" "[b]Note:[/b] Interpolation will only be active is both the flag is set " "[b]and[/b] physics interpolation is enabled within the [SceneTree]. This can " "be tested using [method is_physics_interpolated_and_enabled]." @@ -37316,8 +37450,8 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Returns [code]true[/code] if physics interpolation is enabled (see [method " -"set_physics_interpolated]) [b]and[/b] enabled in the [SceneTree].\n" +"Returns [code]true[/code] if physics interpolation is enabled (see [member " +"physics_interpolation_mode]) [b]and[/b] enabled in the [SceneTree].\n" "This is a convenience version of [method is_physics_interpolated] that also " "checks whether physics interpolation is enabled globally.\n" "See [member SceneTree.physics_interpolation] and [member ProjectSettings." @@ -37611,14 +37745,6 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Enables or disables physics interpolation per node, offering a finer grain " -"of control than turning physics interpolation on and off globally.\n" -"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " -"interpolation can sometimes give superior results." -msgstr "" - -#: doc/classes/Node.xml -msgid "" "Enables or disables physics (i.e. fixed framerate) processing. When a node " "is being processed, it will receive a [constant " "NOTIFICATION_PHYSICS_PROCESS] at a fixed (usually 60 FPS, see [member Engine." @@ -37751,6 +37877,15 @@ msgstr "" #: doc/classes/Node.xml msgid "" +"Allows enabling or disabling physics interpolation per node, offering a " +"finer grain of control than turning physics interpolation on and off " +"globally.\n" +"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " +"interpolation can sometimes give superior results." +msgstr "" + +#: doc/classes/Node.xml +msgid "" "The node's priority in the execution order of the enabled processing " "callbacks (i.e. [constant NOTIFICATION_PROCESS], [constant " "NOTIFICATION_PHYSICS_PROCESS] and their internal counterparts). Nodes whose " @@ -37912,6 +38047,24 @@ msgid "Continue to process regardless of the [SceneTree] pause state." msgstr "" #: doc/classes/Node.xml +msgid "" +"Inherits physics interpolation mode from the node's parent. For the root " +"node, it is equivalent to [constant PHYSICS_INTERPOLATION_MODE_ON]. Default." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn off physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn on physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml msgid "Duplicate the node's signals." msgstr "" @@ -39153,7 +39306,7 @@ msgstr "ОбчиÑлює векторний добуток цього векто #: doc/classes/OptionButton.xml msgid "" -"Returns the ID of the selected item, or [code]0[/code] if no item is " +"Returns the ID of the selected item, or [code]-1[/code] if no item is " "selected." msgstr "" @@ -39175,7 +39328,8 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" "Selects an item by index and makes it the current item. This will work even " -"if the item is disabled." +"if the item is disabled.\n" +"Passing [code]-1[/code] as the index deselects any currently selected item." msgstr "" #: doc/classes/OptionButton.xml @@ -44529,6 +44683,15 @@ msgid "" "should always be preferred." msgstr "" +#: doc/classes/PoolByteArray.xml doc/classes/PoolColorArray.xml +#: doc/classes/PoolIntArray.xml doc/classes/PoolRealArray.xml +#: doc/classes/PoolStringArray.xml doc/classes/PoolVector2Array.xml +#: doc/classes/PoolVector3Array.xml +msgid "" +"Returns [code]true[/code] if the array contains the given value.\n" +"[b]Note:[/b] This is equivalent to using the [code]in[/code] operator." +msgstr "" + #: doc/classes/PoolByteArray.xml msgid "" "Returns a hexadecimal representation of this array as a [String].\n" @@ -45323,6 +45486,10 @@ msgid "[Font] used for the menu items." msgstr "" #: doc/classes/PopupMenu.xml +msgid "[Font] used for the labeled separator." +msgstr "" + +#: doc/classes/PopupMenu.xml msgid "[Texture] icon for the checked checkbox items." msgstr "" @@ -48769,19 +48936,6 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used easing from [enum Tween.EaseType]. If not set, the " -"default easing is used from the [Tween] that contains this Tweener." -msgstr "" - -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used transition from [enum Tween.TransitionType]. If not " -"set, the default transition is used from the [Tween] that contains this " -"Tweener." -msgstr "" - #: doc/classes/ProximityGroup.xml msgid "General-purpose 3D proximity detection node." msgstr "" @@ -53613,8 +53767,15 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape touches another. If there are " -"no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape touches another.\n" +"If there are no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the shape to check collisions with " "([code]with_shape[/code]), and the transformation matrix of that shape " @@ -53635,8 +53796,16 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape would touch another, if a " -"given movement was applied. If there are no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape would touch another, " +"if a given movement was applied.\n" +"If there would be no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the movement to test on this shape " "([code]local_motion[/code]), the shape to check collisions with " diff --git a/doc/translations/vi.po b/doc/translations/vi.po index ab2fc3dc93..524c18e6c9 100644 --- a/doc/translations/vi.po +++ b/doc/translations/vi.po @@ -1295,11 +1295,12 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Random range, any floating point value between [code]from[/code] and " -"[code]to[/code].\n" +"Returns a random floating point value between [code]from[/code] and " +"[code]to[/code] (both endpoints inclusive).\n" "[codeblock]\n" "prints(rand_range(0, 1), rand_range(0, 1)) # Prints e.g. 0.135591 0.405263\n" -"[/codeblock]" +"[/codeblock]\n" +"[b]Note:[/b] This is equivalent to [code]randf() * (to - from) + from[/code]." msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml @@ -1343,37 +1344,36 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Returns an array with the given range. Range can be 1 argument [code]N[/" -"code] (0 to [code]N[/code] - 1), two arguments ([code]initial[/code], " -"[code]final - 1[/code]) or three arguments ([code]initial[/code], " -"[code]final - 1[/code], [code]increment[/code]). Returns an empty array if " -"the range isn't valid (e.g. [code]range(2, 5, -1)[/code] or [code]range(5, " -"5, 1)[/code]).\n" -"Returns an array with the given range. [code]range()[/code] can have 1 " -"argument N ([code]0[/code] to [code]N - 1[/code]), two arguments " -"([code]initial[/code], [code]final - 1[/code]) or three arguments " -"([code]initial[/code], [code]final - 1[/code], [code]increment[/code]). " -"[code]increment[/code] can be negative. If [code]increment[/code] is " -"negative, [code]final - 1[/code] will become [code]final + 1[/code]. Also, " -"the initial value must be greater than the final value for the loop to run.\n" -"[codeblock]\n" -"print(range(4))\n" -"print(range(2, 5))\n" -"print(range(0, 6, 2))\n" -"[/codeblock]\n" -"Output:\n" +"Returns an array with the given range. [method range] can be called in three " +"ways:\n" +"[code]range(n: int)[/code]: Starts from 0, increases by steps of 1, and " +"stops [i]before[/i] [code]n[/code]. The argument [code]n[/code] is " +"[b]exclusive[/b].\n" +"[code]range(b: int, n: int)[/code]: Starts from [code]b[/code], increases by " +"steps of 1, and stops [i]before[/i] [code]n[/code]. The arguments [code]b[/" +"code] and [code]n[/code] are [b]inclusive[/b] and [b]exclusive[/b], " +"respectively.\n" +"[code]range(b: int, n: int, s: int)[/code]: Starts from [code]b[/code], " +"increases/decreases by steps of [code]s[/code], and stops [i]before[/i] " +"[code]n[/code]. The arguments [code]b[/code] and [code]n[/code] are " +"[b]inclusive[/b] and [b]exclusive[/b], respectively. The argument [code]s[/" +"code] [b]can[/b] be negative, but not [code]0[/code]. If [code]s[/code] is " +"[code]0[/code], an error message is printed.\n" +"[method range] converts all arguments to [int] before processing.\n" +"[b]Note:[/b] Returns an empty array if no value meets the value constraint " +"(e.g. [code]range(2, 5, -1)[/code] or [code]range(5, 5, 1)[/code]).\n" +"Examples:\n" "[codeblock]\n" -"[0, 1, 2, 3]\n" -"[2, 3, 4]\n" -"[0, 2, 4]\n" +"print(range(4)) # Prints [0, 1, 2, 3]\n" +"print(range(2, 5)) # Prints [2, 3, 4]\n" +"print(range(0, 6, 2)) # Prints [0, 2, 4]\n" +"print(range(4, 1, -1)) # Prints [4, 3, 2]\n" "[/codeblock]\n" "To iterate over an [Array] backwards, use:\n" "[codeblock]\n" "var array = [3, 6, 9]\n" -"var i := array.size() - 1\n" -"while i >= 0:\n" -" print(array[i])\n" -" i -= 1\n" +"for i in range(array.size(), 0, -1):\n" +" print(array[i - 1])\n" "[/codeblock]\n" "Output:\n" "[codeblock]\n" @@ -4544,17 +4544,24 @@ msgid "Maximum value for the mode enum." msgstr "" #: doc/classes/AnimatedSprite.xml -msgid "Sprite node that can use multiple textures for animation." +msgid "" +"Sprite node that contains multiple textures as frames to play for animation." msgstr "" #: doc/classes/AnimatedSprite.xml msgid "" -"Animations are created using a [SpriteFrames] resource, which can be " -"configured in the editor via the SpriteFrames panel.\n" -"[b]Note:[/b] You can associate a set of normal maps by creating additional " -"[SpriteFrames] resources with a [code]_normal[/code] suffix. For example, " -"having 2 [SpriteFrames] resources [code]run[/code] and [code]run_normal[/" -"code] will make it so the [code]run[/code] animation uses the normal map." +"[AnimatedSprite] is similar to the [Sprite] node, except it carries multiple " +"textures as animation frames. Animations are created using a [SpriteFrames] " +"resource, which allows you to import image files (or a folder containing " +"said files) to provide the animation frames for the sprite. The " +"[SpriteFrames] resource can be configured in the editor via the SpriteFrames " +"bottom panel.\n" +"[b]Note:[/b] You can associate a set of normal or specular maps by creating " +"additional [SpriteFrames] resources with a [code]_normal[/code] or " +"[code]_specular[/code] suffix. For example, having 3 [SpriteFrames] " +"resources [code]run[/code], [code]run_normal[/code], and [code]run_specular[/" +"code] will make it so the [code]run[/code] animation uses normal and " +"specular maps." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml @@ -4582,9 +4589,9 @@ msgstr "" msgid "Stops the current animation (does not reset the frame counter)." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml +#: doc/classes/AnimatedSprite.xml msgid "" -"The current animation from the [code]frames[/code] resource. If this value " +"The current animation from the [member frames] resource. If this value " "changes, the [code]frame[/code] counter is reset." msgstr "" @@ -4608,9 +4615,12 @@ msgstr "Nếu [code]true[/code] thì láºt dá»c há»a tiết." msgid "The displayed animation frame's index." msgstr "Số thứ tá»± khung hình cá»§a hoạt ảnh Ä‘ang chạy." -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml -msgid "The [SpriteFrames] resource containing the animation(s)." -msgstr "Tà i nguyên [SpriteFrames] chứa (các) hoạt ảnh." +#: doc/classes/AnimatedSprite.xml +msgid "" +"The [SpriteFrames] resource containing the animation(s). Allows you the " +"option to load, edit, clear, make unique and save the states of the " +"[SpriteFrames] resource." +msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/Sprite.xml #: doc/classes/SpriteBase3D.xml @@ -4665,6 +4675,16 @@ msgstr "" "Chạy hoạt ảnh tên là [code]anim[/code]. Nếu không cung cấp [code]anim[/code] " "nà o, thì chạy hoạt ảnh hiện tại." +#: doc/classes/AnimatedSprite3D.xml +msgid "" +"The current animation from the [code]frames[/code] resource. If this value " +"changes, the [code]frame[/code] counter is reset." +msgstr "" + +#: doc/classes/AnimatedSprite3D.xml +msgid "The [SpriteFrames] resource containing the animation(s)." +msgstr "Tà i nguyên [SpriteFrames] chứa (các) hoạt ảnh." + #: doc/classes/AnimatedTexture.xml msgid "Proxy texture for simple frame-based animations." msgstr "" @@ -5191,11 +5211,11 @@ msgstr "" msgid "No interpolation (nearest value)." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Linear interpolation." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Cubic interpolation." msgstr "" @@ -6231,7 +6251,10 @@ msgid "" "Seeks the animation to the [code]seconds[/code] point in time (in seconds). " "If [code]update[/code] is [code]true[/code], the animation updates too, " "otherwise it updates at process time. Events between the current frame and " -"[code]seconds[/code] are skipped." +"[code]seconds[/code] are skipped.\n" +"[b]Note:[/b] Seeking to the end of the animation doesn't emit [signal " +"animation_finished]. If you want to skip animation and emit the signal, use " +"[method advance]." msgstr "" #: doc/classes/AnimationPlayer.xml @@ -7422,7 +7445,10 @@ msgid "" "[code]0[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "Returns the number of times an element is in the array." msgstr "" @@ -7467,10 +7493,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array for a value and returns its index or [code]-1[/code] if " -"not found. Optionally, the initial search index can be passed." +"not found. Optionally, the initial search index can be passed. Returns " +"[code]-1[/code] if [code]from[/code] is out of bounds." msgstr "" #: doc/classes/Array.xml @@ -7608,11 +7638,15 @@ msgid "" "[code]null[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array in reverse order. Optionally, a start search index can be " "passed. If negative, the start index is considered relative to the end of " -"the array." +"the array. If the adjusted start index is out of bounds, this method " +"searches from the end of the array." msgstr "" #: doc/classes/Array.xml @@ -8747,7 +8781,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -8969,7 +9003,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -12084,17 +12118,17 @@ msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a normal vector in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a 3D position in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml @@ -14350,7 +14384,9 @@ msgstr "" #: doc/classes/CollisionPolygon2D.xml msgid "" "If [code]true[/code], only edges that face up, relative to " -"[CollisionPolygon2D]'s rotation, will collide with other objects." +"[CollisionPolygon2D]'s rotation, will collide with other objects.\n" +"[b]Note:[/b] This property has no effect if this [CollisionPolygon2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionPolygon2D.xml @@ -14446,7 +14482,9 @@ msgstr "" #: doc/classes/CollisionShape2D.xml msgid "" "Sets whether this collision shape should only detect collision on one side " -"(top or bottom)." +"(top or bottom).\n" +"[b]Note:[/b] This property has no effect if this [CollisionShape2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionShape2D.xml @@ -22866,6 +22904,11 @@ msgid "" "same behavior." msgstr "" +#: doc/classes/EditorSpinSlider.xml +#, fuzzy +msgid "If [code]true[/code], the slider is hidden." +msgstr "Nếu [code]true[/code], há»a tiết sẽ được căn ở trung tâm." + #: doc/classes/EditorVCSInterface.xml msgid "" "Version Control System (VCS) interface, which reads and writes to the local " @@ -26452,9 +26495,22 @@ msgid "Gradient's colors returned as a [PoolColorArray]." msgstr "" #: doc/classes/Gradient.xml +msgid "" +"Defines how the colors between points of the gradient are interpolated. See " +"[enum InterpolationMode] for available modes." +msgstr "" + +#: doc/classes/Gradient.xml msgid "Gradient's offsets returned as a [PoolRealArray]." msgstr "" +#: doc/classes/Gradient.xml +msgid "" +"Constant interpolation, color changes abruptly at each point and stays " +"uniform between. This might cause visible aliasing when used for a gradient " +"texture in some cases." +msgstr "" + #: doc/classes/GradientTexture.xml msgid "Gradient-filled texture." msgstr "" @@ -34988,13 +35044,13 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used easing from [enum Tween.EaseType]. If not set, the " "default easing is used from the [SceneTreeTween] that contains this Tweener." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used transition from [enum Tween.TransitionType]. If not " "set, the default transition is used from the [SceneTreeTween] that contains " @@ -35706,6 +35762,12 @@ msgid "Creates the agent." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]agent[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "Nếu [code]true[/code], há»a tiết sẽ được căn ở trung tâm." @@ -35776,6 +35838,12 @@ msgid "Create a new map." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation agents [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns the map cell size." msgstr "Trả vá» [Texture2D] cá»§a khung hình được cho." @@ -35803,6 +35871,12 @@ msgid "Returns the navigation path to reach the destination from the origin." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation regions [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns [code]true[/code] if the map is active." msgstr "Nếu [code]true[/code], há»a tiết sẽ được căn ở trung tâm." @@ -35826,6 +35900,12 @@ msgid "Creates a new region." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]region[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Sets the map for the region." msgstr "Trả vá» sin cá»§a tham số." @@ -36306,19 +36386,60 @@ msgid "Represents the size of the [enum SourceGeometryMode] enum." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "This class is responsible for creating and clearing navigation meshes." +msgid "Helper class for creating and clearing navigation meshes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml msgid "" -"Bakes the navigation mesh. This will allow you to use pathfinding with the " -"navigation system." +"This class is responsible for creating and clearing 3D navigation meshes " +"used as [NavigationMesh] resources inside [NavigationMeshInstance]. The " +"[NavigationMeshGenerator] has very limited to no use for 2D as the " +"navigation mesh baking process expects 3D node types and 3D source geometry " +"to parse.\n" +"The entire navigation mesh baking is best done in a separate thread as the " +"voxelization, collision tests and mesh optimization steps involved are very " +"performance and time hungry operations.\n" +"Navigation mesh baking happens in multiple steps and the result depends on " +"3D source geometry and properties of the [NavigationMesh] resource. In the " +"first step, starting from a root node and depending on [NavigationMesh] " +"properties all valid 3D source geometry nodes are collected from the " +"[SceneTree]. Second, all collected nodes are parsed for their relevant 3D " +"geometry data and a combined 3D mesh is build. Due to the many different " +"types of parsable objects, from normal [MeshInstance]s to [CSGShape]s or " +"various [CollisionObject]s, some operations to collect geometry data can " +"trigger [VisualServer] and [PhysicsServer] synchronizations. Server " +"synchronization can have a negative effect on baking time or framerate as it " +"often involves [Mutex] locking for thread security. Many parsable objects " +"and the continuous synchronization with other threaded Servers can increase " +"the baking time significantly. On the other hand only a few but very large " +"and complex objects will take some time to prepare for the Servers which can " +"noticeably stall the next frame render. As a general rule the total amount " +"of parsable objects and their individual size and complexity should be " +"balanced to avoid framerate issues or very long baking times. The combined " +"mesh is then passed to the Recast Navigation Object to test the source " +"geometry for walkable terrain suitable to [NavigationMesh] agent properties " +"by creating a voxel world around the meshes bounding area.\n" +"The finalized navigation mesh is then returned and stored inside the " +"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "Clears the navigation mesh." +msgid "" +"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " +"nodes under the provided [code]root_node[/code] or a specific group of nodes " +"for potential source geometry. The parse behavior can be controlled with the " +"[member NavigationMesh.geometry/parsed_geometry_type] and [member " +"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[NavigationMesh] resource." msgstr "" +#: doc/classes/NavigationMeshGenerator.xml +#, fuzzy +msgid "" +"Removes all polygons and vertices from the provided [code]nav_mesh[/code] " +"resource." +msgstr "Trả vá» sin cá»§a tham số." + #: doc/classes/NavigationMeshInstance.xml msgid "An instance of a [NavigationMesh]." msgstr "" @@ -36337,7 +36458,10 @@ msgid "" "thread is useful because navigation baking is not a cheap operation. When it " "is completed, it automatically sets the new [NavigationMesh]. Please note " "that baking on separate thread may be very slow if geometry is parsed from " -"meshes as async access to each mesh involves heavy synchronization." +"meshes as async access to each mesh involves heavy synchronization. Also, " +"please note that baking on a separate thread is automatically disabled on " +"operating systems that cannot use threads (such as HTML5 with threads " +"disabled)." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -36384,6 +36508,11 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle.xml +#, fuzzy +msgid "Returns the [RID] of this obstacle on the [NavigationServer]." +msgstr "Trả vá» sin cá»§a tham số." + +#: doc/classes/NavigationObstacle.xml msgid "" "Sets the [Navigation] node used by the obstacle. Useful when you don't want " "to make the obstacle a child of a [Navigation] node." @@ -36420,6 +36549,11 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle2D.xml +#, fuzzy +msgid "Returns the [RID] of this obstacle on the [Navigation2DServer]." +msgstr "Trả vá» sin cá»§a tham số." + +#: doc/classes/NavigationObstacle2D.xml msgid "" "Sets the [Navigation2D] node used by the obstacle. Useful when you don't " "want to make the obstacle a child of a [Navigation2D] node." @@ -37608,7 +37742,7 @@ msgstr "" #: doc/classes/Node.xml msgid "" "Returns [code]true[/code] if the physics interpolated flag is set for this " -"Node (see [method set_physics_interpolated]).\n" +"Node (see [member physics_interpolation_mode]).\n" "[b]Note:[/b] Interpolation will only be active is both the flag is set " "[b]and[/b] physics interpolation is enabled within the [SceneTree]. This can " "be tested using [method is_physics_interpolated_and_enabled]." @@ -37616,8 +37750,8 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Returns [code]true[/code] if physics interpolation is enabled (see [method " -"set_physics_interpolated]) [b]and[/b] enabled in the [SceneTree].\n" +"Returns [code]true[/code] if physics interpolation is enabled (see [member " +"physics_interpolation_mode]) [b]and[/b] enabled in the [SceneTree].\n" "This is a convenience version of [method is_physics_interpolated] that also " "checks whether physics interpolation is enabled globally.\n" "See [member SceneTree.physics_interpolation] and [member ProjectSettings." @@ -37911,14 +38045,6 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Enables or disables physics interpolation per node, offering a finer grain " -"of control than turning physics interpolation on and off globally.\n" -"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " -"interpolation can sometimes give superior results." -msgstr "" - -#: doc/classes/Node.xml -msgid "" "Enables or disables physics (i.e. fixed framerate) processing. When a node " "is being processed, it will receive a [constant " "NOTIFICATION_PHYSICS_PROCESS] at a fixed (usually 60 FPS, see [member Engine." @@ -38051,6 +38177,15 @@ msgstr "" #: doc/classes/Node.xml msgid "" +"Allows enabling or disabling physics interpolation per node, offering a " +"finer grain of control than turning physics interpolation on and off " +"globally.\n" +"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " +"interpolation can sometimes give superior results." +msgstr "" + +#: doc/classes/Node.xml +msgid "" "The node's priority in the execution order of the enabled processing " "callbacks (i.e. [constant NOTIFICATION_PROCESS], [constant " "NOTIFICATION_PHYSICS_PROCESS] and their internal counterparts). Nodes whose " @@ -38212,6 +38347,24 @@ msgid "Continue to process regardless of the [SceneTree] pause state." msgstr "" #: doc/classes/Node.xml +msgid "" +"Inherits physics interpolation mode from the node's parent. For the root " +"node, it is equivalent to [constant PHYSICS_INTERPOLATION_MODE_ON]. Default." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn off physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn on physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml msgid "Duplicate the node's signals." msgstr "" @@ -39453,7 +39606,7 @@ msgstr "Trả vá» sin cá»§a tham số." #: doc/classes/OptionButton.xml msgid "" -"Returns the ID of the selected item, or [code]0[/code] if no item is " +"Returns the ID of the selected item, or [code]-1[/code] if no item is " "selected." msgstr "" @@ -39475,7 +39628,8 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" "Selects an item by index and makes it the current item. This will work even " -"if the item is disabled." +"if the item is disabled.\n" +"Passing [code]-1[/code] as the index deselects any currently selected item." msgstr "" #: doc/classes/OptionButton.xml @@ -44837,6 +44991,15 @@ msgid "" "should always be preferred." msgstr "" +#: doc/classes/PoolByteArray.xml doc/classes/PoolColorArray.xml +#: doc/classes/PoolIntArray.xml doc/classes/PoolRealArray.xml +#: doc/classes/PoolStringArray.xml doc/classes/PoolVector2Array.xml +#: doc/classes/PoolVector3Array.xml +msgid "" +"Returns [code]true[/code] if the array contains the given value.\n" +"[b]Note:[/b] This is equivalent to using the [code]in[/code] operator." +msgstr "" + #: doc/classes/PoolByteArray.xml msgid "" "Returns a hexadecimal representation of this array as a [String].\n" @@ -45632,6 +45795,10 @@ msgid "[Font] used for the menu items." msgstr "" #: doc/classes/PopupMenu.xml +msgid "[Font] used for the labeled separator." +msgstr "" + +#: doc/classes/PopupMenu.xml msgid "[Texture] icon for the checked checkbox items." msgstr "" @@ -49081,19 +49248,6 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used easing from [enum Tween.EaseType]. If not set, the " -"default easing is used from the [Tween] that contains this Tweener." -msgstr "" - -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used transition from [enum Tween.TransitionType]. If not " -"set, the default transition is used from the [Tween] that contains this " -"Tweener." -msgstr "" - #: doc/classes/ProximityGroup.xml msgid "General-purpose 3D proximity detection node." msgstr "" @@ -53930,8 +54084,15 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape touches another. If there are " -"no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape touches another.\n" +"If there are no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the shape to check collisions with " "([code]with_shape[/code]), and the transformation matrix of that shape " @@ -53952,8 +54113,16 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape would touch another, if a " -"given movement was applied. If there are no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape would touch another, " +"if a given movement was applied.\n" +"If there would be no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the movement to test on this shape " "([code]local_motion[/code]), the shape to check collisions with " diff --git a/doc/translations/zh_CN.po b/doc/translations/zh_CN.po index 984600883d..cbef0b9212 100644 --- a/doc/translations/zh_CN.po +++ b/doc/translations/zh_CN.po @@ -62,7 +62,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine class reference\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" -"PO-Revision-Date: 2022-05-04 09:18+0000\n" +"PO-Revision-Date: 2022-05-14 20:22+0000\n" "Last-Translator: Haoyu Qiu <timothyqiu32@gmail.com>\n" "Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/" "godot-engine/godot-class-reference/zh_Hans/>\n" @@ -71,7 +71,7 @@ msgstr "" "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.12.1\n" +"X-Generator: Weblate 4.13-dev\n" #: doc/tools/make_rst.py msgid "Description" @@ -957,7 +957,6 @@ msgstr "" "值,请将其与 [method ease] 或 [method smoothstep] 组åˆã€‚" #: modules/gdscript/doc_classes/@GDScript.xml -#, fuzzy msgid "" "Linearly interpolates between two angles (in radians) by a normalized " "value.\n" @@ -992,7 +991,12 @@ msgstr "" " var max_angle = deg2rad(90.0)\n" " rotation = lerp_angle(min_angle, max_angle, elapsed)\n" " elapsed += delta\n" -"[/codeblock]" +"[/codeblock]\n" +"[b]注æ„:[/b]这个方法会通过 [code]from[/code] å’Œ [code]to[/code] 之间的最çŸè·¯" +"径进行线性æ’值。然而,当这两个角度相è·å¤§è‡´ [code]PI + k * TAU[/code] å…¶ä¸ " +"[code]k[/code] ä¸ºä»»æ„æ•´æ•°æ—¶ï¼Œç”±äºŽæµ®ç‚¹æ•°ç²¾åº¦è¯¯å·®çš„缘故,è¦å¯¹æ’值的方å‘进行判æ–" +"是很难的。例如,[code]lerp_angle(0, PI, weight)[/code] 会逆时针æ’值,而 " +"[code]lerp_angle(0, PI + 5 * TAU, weight)[/code] 则会顺时针æ’值。" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" @@ -1444,12 +1448,14 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml +#, fuzzy msgid "" -"Random range, any floating point value between [code]from[/code] and " -"[code]to[/code].\n" +"Returns a random floating point value between [code]from[/code] and " +"[code]to[/code] (both endpoints inclusive).\n" "[codeblock]\n" "prints(rand_range(0, 1), rand_range(0, 1)) # Prints e.g. 0.135591 0.405263\n" -"[/codeblock]" +"[/codeblock]\n" +"[b]Note:[/b] This is equivalent to [code]randf() * (to - from) + from[/code]." msgstr "" "éšæœºèŒƒå›´ï¼Œ[code]from[/code] å’Œ [code]to[/code] 之间的任何浮点值。\n" "[codeblock]\n" @@ -1517,37 +1523,36 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Returns an array with the given range. Range can be 1 argument [code]N[/" -"code] (0 to [code]N[/code] - 1), two arguments ([code]initial[/code], " -"[code]final - 1[/code]) or three arguments ([code]initial[/code], " -"[code]final - 1[/code], [code]increment[/code]). Returns an empty array if " -"the range isn't valid (e.g. [code]range(2, 5, -1)[/code] or [code]range(5, " -"5, 1)[/code]).\n" -"Returns an array with the given range. [code]range()[/code] can have 1 " -"argument N ([code]0[/code] to [code]N - 1[/code]), two arguments " -"([code]initial[/code], [code]final - 1[/code]) or three arguments " -"([code]initial[/code], [code]final - 1[/code], [code]increment[/code]). " -"[code]increment[/code] can be negative. If [code]increment[/code] is " -"negative, [code]final - 1[/code] will become [code]final + 1[/code]. Also, " -"the initial value must be greater than the final value for the loop to run.\n" -"[codeblock]\n" -"print(range(4))\n" -"print(range(2, 5))\n" -"print(range(0, 6, 2))\n" -"[/codeblock]\n" -"Output:\n" +"Returns an array with the given range. [method range] can be called in three " +"ways:\n" +"[code]range(n: int)[/code]: Starts from 0, increases by steps of 1, and " +"stops [i]before[/i] [code]n[/code]. The argument [code]n[/code] is " +"[b]exclusive[/b].\n" +"[code]range(b: int, n: int)[/code]: Starts from [code]b[/code], increases by " +"steps of 1, and stops [i]before[/i] [code]n[/code]. The arguments [code]b[/" +"code] and [code]n[/code] are [b]inclusive[/b] and [b]exclusive[/b], " +"respectively.\n" +"[code]range(b: int, n: int, s: int)[/code]: Starts from [code]b[/code], " +"increases/decreases by steps of [code]s[/code], and stops [i]before[/i] " +"[code]n[/code]. The arguments [code]b[/code] and [code]n[/code] are " +"[b]inclusive[/b] and [b]exclusive[/b], respectively. The argument [code]s[/" +"code] [b]can[/b] be negative, but not [code]0[/code]. If [code]s[/code] is " +"[code]0[/code], an error message is printed.\n" +"[method range] converts all arguments to [int] before processing.\n" +"[b]Note:[/b] Returns an empty array if no value meets the value constraint " +"(e.g. [code]range(2, 5, -1)[/code] or [code]range(5, 5, 1)[/code]).\n" +"Examples:\n" "[codeblock]\n" -"[0, 1, 2, 3]\n" -"[2, 3, 4]\n" -"[0, 2, 4]\n" +"print(range(4)) # Prints [0, 1, 2, 3]\n" +"print(range(2, 5)) # Prints [2, 3, 4]\n" +"print(range(0, 6, 2)) # Prints [0, 2, 4]\n" +"print(range(4, 1, -1)) # Prints [4, 3, 2]\n" "[/codeblock]\n" "To iterate over an [Array] backwards, use:\n" "[codeblock]\n" "var array = [3, 6, 9]\n" -"var i := array.size() - 1\n" -"while i >= 0:\n" -" print(array[i])\n" -" i -= 1\n" +"for i in range(array.size(), 0, -1):\n" +" print(array[i - 1])\n" "[/codeblock]\n" "Output:\n" "[codeblock]\n" @@ -1556,43 +1561,6 @@ msgid "" "3\n" "[/codeblock]" msgstr "" -"返回一个具有给定范围的数组。范围å¯ä»¥æ˜¯ä¸€ä¸ªå‚æ•°[code]N[/code](0 到 [code]N[/" -"code] - 1ï¼‰ï¼Œä¸¤ä¸ªå‚æ•°ï¼ˆåˆå§‹ [code]initial[/code]ã€æœ€ç»ˆ [code]final -1[/" -"code]ï¼‰æˆ–ä¸‰ä¸ªå‚æ•°ï¼ˆåˆå§‹ [code]initial[/code]ã€æœ€ç»ˆ [code]final -1[/code]ã€å¢ž" -"é‡ [code]increment[/code]ï¼‰ã€‚èŒƒå›´æ— æ•ˆæ—¶è¿”å›žä¸€ä¸ªç©ºæ•°ç»„ï¼ˆä¾‹å¦‚ [code]range(2, " -"5, -1)[/code] 或 [code]range(5, 5, 1)[/code])。\n" -"返回一个具有给定范围的数组。[code]range()[/code] å¯ä»¥æ˜¯ä¸€ä¸ªå‚æ•° [code]N[/" -"code](0 到 [code]N[/code] - 1ï¼‰ï¼Œä¸¤ä¸ªå‚æ•°ï¼ˆåˆå§‹ [code]initial[/code]ã€æœ€ç»ˆ " -"[code]final -1[/code]ï¼‰æˆ–ä¸‰ä¸ªå‚æ•°ï¼ˆåˆå§‹[code]initial[/code]ã€æœ€ç»ˆ " -"[code]final -1[/code]ã€å¢žé‡ [code]increment[/code]ï¼‰ã€‚å¢žé‡ [code]increment[/" -"code] å¯ä»¥æ˜¯è´Ÿæ•°ã€‚å¦‚æžœå¢žé‡ [code]increment[/code] 是负的,[code]final-1[/" -"code] å°†å˜æˆ [code]final+1[/code]。å¦å¤–,åˆå§‹å€¼å¿…须大于最终值,循环æ‰èƒ½è¿" -"行。\n" -"[codeblock]\n" -"print(range(4))\n" -"print(range(2, 5))\n" -"print(range(0, 6, 2))\n" -"[/codeblock]\n" -"输出:\n" -"[codeblock]\n" -"[0, 1, 2, 3]\n" -"[2, 3, 4]\n" -"[0, 2, 4]\n" -"[/codeblock]\n" -"è¦å¯¹ä¸€ä¸ªæ•°ç»„ [Array] 进行逆åºè¿ä»£ï¼Œè¯·ä½¿ç”¨ï¼š\n" -"[codeblock]\n" -"var array = [3, 6, 9]\n" -"var i := array.size() - 1\n" -"while i >= 0:\n" -" print(array[i])\n" -" i -= 1\n" -"[/codeblock]\n" -"输出:\n" -"[codeblock]\n" -"9\n" -"6\n" -"3\n" -"[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" @@ -5086,17 +5054,26 @@ msgid "Maximum value for the mode enum." msgstr "模å¼åˆ—举的最大值。" #: doc/classes/AnimatedSprite.xml -msgid "Sprite node that can use multiple textures for animation." +#, fuzzy +msgid "" +"Sprite node that contains multiple textures as frames to play for animation." msgstr "å¯ä»¥ä½¿ç”¨å¤šä¸ªçº¹ç†è¿›è¡ŒåŠ¨ç”»å¤„ç†çš„ç²¾çµèŠ‚ç‚¹ã€‚" #: doc/classes/AnimatedSprite.xml +#, fuzzy msgid "" -"Animations are created using a [SpriteFrames] resource, which can be " -"configured in the editor via the SpriteFrames panel.\n" -"[b]Note:[/b] You can associate a set of normal maps by creating additional " -"[SpriteFrames] resources with a [code]_normal[/code] suffix. For example, " -"having 2 [SpriteFrames] resources [code]run[/code] and [code]run_normal[/" -"code] will make it so the [code]run[/code] animation uses the normal map." +"[AnimatedSprite] is similar to the [Sprite] node, except it carries multiple " +"textures as animation frames. Animations are created using a [SpriteFrames] " +"resource, which allows you to import image files (or a folder containing " +"said files) to provide the animation frames for the sprite. The " +"[SpriteFrames] resource can be configured in the editor via the SpriteFrames " +"bottom panel.\n" +"[b]Note:[/b] You can associate a set of normal or specular maps by creating " +"additional [SpriteFrames] resources with a [code]_normal[/code] or " +"[code]_specular[/code] suffix. For example, having 3 [SpriteFrames] " +"resources [code]run[/code], [code]run_normal[/code], and [code]run_specular[/" +"code] will make it so the [code]run[/code] animation uses normal and " +"specular maps." msgstr "" "动画通过一个 [SpriteFrames] 资æºåˆ›å»ºï¼Œè€Œè¯¥èµ„æºå¯ä»¥é€šè¿‡åŠ¨ç”»å¸§é¢æ¿åœ¨ç¼–辑器ä¸é…" "置。\n" @@ -5133,9 +5110,10 @@ msgstr "" msgid "Stops the current animation (does not reset the frame counter)." msgstr "åœæ¢æ’放当å‰åŠ¨ç”»ï¼ˆä¸ä¼šé‡ç½®å¸§è®¡æ•°å™¨ï¼‰ã€‚" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml +#: doc/classes/AnimatedSprite.xml +#, fuzzy msgid "" -"The current animation from the [code]frames[/code] resource. If this value " +"The current animation from the [member frames] resource. If this value " "changes, the [code]frame[/code] counter is reset." msgstr "" "æ¥è‡ª [code]frames[/code] 资æºçš„当å‰åŠ¨ç”»ã€‚å¦‚æžœè¿™ä¸ªå€¼å‘生å˜åŒ–,[code]frame[/" @@ -5161,9 +5139,12 @@ msgstr "为 [code]true[/code] 时纹ç†å°†è¢«åž‚直翻转。" msgid "The displayed animation frame's index." msgstr "显示的动画帧的索引。" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml -msgid "The [SpriteFrames] resource containing the animation(s)." -msgstr "包å«åŠ¨ç”»çš„ [SpriteFrames] 资æºã€‚" +#: doc/classes/AnimatedSprite.xml +msgid "" +"The [SpriteFrames] resource containing the animation(s). Allows you the " +"option to load, edit, clear, make unique and save the states of the " +"[SpriteFrames] resource." +msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/Sprite.xml #: doc/classes/SpriteBase3D.xml @@ -5219,6 +5200,18 @@ msgstr "" "æ’æ”¾å为 [code]anim[/code] 的动画。如果没有æä¾› [code]anim[/code]ï¼Œåˆ™æ’æ”¾å½“å‰" "动画。" +#: doc/classes/AnimatedSprite3D.xml +msgid "" +"The current animation from the [code]frames[/code] resource. If this value " +"changes, the [code]frame[/code] counter is reset." +msgstr "" +"æ¥è‡ª [code]frames[/code] 资æºçš„当å‰åŠ¨ç”»ã€‚å¦‚æžœè¿™ä¸ªå€¼å‘生å˜åŒ–,[code]frame[/" +"code] 计数器会被é‡ç½®ã€‚" + +#: doc/classes/AnimatedSprite3D.xml +msgid "The [SpriteFrames] resource containing the animation(s)." +msgstr "包å«åŠ¨ç”»çš„ [SpriteFrames] 资æºã€‚" + #: doc/classes/AnimatedTexture.xml msgid "Proxy texture for simple frame-based animations." msgstr "基于简å•帧动画的代ç†çº¹ç†ã€‚" @@ -5860,11 +5853,11 @@ msgstr "动画轨é“会在其他 [AnimationPlayer] èŠ‚ç‚¹ä¸æ’放动画。" msgid "No interpolation (nearest value)." msgstr "æ— æ’值(最邻近的值)。" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Linear interpolation." msgstr "线性æ’值。" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Cubic interpolation." msgstr "三次æ’值。" @@ -7076,11 +7069,15 @@ msgid "" msgstr "将键值为[code]name[/code]的现有动画é‡å‘½å为[code]newname[/code]。" #: doc/classes/AnimationPlayer.xml +#, fuzzy msgid "" "Seeks the animation to the [code]seconds[/code] point in time (in seconds). " "If [code]update[/code] is [code]true[/code], the animation updates too, " "otherwise it updates at process time. Events between the current frame and " -"[code]seconds[/code] are skipped." +"[code]seconds[/code] are skipped.\n" +"[b]Note:[/b] Seeking to the end of the animation doesn't emit [signal " +"animation_finished]. If you want to skip animation and emit the signal, use " +"[method advance]." msgstr "" "将动画寻é“到时间点 [code]seconds[/code](å•ä½ä¸ºç§’)。[code]update[/code] 为 " "[code]true[/code] æ—¶ä¼šåŒæ—¶æ›´æ–°åŠ¨ç”»ï¼Œå¦åˆ™ä¼šåœ¨å¤„ç†æ—¶æ›´æ–°ã€‚当å‰å¸§å’Œ " @@ -8614,7 +8611,10 @@ msgid "" "[code]0[/code]." msgstr "清空数组。与调用 [method resize] 时指定大å°ä¸º [code]0[/code] ç‰ä»·ã€‚" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "Returns the number of times an element is in the array." msgstr "è¿”å›žå…ƒç´ åœ¨æ•°ç»„ä¸å‡ºçŽ°çš„æ¬¡æ•°ã€‚" @@ -8667,11 +8667,23 @@ msgid "" "array.fill(0) # Initialize the 10 elements to 0.\n" "[/codeblock]" msgstr "" +"将该数组ä¸çš„æ‰€æœ‰å…ƒç´ 都设置为给定的值。通常与 [method resize] 一起使用,用于创" +"å»ºç»™å®šå¤§å°æ•°ç»„å¹¶å¯¹å…¶å…ƒç´ è¿›è¡Œåˆå§‹åŒ–:\n" +"[codeblock]\n" +"var array = []\n" +"array.resize(10)\n" +"array.fill(0) # å°† 10 ä¸ªå…ƒç´ éƒ½åˆå§‹åŒ–为 0。\n" +"[/codeblock]" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml +#, fuzzy msgid "" "Searches the array for a value and returns its index or [code]-1[/code] if " -"not found. Optionally, the initial search index can be passed." +"not found. Optionally, the initial search index can be passed. Returns " +"[code]-1[/code] if [code]from[/code] is out of bounds." msgstr "" "åœ¨æ•°ç»„ä¸æŸ¥æ‰¾æŒ‡å®šçš„值,返回对应的索引,未找到时返回 [code]-1[/code]。还å¯ä»¥ä¼ " "å…¥æœç´¢èµ·å§‹ä½ç½®çš„索引。" @@ -8865,11 +8877,16 @@ msgstr "" "调整数组至包å«ä¸åŒæ•°é‡çš„å…ƒç´ ã€‚å¦‚æžœæ•°ç»„å˜å°åˆ™æ¸…é™¤å¤šä½™å…ƒç´ ï¼Œå˜å¤§åˆ™æ–°å…ƒç´ 为 " "[code]null[/code]。" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml +#, fuzzy msgid "" "Searches the array in reverse order. Optionally, a start search index can be " "passed. If negative, the start index is considered relative to the end of " -"the array." +"the array. If the adjusted start index is out of bounds, this method " +"searches from the end of the array." msgstr "" "é€†åºæœç´¢æ•°ç»„。还å¯ä»¥ä¼ å…¥æœç´¢èµ·å§‹ä½ç½®çš„索引,如果为负数,则起始ä½ç½®ä»Žæ•°ç»„的末" "尾开始计算。" @@ -10107,9 +10124,8 @@ msgstr "" #: doc/classes/PanelContainer.xml doc/classes/ScrollContainer.xml #: doc/classes/SplitContainer.xml doc/classes/TabContainer.xml #: doc/classes/VBoxContainer.xml doc/classes/VSplitContainer.xml -#, fuzzy msgid "GUI containers" -msgstr "选项å¡å®¹å™¨ã€‚" +msgstr "GUI 容器" #: doc/classes/AspectRatioContainer.xml msgid "Specifies the horizontal relative position of child controls." @@ -10275,10 +10291,11 @@ msgstr "" "注æ„这个函数éšè—在默认的 [code]AStar[/code] ç±»ä¸ã€‚" #: doc/classes/AStar.xml +#, fuzzy msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -10582,10 +10599,11 @@ msgstr "" "请注æ„,这个函数éšè—在默认的 [code]AStar2D[/code] ç±»ä¸ã€‚" #: doc/classes/AStar2D.xml +#, fuzzy msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -13418,14 +13436,13 @@ msgstr "" "å¯ä»¥è€ƒè™‘使用 [Quat] æž„é€ å‡½æ•°ä»£æ›¿ï¼Œå®ƒä½¿ç”¨å››å…ƒç»„ä»£æ›¿æ¬§æ‹‰è§’ã€‚" #: doc/classes/Basis.xml -#, fuzzy msgid "" "Constructs a pure rotation basis matrix, rotated around the given " "[code]axis[/code] by [code]angle[/code] (in radians). The axis must be a " "normalized vector." msgstr "" -"æž„é€ ä¸€ä¸ªçº¯æ—‹è½¬çš„åŸºçŸ©é˜µï¼Œå›´ç»•ç»™å®šçš„ [code]axis[/code] 旋转 [code]phi[/code] 个" -"弧度。轴必须是归一化å‘é‡ã€‚" +"æž„é€ ä¸€ä¸ªçº¯æ—‹è½¬çš„åŸºçŸ©é˜µï¼Œå›´ç»•ç»™å®šçš„è½´ [code]axis[/code] 旋转 [code]angle[/" +"code](å•ä½ä¸ºå¼§åº¦ï¼‰ã€‚该轴必须是归一化å‘é‡ã€‚" #: doc/classes/Basis.xml msgid "Constructs a basis matrix from 3 axis vectors (matrix columns)." @@ -13509,12 +13526,12 @@ msgstr "" "的)。这将在矩阵的基上执行 Gram-Schmidt æ£äº¤åŒ–。" #: doc/classes/Basis.xml -#, fuzzy msgid "" "Introduce an additional rotation around the given axis by [code]angle[/code] " "(in radians). The axis must be a normalized vector." msgstr "" -"围绕给定轴线引入一个é¢å¤–的旋转phi(弧度)。该轴必须是一个归一化的å‘é‡ã€‚" +"围绕给定轴线引入一个é¢å¤–的旋转 [code]angle[/code](å•ä½ä¸ºå¼§åº¦ï¼‰ã€‚该轴必须是一" +"个归一化的å‘é‡ã€‚" #: doc/classes/Basis.xml msgid "" @@ -14234,9 +14251,8 @@ msgid "Emitted when one of the buttons of the group is pressed." msgstr "当该组ä¸çš„一个按钮被按下时触å‘。" #: doc/classes/CallbackTweener.xml -#, fuzzy msgid "Calls the specified method after optional delay." -msgstr "é”定指定的线性或旋转轴。" +msgstr "在å¯é€‰çš„延迟之åŽè°ƒç”¨æŒ‡å®šçš„æ–¹æ³•。" #: doc/classes/CallbackTweener.xml msgid "" @@ -14246,6 +14262,10 @@ msgid "" "to create [CallbackTweener]. Any [CallbackTweener] created manually will not " "function correctly." msgstr "" +"[CallbackTweener] å¯ç”¨äºŽåœ¨è¡¥é—´åºåˆ—ä¸è°ƒç”¨æ–¹æ³•。更多用法信æ¯è¯·å‚阅 [method " +"SceneTreeTween.tween_callback]。\n" +"[b]注æ„:[/b]创建 [CallbackTweener] 的唯一æ£ç¡®æ–¹æ³•是 [method SceneTreeTween." +"tween_callback]。任何手动创建的 [CallbackTweener] éƒ½æ— æ³•æ£å¸¸å·¥ä½œã€‚" #: doc/classes/CallbackTweener.xml msgid "" @@ -14256,6 +14276,12 @@ msgid "" "after 2 seconds\n" "[/codeblock]" msgstr "" +"让该回调延迟给定的时间,å•ä½ä¸ºç§’。示例:\n" +"[codeblock]\n" +"var tween = get_tree().create_tween()\n" +"tween.tween_callback(queue_free).set_delay(2) # 会在 2 ç§’åŽè°ƒç”¨ " +"queue_free()\n" +"[/codeblock]" #: doc/classes/Camera.xml msgid "Camera node, displays from a point of view." @@ -14354,21 +14380,23 @@ msgstr "" "å¹³é¢è·ç¦»ç›¸æœºçš„场景为给定的 [code]z_depth[/code] è·ç¦»ã€‚" #: doc/classes/Camera.xml +#, fuzzy msgid "" "Returns a normal vector in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" "返回世界空间ä¸çš„æ³•线å‘é‡ï¼Œå³ç›¸æœºæŠ•影在[Viewport]矩形上投影一个点的结果。这对" "äºŽä»¥åŽŸç‚¹ã€æ³•线,投射光线形å¼ç”¨äºŽå¯¹è±¡ç›¸äº¤æˆ–拾å–很有用。" #: doc/classes/Camera.xml +#, fuzzy msgid "" "Returns a 3D position in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" "返回世界空间ä¸çš„ 3D åæ ‡ï¼Œå³ç›¸æœºæŠ•影在 [Viewport] 矩形上投影一个点的结果。这" "å¯¹äºŽä»¥åŽŸç‚¹ã€æ³•线,投射光线形å¼ç”¨äºŽå¯¹è±¡ç›¸äº¤æˆ–拾å–很有用。" @@ -15191,6 +15219,15 @@ msgid "" "mipmaps to perform antialiasing. 2D batching is also still supported with " "those antialiased lines." msgstr "" +"在给定的角度之间绘制未填充的弧形。[code]point_count[/code] 的值越大,曲线越平" +"滑。å¦è¯·å‚阅 [method draw_circle]。\n" +"[b]注æ„:[/b]如果 [code]antialiased[/code] 为 [code]true[/code],那么线段的绘" +"制就ä¸ä¼šè¢«åˆ†æ‰¹åŠ é€Ÿã€‚\n" +"[b]注æ„:[/b]ç”±äºŽå®žçŽ°çš„åŽŸå› ï¼Œå†…ç½®çš„æŠ—é”¯é½¿æ— æ³•åœ¨é€æ˜Žå¤šè¾¹å½¢ä¸Šå¾—到æ£ç¡®çš„æ•ˆæžœï¼Œå¹¶" +"且å¯èƒ½æ— 法在æŸäº›å¹³å°ä¸Šæ£å¸¸å·¥ä½œã€‚作为替代方案,请安装[url=https://github.com/" +"godot-extended-libraries/godot-antialiased-line2d]抗锯齿 Line2D[/url] æ’ä»¶å¹¶" +"创建 AntialiasedRegularPolygon2D 节点。该节点的抗锯齿是使用带有自定义 mipmap " +"的纹ç†è¿›è¡Œçš„。这些抗锯齿线段ä»ç„¶æ”¯æŒ 2D 分批。" #: doc/classes/CanvasItem.xml msgid "" @@ -15210,6 +15247,13 @@ msgid "" "create an AntialiasedRegularPolygon2D node. That node relies on a texture " "with custom mipmaps to perform antialiasing." msgstr "" +"绘制未填充的彩色圆形。å¦è¯·å‚阅 [method draw_arc]ã€[method draw_polyline]ã€" +"[method draw_polygon]。\n" +"[b]注æ„:[/b]ç”±äºŽå®žçŽ°çš„åŽŸå› ï¼Œå†…ç½®çš„æŠ—é”¯é½¿æ— æ³•åœ¨é€æ˜Žå¤šè¾¹å½¢ä¸Šå¾—到æ£ç¡®çš„æ•ˆæžœï¼Œå¹¶" +"且å¯èƒ½æ— 法在æŸäº›å¹³å°ä¸Šæ£å¸¸å·¥ä½œã€‚作为替代方案,请安装[url=https://github.com/" +"godot-extended-libraries/godot-antialiased-line2d]抗锯齿 Line2D[/url] æ’ä»¶å¹¶" +"创建 AntialiasedRegularPolygon2D 节点。该节点的抗锯齿是使用带有自定义 mipmap " +"的纹ç†è¿›è¡Œçš„。" #: doc/classes/CanvasItem.xml msgid "" @@ -15223,6 +15267,13 @@ msgid "" "AntialiasedPolygon2D node. That node relies on a texture with custom mipmaps " "to perform antialiasing." msgstr "" +"ç»˜åˆ¶ä»»æ„æ•°é‡é¡¶ç‚¹çš„彩色多边形,凹凸å‡å¯ã€‚与 [method draw_polygon] ä¸åŒï¼Œæ•´ä¸ªå¤š" +"边形åªèƒ½æŒ‡å®šä¸€ç§é¢œè‰²ã€‚\n" +"[b]注æ„:[/b]ç”±äºŽå®žçŽ°çš„åŽŸå› ï¼Œå†…ç½®çš„æŠ—é”¯é½¿æ— æ³•åœ¨é€æ˜Žå¤šè¾¹å½¢ä¸Šå¾—到æ£ç¡®çš„æ•ˆæžœï¼Œå¹¶" +"且å¯èƒ½æ— 法在æŸäº›å¹³å°ä¸Šæ£å¸¸å·¥ä½œã€‚作为替代方案,请安装[url=https://github.com/" +"godot-extended-libraries/godot-antialiased-line2d]抗锯齿 Line2D[/url] æ’ä»¶å¹¶" +"创建 AntialiasedPolygon2D 节点。该节点的抗锯齿是使用带有自定义 mipmap 的纹ç†" +"进行的。" #: doc/classes/CanvasItem.xml msgid "" @@ -15239,6 +15290,15 @@ msgid "" "perform antialiasing. 2D batching is also still supported with those " "antialiased lines." msgstr "" +"在两个 2D 点之间绘制给定颜色和宽度的线段。å¯ä»¥æ‰“开抗锯齿。å¦è¯·å‚阅 [method " +"draw_multiline] å’Œ [method draw_polyline]。\n" +"[b]注æ„:[/b]如果 [code]antialiased[/code] 为 [code]true[/code],那么线段的绘" +"制就ä¸ä¼šè¢«åˆ†æ‰¹åŠ é€Ÿã€‚\n" +"[b]注æ„:[/b]ç”±äºŽå®žçŽ°çš„åŽŸå› ï¼Œå†…ç½®çš„æŠ—é”¯é½¿æ— æ³•åœ¨é€æ˜Žå¤šè¾¹å½¢ä¸Šå¾—到æ£ç¡®çš„æ•ˆæžœï¼Œå¹¶" +"且å¯èƒ½æ— 法在æŸäº›å¹³å°ä¸Šæ£å¸¸å·¥ä½œã€‚作为替代方案,请安装[url=https://github.com/" +"godot-extended-libraries/godot-antialiased-line2d]抗锯齿 Line2D[/url] æ’ä»¶å¹¶" +"创建 AntialiasedLine2D 节点。该节点的抗锯齿是使用带有自定义 mipmap 的纹ç†è¿›è¡Œ" +"的。这些抗锯齿线段ä»ç„¶æ”¯æŒ 2D 分批。" #: doc/classes/CanvasItem.xml msgid "" @@ -15248,7 +15308,6 @@ msgstr "" "使用所æä¾›çš„纹ç†ä»¥ 2D æ–¹å¼ç»˜åˆ¶ä¸€ä¸ª [Mesh]。相关文档请å‚阅 [MeshInstance2D]。" #: doc/classes/CanvasItem.xml -#, fuzzy msgid "" "Draws multiple disconnected lines with a uniform [code]color[/code]. When " "drawing large amounts of lines, this is faster than using individual [method " @@ -15265,11 +15324,13 @@ msgstr "" "使用å•一颜色 [code]color[/code] 绘制多æ¡ä¸ç›¸è¿žçš„直线。绘制大é‡ç›´çº¿æ—¶ï¼Œæ¯”å•独" "调用 [method draw_line] è¦å¿«ã€‚è¦ç»˜åˆ¶ç›¸è¿žçš„直线,请æ¢ç”¨ [method " "draw_polyline]。\n" -"[b]注æ„:[/b]ç›®å‰æœªå®žçް [code]width[/code] å’Œ [code]antialiased[/code],没有" -"效果。" +"[b]注æ„:[/b]ç›®å‰å°šæœªå®žçް [code]width[/code] å’Œ [code]antialiased[/code],ä¸" +"会产生任何效果。作为替代方案,请安装[url=https://github.com/godot-extended-" +"libraries/godot-antialiased-line2d]抗锯齿 Line2D[/url] æ’件并创建 " +"AntialiasedLine2D 节点。该节点的抗锯齿是使用带有自定义 mipmap 的纹ç†è¿›è¡Œçš„。" +"这些抗锯齿线段ä»ç„¶æ”¯æŒ 2D 分批。" #: doc/classes/CanvasItem.xml -#, fuzzy msgid "" "Draws multiple disconnected lines with a uniform [code]width[/code] and " "segment-by-segment coloring. Colors assigned to line segments match by index " @@ -15289,8 +15350,11 @@ msgstr "" "线段的颜色使用 [code]points[/code] å’Œ [code]colors[/code] 的索引进行匹é…。绘" "制大é‡ç›´çº¿æ—¶ï¼Œæ¯”å•独调用 [method draw_line] è¦å¿«ã€‚è¦ç»˜åˆ¶ç›¸è¿žçš„直线,请æ¢ç”¨ " "[method draw_polyline_colors]。\n" -"[b]注æ„:[/b]ç›®å‰æœªå®žçް [code]width[/code] å’Œ [code]antialiased[/code],没有" -"效果。" +"[b]注æ„:[/b]ç›®å‰å°šæœªå®žçް [code]width[/code] å’Œ [code]antialiased[/code],ä¸" +"会产生任何效果。作为替代方案,请安装[url=https://github.com/godot-extended-" +"libraries/godot-antialiased-line2d]抗锯齿 Line2D[/url] æ’件并创建 " +"AntialiasedLine2D 节点。该节点的抗锯齿是使用带有自定义 mipmap 的纹ç†è¿›è¡Œçš„。" +"这些抗锯齿线段ä»ç„¶æ”¯æŒ 2D 分批。" #: doc/classes/CanvasItem.xml msgid "" @@ -15313,9 +15377,16 @@ msgid "" "AntialiasedPolygon2D node. That node relies on a texture with custom mipmaps " "to perform antialiasing." msgstr "" +"ç»˜åˆ¶ä»»æ„æ•°é‡é¡¶ç‚¹çš„彩色多边形,凹凸å‡å¯ã€‚与 [method draw_colored_polygon] ä¸" +"åŒï¼Œå¯ä»¥å•独修改å„个顶点的颜色。å¦è¯·å‚阅 [method draw_polyline] å’Œ [method " +"draw_polyline_colors]。\n" +"[b]注æ„:[/b]ç”±äºŽå®žçŽ°çš„åŽŸå› ï¼Œå†…ç½®çš„æŠ—é”¯é½¿æ— æ³•åœ¨é€æ˜Žå¤šè¾¹å½¢ä¸Šå¾—到æ£ç¡®çš„æ•ˆæžœï¼Œå¹¶" +"且å¯èƒ½æ— 法在æŸäº›å¹³å°ä¸Šæ£å¸¸å·¥ä½œã€‚作为替代方案,请安装[url=https://github.com/" +"godot-extended-libraries/godot-antialiased-line2d]抗锯齿 Line2D[/url] æ’ä»¶å¹¶" +"创建 AntialiasedPolygon2D 节点。该节点的抗锯齿是使用带有自定义 mipmap 的纹ç†" +"进行的。" #: doc/classes/CanvasItem.xml -#, fuzzy msgid "" "Draws interconnected line segments with a uniform [code]color[/code] and " "[code]width[/code] and optional antialiasing. When drawing large amounts of " @@ -15332,10 +15403,14 @@ msgstr "" "使用å•一颜色 [code]color[/code] 和宽度 [code]width[/code] 绘制多æ¡ç›¸è¿žçš„线" "段,还å¯ä»¥é€‰æ‹©æŠ—锯齿。绘制大é‡ç›´çº¿æ—¶ï¼Œæ¯”å•独调用 [method draw_line] è¦å¿«ã€‚è¦" "绘制ä¸ç›¸è¿žçš„直线,请æ¢ç”¨ [method draw_multiline]。å¦è¯·å‚阅 [method " -"draw_polygon]。" +"draw_polygon]。\n" +"[b]注æ„:[/b]ç”±äºŽå®žçŽ°çš„åŽŸå› ï¼Œå†…ç½®çš„æŠ—é”¯é½¿æ— æ³•åœ¨é€æ˜Žå¤šè¾¹å½¢ä¸Šå¾—到æ£ç¡®çš„æ•ˆæžœï¼Œå¹¶" +"且å¯èƒ½æ— 法在æŸäº›å¹³å°ä¸Šæ£å¸¸å·¥ä½œã€‚作为替代方案,请安装[url=https://github.com/" +"godot-extended-libraries/godot-antialiased-line2d]抗锯齿 Line2D[/url] æ’ä»¶å¹¶" +"创建 AntialiasedPolygon2D 节点。该节点的抗锯齿是使用带有自定义 mipmap 的纹ç†" +"进行的。" #: doc/classes/CanvasItem.xml -#, fuzzy msgid "" "Draws interconnected line segments with a uniform [code]width[/code] and " "segment-by-segment coloring, and optional antialiasing. Colors assigned to " @@ -15353,7 +15428,12 @@ msgstr "" "使用å•一宽度 [code]width[/code] 绘制多æ¡ç›¸è¿žçš„直线,ä¸åŒçº¿æ®µé¢œè‰²å¯ä»¥ä¸åŒã€‚线" "段的颜色使用 [code]points[/code] å’Œ [code]colors[/code] 的索引进行匹é…。绘制" "大é‡ç›´çº¿æ—¶ï¼Œæ¯”å•独调用 [method draw_line] è¦å¿«ã€‚è¦ç»˜åˆ¶ä¸ç›¸è¿žçš„直线,请æ¢ç”¨ " -"[method draw_multiline_colors]。å¦è¯·å‚阅 [method draw_polygon]。" +"[method draw_multiline_colors]。å¦è¯·å‚阅 [method draw_polygon]。\n" +"[b]注æ„:[/b]ç”±äºŽå®žçŽ°çš„åŽŸå› ï¼Œå†…ç½®çš„æŠ—é”¯é½¿æ— æ³•åœ¨é€æ˜Žå¤šè¾¹å½¢ä¸Šå¾—到æ£ç¡®çš„æ•ˆæžœï¼Œå¹¶" +"且å¯èƒ½æ— 法在æŸäº›å¹³å°ä¸Šæ£å¸¸å·¥ä½œã€‚作为替代方案,请安装[url=https://github.com/" +"godot-extended-libraries/godot-antialiased-line2d]抗锯齿 Line2D[/url] æ’ä»¶å¹¶" +"创建 AntialiasedPolygon2D 节点。该节点的抗锯齿是使用带有自定义 mipmap 的纹ç†" +"进行的。" #: doc/classes/CanvasItem.xml msgid "" @@ -15369,7 +15449,6 @@ msgstr "" "draw_polygon]ã€[method draw_rect]。" #: doc/classes/CanvasItem.xml -#, fuzzy msgid "" "Draws a rectangle. If [code]filled[/code] is [code]true[/code], the " "rectangle will be filled with the [code]color[/code] specified. If " @@ -15391,7 +15470,12 @@ msgstr "" "[code]color[/code]å’Œ[code]width[/code]指定的笔画形å¼ç»˜åˆ¶ã€‚如果" "[code]antialiased[/code]是[code]true[/code]ï¼Œçº¿æ¡æŠ—é”¯é½¿ã€‚\n" "[b]注æ„:[/b][code]width[/code]å’Œ[code]antialiased[/code]åªæœ‰åœ¨[code]filled[/" -"code]是[code]false[/code] æ—¶æ‰æœ‰æ•ˆã€‚" +"code]是[code]false[/code] æ—¶æ‰æœ‰æ•ˆã€‚\n" +"[b]注æ„:[/b]ç”±äºŽå®žçŽ°çš„åŽŸå› ï¼Œå†…ç½®çš„æŠ—é”¯é½¿æ— æ³•åœ¨é€æ˜Žå¤šè¾¹å½¢ä¸Šå¾—到æ£ç¡®çš„æ•ˆæžœï¼Œå¹¶" +"且å¯èƒ½æ— 法在æŸäº›å¹³å°ä¸Šæ£å¸¸å·¥ä½œã€‚作为替代方案,请安装[url=https://github.com/" +"godot-extended-libraries/godot-antialiased-line2d]抗锯齿 Line2D[/url] æ’ä»¶å¹¶" +"创建 AntialiasedPolygon2D 节点。该节点的抗锯齿是使用带有自定义 mipmap 的纹ç†" +"进行的。" #: doc/classes/CanvasItem.xml msgid "" @@ -17059,9 +17143,12 @@ msgid "If [code]true[/code], no collisions will be detected." msgstr "如果[code]true[/code],将ä¸ä¼šæ£€æµ‹åˆ°ç¢°æ’žã€‚" #: doc/classes/CollisionPolygon2D.xml +#, fuzzy msgid "" "If [code]true[/code], only edges that face up, relative to " -"[CollisionPolygon2D]'s rotation, will collide with other objects." +"[CollisionPolygon2D]'s rotation, will collide with other objects.\n" +"[b]Note:[/b] This property has no effect if this [CollisionPolygon2D] is a " +"child of an [Area2D] node." msgstr "" "如果[code]true[/code],相对于[CollisionPolygon2D]çš„æ—‹è½¬è€Œè¨€ï¼Œåªæœ‰é¢æœä¸Šçš„边缘" "æ‰ä¼šä¸Žå…¶ä»–对象å‘生碰撞。" @@ -17171,9 +17258,12 @@ msgstr "" "改å˜ã€‚" #: doc/classes/CollisionShape2D.xml +#, fuzzy msgid "" "Sets whether this collision shape should only detect collision on one side " -"(top or bottom)." +"(top or bottom).\n" +"[b]Note:[/b] This property has no effect if this [CollisionShape2D] is a " +"child of an [Area2D] node." msgstr "设置æ¤ç¢°æ’žå½¢çŠ¶æ˜¯å¦ä»…应检测到一侧(顶部或底部)的碰撞。" #: doc/classes/CollisionShape2D.xml @@ -19735,6 +19825,9 @@ msgid "" "[method Viewport.gui_is_drag_successful].\n" "Best used with [constant Node.NOTIFICATION_DRAG_END]." msgstr "" +"如果拖放æ“作æˆåŠŸåˆ™è¿”å›ž [code]true[/code],是 [method Viewport." +"gui_is_drag_successful] 的替代方案。\n" +"建议与 [constant Node.NOTIFICATION_DRAG_END] é…åˆä½¿ç”¨ã€‚" #: doc/classes/Control.xml msgid "" @@ -20636,7 +20729,7 @@ msgid "" "an item, like a node in the Scene dock." msgstr "" "当用户悬åœåœ¨èŠ‚ç‚¹ä¸Šæ—¶ï¼Œæ˜¾ç¤ºç³»ç»Ÿçš„æ‹–åŠ¨é¼ æ ‡å…‰æ ‡ï¼Œé€šå¸¸æ˜¯ä¸€ä¸ªé—åˆçš„æ‹³å¤´æˆ–åå—符" -"å·ã€‚å®ƒå‘Šè¯‰ç”¨æˆ·ä»–ä»¬å½“å‰æ£åœ¨æ‹–动一个项目,就åƒåœºæ™¯ç 头ä¸çš„èŠ‚ç‚¹ä¸€æ ·ã€‚" +"å·ã€‚å®ƒå‘Šè¯‰ç”¨æˆ·ä»–ä»¬å½“å‰æ£åœ¨æ‹–åŠ¨ä¸€ä¸ªé¡¹ç›®ï¼Œä¾‹å¦‚åœºæ™¯é¢æ¿ä¸çš„节点。" #: doc/classes/Control.xml msgid "" @@ -24385,7 +24478,6 @@ msgstr "" "返回[enum Error]代ç 常é‡ä¹‹ä¸€ï¼ˆæˆåŠŸæ—¶è¿”å›ž [code]OK[/code])。" #: doc/classes/Directory.xml -#, fuzzy msgid "" "Permanently deletes the target file or an empty directory. The argument can " "be relative to the current directory, or an absolute path. If the target " @@ -24394,9 +24486,10 @@ msgid "" "move_to_trash] instead.\n" "Returns one of the [enum Error] code constants ([code]OK[/code] on success)." msgstr "" -"åˆ é™¤ç›®æ ‡æ–‡ä»¶æˆ–ç©ºç›®å½•ã€‚å‚æ•°å¯ä»¥æ˜¯ç›¸å¯¹äºŽå½“å‰ç›®å½•的,也å¯ä»¥æ˜¯ç»å¯¹è·¯å¾„ã€‚å¦‚æžœç›®æ ‡" -"ç›®å½•ä¸æ˜¯ç©ºçš„,æ“作将失败。\n" -"返回[enum Error]代ç 常é‡ä¹‹ä¸€(æˆåŠŸæ—¶è¿”å›ž [code]OK[/code])。" +"æ°¸ä¹…åˆ é™¤ç›®æ ‡æ–‡ä»¶æˆ–ç©ºç›®å½•ã€‚å‚æ•°å¯ä»¥æ˜¯ç›¸å¯¹äºŽå½“å‰ç›®å½•的,也å¯ä»¥æ˜¯ç»å¯¹è·¯å¾„。如果" +"ç›®æ ‡ç›®å½•ä¸æ˜¯ç©ºçš„,æ“作将失败。\n" +"å¦‚æžœä½ ä¸æƒ³æ°¸ä¹…åˆ é™¤è¯¥æ–‡ä»¶/目录,请使用 [method OS.move_to_trash] 代替。\n" +"返回 [enum Error] 代ç 常é‡ä¹‹ä¸€ï¼ˆæˆåŠŸæ—¶è¿”å›ž [code]OK[/code])。" #: doc/classes/Directory.xml msgid "" @@ -25330,7 +25423,7 @@ msgstr "釿–°å¯¼å…¥èµ„æºæ—¶è§¦å‘。" #: doc/classes/EditorFileSystem.xml msgid "" "Emitted if at least one resource is reloaded when the filesystem is scanned." -msgstr "å¦‚æžœåœ¨æ‰«ææ–‡ä»¶ç³»ç»Ÿçš„æ—¶å€™å‘现至少一个资æºè¢«é‡è½½é‚£ä¹ˆè§¦å‘ä¿¡å·ã€‚" +msgstr "å¦‚æžœåœ¨æ‰«ææ–‡ä»¶ç³»ç»Ÿçš„æ—¶å€™ï¼Œè‡³å°‘有一个资æºè¢«é‡æ–°åŠ è½½ï¼Œåˆ™è§¦å‘该信å·ã€‚" #: doc/classes/EditorFileSystem.xml msgid "Emitted if the source of any imported file changed." @@ -28036,6 +28129,11 @@ msgstr "" "这个 [Control] èŠ‚ç‚¹åœ¨ç¼–è¾‘å™¨çš„æ£€æŸ¥å™¨é¢æ¿ä¸ä½¿ç”¨ï¼Œå…许编辑数值。å¯ä»¥ä¸Ž " "[EditorInspectorPlugin] ä¸€èµ·ä½¿ç”¨ï¼Œä»¥é‡æ–°åˆ›å»ºç›¸åŒçš„行为。" +#: doc/classes/EditorSpinSlider.xml +#, fuzzy +msgid "If [code]true[/code], the slider is hidden." +msgstr "如果[code]true[/code],éšè—折å ç®å¤´ã€‚" + #: doc/classes/EditorVCSInterface.xml msgid "" "Version Control System (VCS) interface, which reads and writes to the local " @@ -28575,7 +28673,6 @@ msgid "" msgstr "如果游æˆåœ¨æ¸¸æˆå¾ªçŽ¯çš„å›ºå®šè¿‡ç¨‹å’Œç‰©ç†é˜¶æ®µå†…,返回 [code]true[/code]。" #: doc/classes/Engine.xml -#, fuzzy msgid "" "If [code]true[/code], the script is currently running inside the editor. " "This is useful for [code]tool[/code] scripts to conditionally draw editor " @@ -28605,8 +28702,8 @@ msgstr "" "else:\n" " simulate_physics()\n" "[/codeblock]\n" -"更多信æ¯è¯·å‚阅文档[url=$DOCS_URL/tutorials/misc/running_code_in_the_editor." -"html]《在编辑器ä¸è¿è¡Œä»£ç 》[/url]。\n" +"更多信æ¯è¯·å‚阅文档[url=$DOCS_URL/tutorials/plugins/" +"running_code_in_the_editor.html]《在编辑器ä¸è¿è¡Œä»£ç 》[/url]。\n" "[b]注æ„:[/b]è¦æ£€æµ‹è„šæœ¬æ˜¯å¦ä»Žç¼–辑器[i]构建[/i]ä¸è¿è¡Œï¼ˆä¾‹å¦‚按 [code]F5[/code] " "时),请使用带有 [code]\"editor\"[/code] 傿•°çš„ [method OS.has_feature] 代" "替。[code]OS.has_feature(\"editor\")[/code] 当代ç 在编辑器ä¸è¿è¡Œå’Œä»Žç¼–辑器ä¸" @@ -29445,23 +29542,24 @@ msgstr "" "屿¨¡ç³Šæ•ˆæžœï¼Œä½¿å…¶ä¸ŽåŽŸå§‹å›¾åƒçš„亮度相匹é…。" #: doc/classes/Environment.xml -#, fuzzy msgid "" "Linear tonemapper operator. Reads the linear data and passes it on " "unmodified. This can cause bright lighting to look blown out, with " "noticeable clipping in the output colors." -msgstr "çº¿æ€§éŸ³é¢‘æ˜ å°„å™¨æ“作者。读å–线性数æ®å¹¶ä¸åŠ ä¿®æ”¹åœ°ä¼ é€’ã€‚" +msgstr "" +"çº¿æ€§è‰²è°ƒæ˜ å°„è¿ç®—å。读å–线性数æ®å¹¶å°†å…¶åŽŸæ ·ä¼ é€’ã€‚è¾ƒäº®çš„å…‰ç…§ä¼šå¯¼è‡´è¿‡æ›ã€è¾“出的" +"颜色ä¸ä¼šæœ‰å¯è§çš„æˆªæ–。" #: doc/classes/Environment.xml -#, fuzzy msgid "" "Reinhardt tonemapper operator. Performs a variation on rendered pixels' " "colors by this formula: [code]color = color / (1 + color)[/code]. This " "avoids clipping bright highlights, but the resulting image can look a bit " "dull." msgstr "" -"Reinhardt tonemapperè¿ç®—器。通过这个公å¼å¯¹æ¸²æŸ“åƒç´ 的颜色进行å˜åŒ–。" -"[code]color = color / (1 + color)[/code]." +"Reinhardt è‰²è°ƒæ˜ å°„è¿ç®—å。对渲染åŽçš„åƒç´ 颜色进行调整,使用的是这个公å¼ï¼š" +"[code]color = color / (1 + color)[/code]。å¯ä»¥é¿å…对高光的截æ–,但最终的图åƒ" +"å¯èƒ½çœ‹ä¸ŠåŽ»æœ‰äº›å¯¡æ·¡ã€‚" #: doc/classes/Environment.xml msgid "" @@ -29469,6 +29567,8 @@ msgid "" "resulting image that usually looks more vivid than [constant " "TONE_MAPPER_REINHARDT]." msgstr "" +"ç”µå½±çº§è‰²è°ƒæ˜ å°„å™¨è¿ç®—å。å¯ä»¥é¿å…对高光处的截æ–,最终图åƒé€šå¸¸æ¯” [constant " +"TONE_MAPPER_REINHARDT] 更鲜艳。" #: doc/classes/Environment.xml msgid "" @@ -29480,6 +29580,12 @@ msgid "" "[b]Note:[/b] This tonemapping operator will be removed in Godot 4.0 in favor " "of the more accurate [constant TONE_MAPPER_ACES_FITTED]." msgstr "" +"使用旧有的 Godot 版本的å¦é™¢è‰²å½©ç¼–ç 系统(Academy Color Encoding System)色调" +"æ˜ å°„å™¨ã€‚ä¸Ž [constant TONE_MAPPER_ACES_FITTED] ä¸åŒï¼Œè¿™ä¸ªç‰ˆæœ¬çš„ ACES 对较亮的" +"光照的处ç†ä»Žç‰©ç†è§’度看并ä¸ç²¾ç¡®ã€‚ACES 的输出在对比度方é¢é€šå¸¸æ¯” [constant " +"TONE_MAPPER_REINHARDT] å’Œ [constant TONE_MAPPER_FILMIC] 更高。\n" +"[b]注æ„:[/b]Godot 4.0 ä¸ä¼šç§»é™¤è¿™ä¸ªè‰²è°ƒæ˜ å°„è¿ç®—å,使用更精确的 [constant " +"TONE_MAPPER_ACES_FITTED]。" #: doc/classes/Environment.xml msgid "" @@ -29489,6 +29595,10 @@ msgid "" "has a more contrasted output compared to [constant TONE_MAPPER_REINHARDT] " "and [constant TONE_MAPPER_FILMIC]." msgstr "" +"使用å¦é™¢è‰²å½©ç¼–ç 系统(Academy Color Encoding Systemï¼‰è‰²è°ƒæ˜ å°„å™¨ã€‚ä¸Žå…¶ä»–é€‰é¡¹ç›¸" +"比,ACES çš„æ¶ˆè€—ç•¥é«˜ï¼Œä½†å¯¹äºŽè¾ƒäº®çš„å…‰ç…§çš„å¤„ç†æ›´çœŸå®žï¼Œè¶Šäº®é¥±å’Œåº¦è¶Šä½Žã€‚ACES 的输" +"出在对比度方é¢é€šå¸¸æ¯” [constant TONE_MAPPER_REINHARDT] å’Œ [constant " +"TONE_MAPPER_FILMIC] 更高。" #: doc/classes/Environment.xml msgid "Low depth-of-field blur quality (fastest)." @@ -32533,9 +32643,22 @@ msgid "Gradient's colors returned as a [PoolColorArray]." msgstr "æ¸å˜çš„颜色,以 [PoolColorArray] 返回。" #: doc/classes/Gradient.xml +msgid "" +"Defines how the colors between points of the gradient are interpolated. See " +"[enum InterpolationMode] for available modes." +msgstr "" + +#: doc/classes/Gradient.xml msgid "Gradient's offsets returned as a [PoolRealArray]." msgstr "æ¸å˜çš„åç§»é‡ï¼Œä»¥ [PoolRealArray] 返回。" +#: doc/classes/Gradient.xml +msgid "" +"Constant interpolation, color changes abruptly at each point and stays " +"uniform between. This might cause visible aliasing when used for a gradient " +"texture in some cases." +msgstr "" + #: doc/classes/GradientTexture.xml msgid "Gradient-filled texture." msgstr "æ¸å˜å¡«å……纹ç†ã€‚" @@ -35426,7 +35549,6 @@ msgid "Importing images" msgstr "导入图åƒ" #: doc/classes/Image.xml -#, fuzzy msgid "" "Alpha-blends [code]src_rect[/code] from [code]src[/code] image to this image " "at coordinates [code]dest[/code], clipped accordingly to both image bounds. " @@ -35434,13 +35556,11 @@ msgid "" "[code]src_rect[/code] with not positive size is treated as empty." msgstr "" "å°†æºå›¾åƒ [code]src[/code] 上的矩形区域 [code]src_rect[/code] å¤åˆ¶åˆ°æœ¬å›¾åƒä»Žå" -"æ ‡ [code]dst[/code] 起的区域。如果é®ç½©å›¾ [code]mask[/code] 上æŸä¸ªåƒç´ çš„ " -"Alpha å€¼éž 0,就会把 [code]src[/code] 上对应的åƒç´ å¤åˆ¶åˆ° [code]dst[/code] " -"上。[code]src[/code] 图åƒå’Œ [code]mask[/code] 图åƒçš„大å°ï¼ˆå®½åº¦å’Œé«˜åº¦ï¼‰[b]å¿…é¡»" -"[/b]相åŒï¼Œæ ¼å¼å¯ä»¥ä¸åŒã€‚" +"æ ‡ [code]dst[/code] èµ·çš„åŒºåŸŸï¼Œä¼šæ ¹æ®ä¸¤è€…的图åƒåŒºåŸŸè¿›è¡Œè£å‰ªã€‚è¿™å¼ å›¾åƒå’Œ " +"[code]src[/code] 图åƒçš„æ ¼å¼[b]å¿…é¡»[/b]一致。[code]src_rect[/code] 的大å°å¦‚æžœ" +"éžæ£ï¼Œåˆ™ä¼šä½œä¸ºç©ºçŸ©å½¢å¤„ç†ã€‚" #: doc/classes/Image.xml -#, fuzzy msgid "" "Alpha-blends [code]src_rect[/code] from [code]src[/code] image to this image " "using [code]mask[/code] image at coordinates [code]dst[/code], clipped " @@ -35453,14 +35573,15 @@ msgid "" "[code]src_rect[/code] with not positive size is treated as empty." msgstr "" "å°†æºå›¾åƒ [code]src[/code] 上的矩形区域 [code]src_rect[/code] 与本图åƒä»Žåæ ‡ " -"[code]dst[/code] èµ·çš„åŒºåŸŸæ ¹æ®é®ç½©å›¾åƒ [code]mask[/code] 进行 Alpha æ··åˆã€‚" -"[code]src[/code] å’Œ [code]mask[/code] éƒ½éœ€è¦æœ‰ Alpha 通é“。如果æŸä¸ªé®ç½©åƒç´ " -"çš„ Alpha å€¼éž 0,在 [code]dst[/code] å’Œ [code]src[/code] 上对应的åƒç´ 就会进行" -"æ··åˆã€‚[code]src[/code] 图åƒå’Œ [code]mask[/code] 图åƒçš„大å°ï¼ˆå®½åº¦å’Œé«˜åº¦ï¼‰[b]å¿…" -"é¡»[/b]相åŒï¼Œæ ¼å¼å¯ä»¥ä¸åŒã€‚" +"[code]dst[/code] èµ·çš„åŒºåŸŸæ ¹æ®é®ç½©å›¾åƒ [code]mask[/code] 进行 Alpha æ··åˆï¼Œä¼šæ ¹" +"æ®ä¸¤è€…的图åƒåŒºåŸŸè¿›è¡Œè£å‰ªã€‚[code]src[/code] å’Œ [code]mask[/code] éƒ½éœ€è¦æœ‰ " +"Alpha 通é“。如果æŸä¸ªé®ç½©åƒç´ çš„ Alpha å€¼éž 0,在 [code]dst[/code] å’Œ " +"[code]src[/code] 上对应的åƒç´ 就会进行混åˆã€‚è¿™å¼ å›¾åƒä¸Ž [code]src[/code] 图åƒçš„" +"æ ¼å¼[b]å¿…é¡»[/b]一致。[code]src[/code] 图åƒå’Œ [code]mask[/code] 图åƒçš„大å°ï¼ˆå®½" +"度和高度)[b]å¿…é¡»[/b]相åŒï¼Œæ ¼å¼å¯ä»¥ä¸åŒã€‚[code]src_rect[/code] 的大å°å¦‚æžœéž" +"æ£ï¼Œåˆ™ä¼šä½œä¸ºç©ºçŸ©å½¢å¤„ç†ã€‚" #: doc/classes/Image.xml -#, fuzzy msgid "" "Copies [code]src_rect[/code] from [code]src[/code] image to this image at " "coordinates [code]dst[/code], clipped accordingly to both image bounds. This " @@ -35468,13 +35589,11 @@ msgid "" "[code]src_rect[/code] with not positive size is treated as empty." msgstr "" "å°†æºå›¾åƒ [code]src[/code] 上的矩形区域 [code]src_rect[/code] å¤åˆ¶åˆ°æœ¬å›¾åƒä»Žå" -"æ ‡ [code]dst[/code] 起的区域。如果é®ç½©å›¾ [code]mask[/code] 上æŸä¸ªåƒç´ çš„ " -"Alpha å€¼éž 0,就会把 [code]src[/code] 上对应的åƒç´ å¤åˆ¶åˆ° [code]dst[/code] " -"上。[code]src[/code] 图åƒå’Œ [code]mask[/code] 图åƒçš„大å°ï¼ˆå®½åº¦å’Œé«˜åº¦ï¼‰[b]å¿…é¡»" -"[/b]相åŒï¼Œæ ¼å¼å¯ä»¥ä¸åŒã€‚" +"æ ‡ [code]dst[/code] èµ·çš„åŒºåŸŸï¼Œä¼šæ ¹æ®ä¸¤è€…的图åƒåŒºåŸŸè¿›è¡Œè£å‰ªã€‚è¿™å¼ å›¾åƒå’Œ " +"[code]src[/code] 图åƒçš„æ ¼å¼[b]å¿…é¡»[/b]一致。[code]src_rect[/code] 的大å°å¦‚æžœ" +"éžæ£ï¼Œåˆ™ä¼šä½œä¸ºç©ºçŸ©å½¢å¤„ç†ã€‚" #: doc/classes/Image.xml -#, fuzzy msgid "" "Blits [code]src_rect[/code] area from [code]src[/code] image to this image " "at the coordinates given by [code]dst[/code], clipped accordingly to both " @@ -35486,10 +35605,12 @@ msgid "" "positive size is treated as empty." msgstr "" "å°†æºå›¾åƒ [code]src[/code] 上的矩形区域 [code]src_rect[/code] å¤åˆ¶åˆ°æœ¬å›¾åƒä»Žå" -"æ ‡ [code]dst[/code] 起的区域。如果é®ç½©å›¾ [code]mask[/code] 上æŸä¸ªåƒç´ çš„ " -"Alpha å€¼éž 0,就会把 [code]src[/code] 上对应的åƒç´ å¤åˆ¶åˆ° [code]dst[/code] " -"上。[code]src[/code] 图åƒå’Œ [code]mask[/code] 图åƒçš„大å°ï¼ˆå®½åº¦å’Œé«˜åº¦ï¼‰[b]å¿…é¡»" -"[/b]相åŒï¼Œæ ¼å¼å¯ä»¥ä¸åŒã€‚" +"æ ‡ [code]dst[/code] èµ·çš„åŒºåŸŸï¼Œä¼šæ ¹æ®ä¸¤è€…的图åƒåŒºåŸŸè¿›è¡Œè£å‰ªã€‚如果é®ç½©å›¾ " +"[code]mask[/code] 上æŸä¸ªåƒç´ çš„ Alpha å€¼éž 0,就会把 [code]src[/code] 上对应的" +"åƒç´ å¤åˆ¶åˆ° [code]dst[/code] ä¸Šã€‚è¿™å¼ å›¾åƒå’Œ [code]src[/code] 图åƒçš„æ ¼å¼[b]å¿…é¡»" +"[/b]一致。[code]src[/code] 图åƒå’Œ [code]mask[/code] 图åƒçš„大å°ï¼ˆå®½åº¦å’Œé«˜åº¦ï¼‰" +"[b]å¿…é¡»[/b]相åŒï¼Œæ ¼å¼å¯ä»¥ä¸åŒã€‚[code]src_rect[/code] 的大å°å¦‚æžœéžæ£ï¼Œåˆ™ä¼šä½œä¸º" +"空矩形处ç†ã€‚" #: doc/classes/Image.xml msgid "" @@ -37186,7 +37307,6 @@ msgid "Stops the vibration of the joypad." msgstr "åœæ¢æ¸¸æˆæ‰‹æŸ„的振动。" #: doc/classes/Input.xml -#, fuzzy msgid "" "Vibrate Android and iOS devices.\n" "[b]Note:[/b] For Android, it requires enabling the [code]VIBRATE[/code] " @@ -37196,7 +37316,8 @@ msgid "" msgstr "" "振动 Android å’Œ iOS 设备。\n" "[b]注æ„:[/b]Android 需è¦å¯¼å‡ºè®¾ç½®ä¸çš„ [code]VIBRATE[/code] æƒé™ã€‚ iOS 䏿”¯æŒ" -"æŒç»æ—¶é—´ã€‚" +"æŒç»æ—¶é—´ã€‚\n" +"[b]注æ„:[/b]在 iOS å¹³å°ä¸Šï¼ŒiOS 13 åŠä¹‹åŽçš„ç‰ˆæœ¬æ‰æ”¯æŒæŒ‡å®šæŒç»æ—¶é—´ã€‚" #: doc/classes/Input.xml msgid "" @@ -38162,6 +38283,10 @@ msgid "" "your project's input binds from the editor, read the [code]input/*[/code] " "settings from [ProjectSettings]." msgstr "" +"返回与给定动作关è”çš„ [InputEvent] 的数组。\n" +"[b]注æ„:[/b]在编辑器ä¸ä½¿ç”¨æ—¶ï¼ˆä¾‹å¦‚在工具脚本或 [EditorPlugin] ä¸ä½¿ç”¨ï¼‰ï¼Œè¿™ä¸ª" +"æ–¹æ³•è¿”å›žçš„æ˜¯ç¼–è¾‘å™¨åŠ¨ä½œå¯¹åº”çš„äº‹ä»¶ã€‚å¦‚æžœä½ æƒ³è¦åœ¨ç¼–辑器ä¸è®¿é—®ä½ 的项目的输入绑" +"å®šï¼Œè¯·è¯»å– [ProjectSettings] çš„ [code]input/*[/code] 设置。" #: doc/classes/InputMap.xml msgid "Returns an array of all actions in the [InputMap]." @@ -38349,7 +38474,7 @@ msgstr "ç›®æ ‡çš„[NodePath]。" #: doc/classes/IntervalTweener.xml msgid "Creates an idle interval in a [SceneTreeTween] animation." -msgstr "" +msgstr "在 [SceneTreeTween] 动画ä¸åˆ›å»ºç©ºé—²é—´éš”。" #: doc/classes/IntervalTweener.xml msgid "" @@ -38359,6 +38484,10 @@ msgid "" "to create [IntervalTweener]. Any [IntervalTweener] created manually will not " "function correctly." msgstr "" +"[IntervalTweener] å¯ç”¨äºŽåœ¨è¡¥é—´åºåˆ—ä¸åˆ¶ä½œå»¶è¿Ÿã€‚更多用法信æ¯è¯·å‚阅 [method " +"SceneTreeTween.tween_interval]。\n" +"[b]注æ„:[/b]创建 [IntervalTweener] 的唯一æ£ç¡®æ–¹æ³•是 [method SceneTreeTween." +"tween_interval]。任何手动创建的 [IntervalTweener] éƒ½æ— æ³•æ£å¸¸å·¥ä½œã€‚" #: doc/classes/IP.xml msgid "Internet protocol (IP) support functions such as DNS resolution." @@ -40886,7 +41015,6 @@ msgid "A 2D line." msgstr "ä¸€æ¡ 2D 线。" #: doc/classes/Line2D.xml -#, fuzzy msgid "" "A line through several points in 2D space. Supports varying width and color " "over the line's length, texturing, and several cap/joint types.\n" @@ -40896,9 +41024,10 @@ msgid "" "[member ProjectSettings.rendering/limits/buffers/" "canvas_polygon_index_buffer_size_kb]." msgstr "" -"在 2D 空间ä¸é€šè¿‡å‡ 个点的线。\n" -"[b]注æ„:[/b]默认情况下,Godot一次最多åªèƒ½ç»˜åˆ¶ 4,096 个多边形点。è¦å¢žåŠ è¿™ä¸ªé™" -"åˆ¶ï¼Œè¯·æ‰“å¼€é¡¹ç›®è®¾ç½®ï¼Œå¢žåŠ [member ProjectSettings.rendering/limits/buffers/" +"在 2D 空间ä¸é€šè¿‡å‡ 个点的线。支æŒå®½åº¦å’Œé¢œè‰²æ²¿ç€çº¿æ®µé•¿åº¦å˜åŒ–,支æŒçº¹ç†åŠè‹¥å¹²ç«¯" +"点/交点类型。\n" +"[b]注æ„:[/b]默认情况下,Godot 一次最多åªèƒ½ç»˜åˆ¶ 4,096 个多边形点。è¦å¢žåŠ è¿™ä¸ª" +"é™åˆ¶ï¼Œè¯·æ‰“å¼€é¡¹ç›®è®¾ç½®ï¼Œå¢žåŠ [member ProjectSettings.rendering/limits/buffers/" "canvas_polygon_buffer_size_kb] å’Œ [member ProjectSettings.rendering/limits/" "buffers/canvas_polygon_index_buffer_size_kb]。" @@ -40956,6 +41085,15 @@ msgid "" "perform antialiasing. 2D batching is also still supported with those " "antialiased lines." msgstr "" +"为 [code]true[/code] 时,会å°è¯•对线段的边缘进行抗锯齿处ç†ï¼Œæ–¹æ³•是在边缘绘制一" +"薄层 OpenGL 平滑线段。\n" +"[b]注æ„:[/b]如果 [member antialiased] 为 [code]true[/code],那么 Line2D å°±ä¸" +"ä¼šè¢«åˆ†æ‰¹åŠ é€Ÿã€‚\n" +"[b]注æ„:[/b]ç”±äºŽå®žçŽ°çš„åŽŸå› ï¼Œå†…ç½®çš„æŠ—é”¯é½¿æ— æ³•åœ¨é€æ˜Žå¤šè¾¹å½¢ä¸Šå¾—到æ£ç¡®çš„æ•ˆæžœï¼Œå¹¶" +"且å¯èƒ½æ— 法在æŸäº›å¹³å°ä¸Šæ£å¸¸å·¥ä½œã€‚作为替代方案,请安装[url=https://github.com/" +"godot-extended-libraries/godot-antialiased-line2d]抗锯齿 Line2D[/url] æ’ä»¶å¹¶" +"创建 AntialiasedLine2D 节点。该节点的抗锯齿是使用带有自定义 mipmap 的纹ç†è¿›è¡Œ" +"的。这些抗锯齿线段ä»ç„¶æ”¯æŒ 2D 分批。" #: doc/classes/Line2D.xml msgid "" @@ -43174,7 +43312,7 @@ msgstr "è®¾ç½®ç”¨äºŽç»˜åˆ¶çš„ç½‘æ ¼ï¼Œè¯¥ç½‘æ ¼å¿…é¡»ä½¿ç”¨2D顶点。" #: doc/classes/MethodTweener.xml msgid "" "Interpolates an abstract value and supplies it to a method called over time." -msgstr "" +msgstr "对抽象值进行æ’值,并将其æä¾›ç»™ä¸€ä¸ªæŒç»è°ƒç”¨çš„æ–¹æ³•。" #: doc/classes/MethodTweener.xml msgid "" @@ -43186,25 +43324,34 @@ msgid "" "create [MethodTweener]. Any [MethodTweener] created manually will not " "function correctly." msgstr "" +"[MethodTweener] 类似于 [CallbackTweener] å’Œ [PropertyTweener] 的组åˆï¼Œä¼šå°†æ’" +"值åŽçš„å€¼ä½œä¸ºè°ƒç”¨æ–¹æ³•æ—¶çš„å‚æ•°ã€‚更多用法信æ¯è¯·å‚阅 [method SceneTreeTween." +"tween_method]。\n" +"[b]注æ„:[/b]创建 [MethodTweener] 的唯一æ£ç¡®æ–¹æ³•是 [method SceneTreeTween." +"tween_method]。任何手动创建的 [MethodTweener] éƒ½æ— æ³•æ£å¸¸å·¥ä½œã€‚" #: doc/classes/MethodTweener.xml msgid "" "Sets the time in seconds after which the [MethodTweener] will start " "interpolating. By default there's no delay." -msgstr "" +msgstr "设置该 [MethodTweener] 开始æ’值的时间,å•ä½ä¸ºç§’ã€‚é»˜è®¤æ— å»¶è¿Ÿã€‚" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used easing from [enum Tween.EaseType]. If not set, the " "default easing is used from the [SceneTreeTween] that contains this Tweener." msgstr "" +"设置所使用的缓动类型 [enum Tween.EaseType]。如果没有设置,则使用包å«è¿™ä¸ª " +"Tweener çš„ [SceneTreeTween] 的默认缓动类型。" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used transition from [enum Tween.TransitionType]. If not " "set, the default transition is used from the [SceneTreeTween] that contains " "this Tweener." msgstr "" +"设置所使用的过渡类型 [enum Tween.TransitionType]。如果没有设置,则使用包å«è¿™" +"个 Tweener çš„ [SceneTreeTween] 的默认过渡类型。" #: modules/mobile_vr/doc_classes/MobileVRInterface.xml msgid "Generic mobile VR implementation." @@ -43757,8 +43904,8 @@ msgid "" "method or property for all RPC calls, making it unavailable. Default for all " "methods." msgstr "" -"与[method Node.rpc_config]或[method Node.rset_config]一起使用,å¯ä»¥åœ¨æ‰€æœ‰RPC" -"调用ä¸ç¦ç”¨æŸä¸ªæ–¹æ³•或属性,使其ä¸å¯ç”¨ã€‚所有方法的默认值。" +"与 [method Node.rpc_config] 或 [method Node.rset_config] 一起使用,å¯ä»¥åœ¨æ‰€" +"有 RPC 调用ä¸ç¦ç”¨æŸä¸ªæ–¹æ³•或属性,使其ä¸å¯ç”¨ã€‚所有方法的默认值。" #: doc/classes/MultiplayerAPI.xml msgid "" @@ -43768,9 +43915,10 @@ msgid "" "changes are accepted from all remote peers, no matter if they are node's " "master or puppets." msgstr "" -"与[method Node.rpc_config]或[method Node.rset_config]一起使用,用于设置åªåœ¨è¿œ" -"程端调用æŸä¸ªæ–¹æ³•æˆ–æ”¹å˜æŸä¸ªå±žæ€§ï¼Œè€Œä¸æ˜¯åœ¨æœ¬åœ°ã€‚类似于[code]remote[/code]关键" -"å—。所有远程对ç‰ä½“的调用和属性改å˜éƒ½è¢«æŽ¥å—,ä¸ç®¡å®ƒä»¬æ˜¯èŠ‚ç‚¹çš„ä¸»æŽ§è¿˜æ˜¯å‚€å„¡ã€‚" +"与 [method Node.rpc_config] 或 [method Node.rset_config] 一起使用,用于设置åª" +"在远程端调用æŸä¸ªæ–¹æ³•æˆ–æ”¹å˜æŸä¸ªå±žæ€§ï¼Œè€Œä¸æ˜¯åœ¨æœ¬åœ°ã€‚类似于 [code]remote[/code] " +"关键å—。所有远程对ç‰ä½“的调用和属性改å˜éƒ½è¢«æŽ¥å—,ä¸ç®¡å®ƒä»¬æ˜¯èŠ‚ç‚¹çš„ä¸»æŽ§è¿˜æ˜¯å‚€" +"儡。" #: doc/classes/MultiplayerAPI.xml msgid "" @@ -43782,7 +43930,7 @@ msgid "" msgstr "" "与 [method Node.rpc_config] 或 [method Node.rset_config] 一起用于设置è¦è°ƒç”¨çš„" "方法或仅在æ¤èŠ‚ç‚¹çš„ç½‘ç»œä¸»æœºä¸Šæ›´æ”¹çš„å±žæ€§ã€‚ç±»ä¼¼äºŽ [code]master[/code] 关键å—。仅" -"接å—节点网络傀儡的方法调用或属性更改,请å‚阅[method Node." +"接å—节点网络傀儡的方法调用或属性更改,请å‚阅 [method Node." "set_network_master]。" #: doc/classes/MultiplayerAPI.xml @@ -43795,7 +43943,7 @@ msgid "" msgstr "" "与 [method Node.rpc_config] 或 [method Node.rset_config] 一起使用,以设置仅在" "æ¤èŠ‚ç‚¹çš„å‚€å„¡ä¸Šè°ƒç”¨çš„æ–¹æ³•æˆ–æ”¹å˜çš„属性。类似于 [code]puppet[/code] 关键å—ã€‚åªæŽ¥" -"å—æ¥è‡ªèŠ‚ç‚¹çš„ç½‘ç»œä¸»ç«™çš„è°ƒç”¨æˆ–å±žæ€§æ›´æ”¹ï¼Œè§[method Node.set_network_master]。" +"å—æ¥è‡ªèŠ‚ç‚¹çš„ç½‘ç»œä¸»ç«™çš„è°ƒç”¨æˆ–å±žæ€§æ›´æ”¹ï¼Œè§ [method Node.set_network_master]。" #: doc/classes/MultiplayerAPI.xml msgid "" @@ -44097,6 +44245,15 @@ msgid "Creates the agent." msgstr "创建代ç†ã€‚" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "" +"Returns the navigation map [RID] the requested [code]agent[/code] is " +"currently assigned to." +msgstr "" +"返回键为 [code]name[/code] çš„ [Animation] 动画,未找到时为 [code]null[/" +"code]。" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "如果地图在上一帧å‘生了改å˜ï¼Œåˆ™è¿”回 [code]true[/code]。" @@ -44167,6 +44324,12 @@ msgid "Create a new map." msgstr "åˆ›å»ºä¸€å¼ æ–°åœ°å›¾ã€‚" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation agents [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns the map cell size." msgstr "返回地图的å•å…ƒæ ¼å¤§å°ã€‚" @@ -44193,6 +44356,12 @@ msgid "Returns the navigation path to reach the destination from the origin." msgstr "返回从原点到终点的导航路径。" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation regions [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns [code]true[/code] if the map is active." msgstr "如果地图处于活动状æ€ï¼Œåˆ™è¿”回 [code]true[/code]。" @@ -44214,6 +44383,12 @@ msgid "Creates a new region." msgstr "创建一个新的地区。" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]region[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the map for the region." msgstr "设置该地区的地图。" @@ -44764,18 +44939,60 @@ msgid "Represents the size of the [enum SourceGeometryMode] enum." msgstr "表示 [enum SourceGeometryMode] 枚举的大å°ã€‚" #: doc/classes/NavigationMeshGenerator.xml -msgid "This class is responsible for creating and clearing navigation meshes." +#, fuzzy +msgid "Helper class for creating and clearing navigation meshes." msgstr "è¿™ä¸ªç±»è´Ÿè´£å¯¼èˆªç½‘æ ¼çš„åˆ›å»ºå’Œæ¸…ç†ã€‚" #: doc/classes/NavigationMeshGenerator.xml msgid "" -"Bakes the navigation mesh. This will allow you to use pathfinding with the " -"navigation system." -msgstr "çƒ˜ç„™å¯¼èˆªç½‘æ ¼ã€‚å¯ä»¥ç”¨äºŽå¯¼èˆªç³»ç»Ÿä¸çš„寻路。" +"This class is responsible for creating and clearing 3D navigation meshes " +"used as [NavigationMesh] resources inside [NavigationMeshInstance]. The " +"[NavigationMeshGenerator] has very limited to no use for 2D as the " +"navigation mesh baking process expects 3D node types and 3D source geometry " +"to parse.\n" +"The entire navigation mesh baking is best done in a separate thread as the " +"voxelization, collision tests and mesh optimization steps involved are very " +"performance and time hungry operations.\n" +"Navigation mesh baking happens in multiple steps and the result depends on " +"3D source geometry and properties of the [NavigationMesh] resource. In the " +"first step, starting from a root node and depending on [NavigationMesh] " +"properties all valid 3D source geometry nodes are collected from the " +"[SceneTree]. Second, all collected nodes are parsed for their relevant 3D " +"geometry data and a combined 3D mesh is build. Due to the many different " +"types of parsable objects, from normal [MeshInstance]s to [CSGShape]s or " +"various [CollisionObject]s, some operations to collect geometry data can " +"trigger [VisualServer] and [PhysicsServer] synchronizations. Server " +"synchronization can have a negative effect on baking time or framerate as it " +"often involves [Mutex] locking for thread security. Many parsable objects " +"and the continuous synchronization with other threaded Servers can increase " +"the baking time significantly. On the other hand only a few but very large " +"and complex objects will take some time to prepare for the Servers which can " +"noticeably stall the next frame render. As a general rule the total amount " +"of parsable objects and their individual size and complexity should be " +"balanced to avoid framerate issues or very long baking times. The combined " +"mesh is then passed to the Recast Navigation Object to test the source " +"geometry for walkable terrain suitable to [NavigationMesh] agent properties " +"by creating a voxel world around the meshes bounding area.\n" +"The finalized navigation mesh is then returned and stored inside the " +"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes." +msgstr "" + +#: doc/classes/NavigationMeshGenerator.xml +msgid "" +"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " +"nodes under the provided [code]root_node[/code] or a specific group of nodes " +"for potential source geometry. The parse behavior can be controlled with the " +"[member NavigationMesh.geometry/parsed_geometry_type] and [member " +"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[NavigationMesh] resource." +msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "Clears the navigation mesh." -msgstr "æ¸…é™¤å¯¼èˆªç½‘æ ¼ã€‚" +#, fuzzy +msgid "" +"Removes all polygons and vertices from the provided [code]nav_mesh[/code] " +"resource." +msgstr "移除å为 [code]name[/code] çš„ä¸»é¢˜å›¾æ ‡è¦†ç›–é¡¹ã€‚" #: doc/classes/NavigationMeshInstance.xml msgid "An instance of a [NavigationMesh]." @@ -44791,14 +45008,23 @@ msgstr "" "[Navigation] 节点什么å¯ä»¥å¯¼èˆªã€ä»€ä¹ˆä¸å¯ä»¥ã€‚应该是 [Navigation] 节点的å节点。" #: doc/classes/NavigationMeshInstance.xml +#, fuzzy msgid "" "Bakes the [NavigationMesh]. If [code]on_thread[/code] is set to [code]true[/" "code] (default), the baking is done on a separate thread. Baking on separate " "thread is useful because navigation baking is not a cheap operation. When it " "is completed, it automatically sets the new [NavigationMesh]. Please note " "that baking on separate thread may be very slow if geometry is parsed from " -"meshes as async access to each mesh involves heavy synchronization." -msgstr "" +"meshes as async access to each mesh involves heavy synchronization. Also, " +"please note that baking on a separate thread is automatically disabled on " +"operating systems that cannot use threads (such as HTML5 with threads " +"disabled)." +msgstr "" +"烘焙该 [NavigationMesh]。如果 [code]on_thread[/code] 为 [code]true[/code](默" +"认),就会在å•独的线程ä¸è¿›è¡Œçƒ˜ç„™ã€‚å•å¼€çº¿ç¨‹çƒ˜ç„™å¾ˆæœ‰ç”¨ï¼Œå› ä¸ºå¯¼èˆªçƒ˜ç„™æ“作的消耗" +"å¹¶ä¸ä½Žã€‚烘焙完æˆåŽä¼šè‡ªåŠ¨è®¾ç½®æ–°çš„ [NavigationMesh]。请注æ„ï¼Œå¦‚æžœå‡ ä½•ä½“æ˜¯ä»Žç½‘æ ¼" +"è§£æžè€Œæ¥çš„,那么å•开线程烘焙å¯èƒ½ä¼šéžå¸¸æ…¢ï¼Œå› ä¸ºå¯¹ç½‘æ ¼çš„å¼‚æ¥è®¿é—®æ¶‰åŠåˆ°å¤§é‡åŒæ¥" +"æ“作。" #: doc/classes/NavigationMeshInstance.xml msgid "" @@ -44807,6 +45033,9 @@ msgid "" "identify the [NavigationMeshInstance] closest to a point on the merged " "navigation map." msgstr "" +"返回这个区域在 [NavigationServer] 上的 [RID]。å¯ä»¥å’Œ [method " +"NavigationServer.map_get_closest_point_owner] 组åˆä½¿ç”¨ï¼ŒèŽ·å–åˆå¹¶åŽçš„导航图ä¸" +"与æŸä¸ªç‚¹æœ€æŽ¥è¿‘çš„ [NavigationMeshInstance]。" #: doc/classes/NavigationMeshInstance.xml msgid "Determines if the [NavigationMeshInstance] is enabled or disabled." @@ -44846,6 +45075,11 @@ msgid "" msgstr "返回该障ç¢ç‰©çš„导航系统所使用的 [Navigation] 节点。" #: doc/classes/NavigationObstacle.xml +#, fuzzy +msgid "Returns the [RID] of this obstacle on the [NavigationServer]." +msgstr "返回区域的第n个形状的[RID]。" + +#: doc/classes/NavigationObstacle.xml msgid "" "Sets the [Navigation] node used by the obstacle. Useful when you don't want " "to make the obstacle a child of a [Navigation] node." @@ -44888,6 +45122,11 @@ msgid "" msgstr "返回该障ç¢ç‰©çš„导航系统所使用的 [Navigation2D] 节点。" #: doc/classes/NavigationObstacle2D.xml +#, fuzzy +msgid "Returns the [RID] of this obstacle on the [Navigation2DServer]." +msgstr "返回区域的第n个形状的[RID]。" + +#: doc/classes/NavigationObstacle2D.xml msgid "" "Sets the [Navigation2D] node used by the obstacle. Useful when you don't " "want to make the obstacle a child of a [Navigation2D] node." @@ -45028,6 +45267,9 @@ msgid "" "identify the [NavigationPolygonInstance] closest to a point on the merged " "navigation map." msgstr "" +"返回这个区域在 [Navigation2DServer] 上的 [RID]。å¯ä»¥å’Œ [method " +"Navigation2DServer.map_get_closest_point_owner] 组åˆä½¿ç”¨ï¼ŒèŽ·å–åˆå¹¶åŽçš„导航图" +"ä¸ä¸ŽæŸä¸ªç‚¹æœ€æŽ¥è¿‘çš„ [NavigationPolygonInstance]。" #: doc/classes/NavigationServer.xml msgid "Server interface for low-level 3D navigation access." @@ -46055,7 +46297,6 @@ msgstr "" "是“å¤å„¿â€ï¼‰ã€‚" #: doc/classes/Node.xml -#, fuzzy msgid "" "Adds a child node. Nodes can have any number of children, but every child " "must have a unique name. Child nodes are automatically deleted when the " @@ -46095,7 +46336,7 @@ msgstr "" "[/codeblock]\n" "[b]注æ„:[/b]如果想è¦å°†å节点æŒä¹…化进 [PackedScene],除了调用 [method " "add_child] ä¹‹å¤–ä½ è¿˜å¿…é¡»è®¾ç½® [member owner]。通常在[url=$DOCS_URL/tutorials/" -"misc/running_code_in_the_editor.html]工具脚本[/url]å’Œ[url=$DOCS_URL/" +"plugins/running_code_in_the_editor.html]工具脚本[/url]å’Œ[url=$DOCS_URL/" "tutorials/plugins/editor/index.html]编辑器æ’ä»¶[/url]ä¸ä¼šç”¨åˆ°ã€‚如果调用了 " "[method add_child] 但没有设置 [member owner],那么新建的这个 [Node] åœ¨åœºæ™¯æ ‘" "ä¸ä¸å¯è§ï¼Œä½†åœ¨ 2D/3D 视图ä¸å¯è§ã€‚" @@ -46154,6 +46395,10 @@ msgid "" "get_tree().create_tween().bind_node(self)\n" "[/codeblock]" msgstr "" +"新建 [SceneTreeTween] 并将其绑定到这个节点。与如下æ“作ç‰ä»·ï¼š\n" +"[codeblock]\n" +"get_tree().create_tween().bind_node(self)\n" +"[/codeblock]" #: doc/classes/Node.xml msgid "" @@ -46497,9 +46742,10 @@ msgstr "" "如果本地系统是æ¤èŠ‚ç‚¹çš„ä¸»ç³»ç»Ÿï¼ˆç”¨äºŽå¤šäººæ¸¸æˆï¼‰ï¼Œåˆ™è¿”回 [code]true[/code]。" #: doc/classes/Node.xml +#, fuzzy msgid "" "Returns [code]true[/code] if the physics interpolated flag is set for this " -"Node (see [method set_physics_interpolated]).\n" +"Node (see [member physics_interpolation_mode]).\n" "[b]Note:[/b] Interpolation will only be active is both the flag is set " "[b]and[/b] physics interpolation is enabled within the [SceneTree]. This can " "be tested using [method is_physics_interpolated_and_enabled]." @@ -46510,9 +46756,10 @@ msgstr "" "å¯ç”¨æ’值。å¯ä»¥ä½¿ç”¨ [method is_physics_interpolated_and_enabled] 进行检查。" #: doc/classes/Node.xml +#, fuzzy msgid "" -"Returns [code]true[/code] if physics interpolation is enabled (see [method " -"set_physics_interpolated]) [b]and[/b] enabled in the [SceneTree].\n" +"Returns [code]true[/code] if physics interpolation is enabled (see [member " +"physics_interpolation_mode]) [b]and[/b] enabled in the [SceneTree].\n" "This is a convenience version of [method is_physics_interpolated] that also " "checks whether physics interpolation is enabled globally.\n" "See [member SceneTree.physics_interpolation] and [member ProjectSettings." @@ -46805,7 +47052,7 @@ msgstr "" "å¯é€‰æ‹©å°†æ‰€æœ‰é™„åŠ å‚æ•°ä½œä¸ºå‚æ•°å‘é€ç»™ RPC 调用的方法。调用请求将åªè¢«å…·æœ‰ç›¸åŒ " "[NodePath] 的节点接收,包括完全相åŒçš„节点å称。行为å–决于给定方法的 RPC é…" "ç½®ï¼Œè§ [method rpc_config]。方法在默认情况下ä¸ä¼šæš´éœ²ç»™ RPC。å‚阅 [method " -"rset] å’Œ[ method rset_config] 的属性。返回一个空的 [Variant]。\n" +"rset] å’Œ[method rset_config] 的属性。返回一个空的 [Variant]。\n" "[b]注æ„:[/b]åªæœ‰åœ¨ä½ 从 [SceneTree] 收到 [code]connected_to_server[/code] ä¿¡" "å·ä¹‹åŽï¼Œä½ æ‰èƒ½å®‰å…¨åœ°åœ¨å®¢æˆ·ç«¯ä½¿ç”¨ RPCã€‚ä½ è¿˜éœ€è¦è·Ÿè¸ªè¿žæŽ¥çжæ€ï¼Œå¯ä»¥é€šè¿‡ " "[code]server_disconnected[/code] ç‰ [SceneTree] ä¿¡å·æˆ–者检查 [code]SceneTree." @@ -46860,9 +47107,9 @@ msgid "" "rset_config]. See also [method rpc] for RPCs for methods, most information " "applies to this method as well." msgstr "" -"在其他对ç‰ä½“上远程改å˜ä¸€ä¸ªå±žæ€§çš„值(和本地)。行为å–决于给定属性的RPCé…置,è§" -"[method rset_config]。关于方法的RPC,也请å‚阅[method rpc],大多数信æ¯ä¹Ÿé€‚用于" -"这个方法。" +"在其他对ç‰ä½“上远程改å˜ä¸€ä¸ªå±žæ€§çš„值(和本地)。行为å–决于给定属性的RPCé…置," +"è§ [method rset_config]。关于方法的RPC,也请å‚阅 [method rpc],大多数信æ¯ä¹Ÿé€‚" +"用于这个方法。" #: doc/classes/Node.xml msgid "" @@ -46925,16 +47172,6 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Enables or disables physics interpolation per node, offering a finer grain " -"of control than turning physics interpolation on and off globally.\n" -"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " -"interpolation can sometimes give superior results." -msgstr "" -"å¯ç”¨æˆ–ç¦ç”¨è¯¥èŠ‚ç‚¹çš„ç‰©ç†æ’值,å¯ä»¥åœ¨å¼€å…³å…¨å±€ç‰©ç†æ’值的基础上进行微调。\n" -"[b]注æ„:[/b]对 [Camera] 尤其有用,自定义æ’å€¼æœ‰æ—¶ä¼šå¸¦æ¥æ›´å¥½çš„æ•ˆæžœã€‚" - -#: doc/classes/Node.xml -msgid "" "Enables or disables physics (i.e. fixed framerate) processing. When a node " "is being processed, it will receive a [constant " "NOTIFICATION_PHYSICS_PROCESS] at a fixed (usually 60 FPS, see [member Engine." @@ -47018,9 +47255,9 @@ msgid "" "(usually by a [Control]). Enabled automatically if [method _unhandled_input] " "is overridden. Any calls to this before [method _ready] will be ignored." msgstr "" -"å¯ç”¨æœªå¤„ç†çš„输入处ç†ã€‚这对GUI控件æ¥è¯´æ˜¯ä¸éœ€è¦çš„! å®ƒä½¿èŠ‚ç‚¹èƒ½å¤ŸæŽ¥æ”¶æ‰€æœ‰ä»¥å‰æ²¡æœ‰" -"处ç†çš„输入(通常是由[Control]处ç†çš„)。如果[method _unhandled_input]被é‡è½½ï¼Œ" -"则自动å¯ç”¨ã€‚在[method _ready]之å‰å¯¹å®ƒçš„任何调用都将被忽略。" +"å¯ç”¨æœªå¤„ç†çš„输入处ç†ã€‚这对 GUI 控件æ¥è¯´æ˜¯ä¸éœ€è¦çš„ï¼å®ƒä½¿èŠ‚ç‚¹èƒ½å¤ŸæŽ¥æ”¶æ‰€æœ‰ä»¥å‰æ²¡" +"有处ç†çš„输入(通常是由 [Control] 处ç†çš„)。如果 [method _unhandled_input] 被" +"覆盖,则自动å¯ç”¨ã€‚在 [method _ready] 之å‰å¯¹å®ƒçš„任何调用都将被忽略。" #: doc/classes/Node.xml msgid "" @@ -47088,7 +47325,6 @@ msgstr "" "code]。" #: doc/classes/Node.xml -#, fuzzy msgid "" "The node owner. A node can have any other node as owner (as long as it is a " "valid parent, grandparent, etc. ascending in the tree). When saving a node " @@ -47109,7 +47345,7 @@ msgstr "" "之ä¿å˜ã€‚è¿™æ ·å°±å¯ä»¥åˆ›å»ºå¤æ‚çš„ [SceneTree],能够进行实例化与次实例化。\n" "[b]注æ„:[/b]如果想è¦å°†å节点æŒä¹…化进 [PackedScene],除了调用 [method " "add_child] ä¹‹å¤–ä½ è¿˜å¿…é¡»è®¾ç½® [member owner]。通常在[url=$DOCS_URL/tutorials/" -"misc/running_code_in_the_editor.html]工具脚本[/url]å’Œ[url=$DOCS_URL/" +"plugins/running_code_in_the_editor.html]工具脚本[/url]å’Œ[url=$DOCS_URL/" "tutorials/plugins/editor/index.html]编辑器æ’ä»¶[/url]ä¸ä¼šç”¨åˆ°ã€‚如果调用了 " "[method add_child] 但没有设置 [member owner],那么新建的这个 [Node] åœ¨åœºæ™¯æ ‘" "ä¸ä¸å¯è§ï¼Œä½†åœ¨ 2D/3D 视图ä¸å¯è§ã€‚" @@ -47119,6 +47355,18 @@ msgid "Pause mode. How the node will behave if the [SceneTree] is paused." msgstr "æš‚åœæ¨¡å¼ã€‚æš‚åœ [SceneTree] 时该节点的行为。" #: doc/classes/Node.xml +#, fuzzy +msgid "" +"Allows enabling or disabling physics interpolation per node, offering a " +"finer grain of control than turning physics interpolation on and off " +"globally.\n" +"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " +"interpolation can sometimes give superior results." +msgstr "" +"å¯ç”¨æˆ–ç¦ç”¨è¯¥èŠ‚ç‚¹çš„ç‰©ç†æ’值,å¯ä»¥åœ¨å¼€å…³å…¨å±€ç‰©ç†æ’值的基础上进行微调。\n" +"[b]注æ„:[/b]对 [Camera] 尤其有用,自定义æ’å€¼æœ‰æ—¶ä¼šå¸¦æ¥æ›´å¥½çš„æ•ˆæžœã€‚" + +#: doc/classes/Node.xml msgid "" "The node's priority in the execution order of the enabled processing " "callbacks (i.e. [constant NOTIFICATION_PROCESS], [constant " @@ -47138,6 +47386,10 @@ msgid "" "If another node with the same owner already had that name declared as " "unique, that other node's name will no longer be set as having a unique name." msgstr "" +"将这个节点的å称设置为其 [member owner] ä¸çš„唯一åç§°ã€‚è¿™æ ·å°±å¯ä»¥ä»Žè¯¥åœºæ™¯ä¸çš„" +"ä»»æ„节点处使用 [code]%åç§°[/code] æ¥è®¿é—®è¿™ä¸ªèŠ‚ç‚¹ï¼Œæ— éœ€ä½¿ç”¨å®Œæ•´è·¯å¾„ã€‚\n" +"如果所有者相åŒçš„å¦ä¸€ä¸ªèŠ‚ç‚¹å·²ç»å°†è¯¥åç§°å£°æ˜Žä¸ºå”¯ä¸€ï¼Œé‚£ä¹ˆå…¶ä»–èŠ‚ç‚¹å°±æ— æ³•å†å°†æ¤å" +"称设置为唯一å称。" #: doc/classes/Node.xml msgid "" @@ -47244,12 +47496,19 @@ msgid "" "[method Control.get_drag_data]) or using [method Control.force_drag].\n" "Use [method Viewport.gui_get_drag_data] to get the dragged data." msgstr "" +"当拖拽æ“作开始时收到的通知。所有节点都会收到这个通知,ä¸ä»…仅是被拖拽的那" +"个。\n" +"å¯ä»¥é€šè¿‡æ‹–拽æä¾›æ‹–拽数æ®çš„ [Control] 触å‘ï¼ˆè§ [method Control." +"get_drag_data]),也å¯ä»¥é€šè¿‡ä½¿ç”¨ [method Control.force_drag] 触å‘。\n" +"请使用 [method Viewport.gui_get_drag_data] èŽ·å–æ‹–拽数æ®ã€‚" #: doc/classes/Node.xml msgid "" "Notification received when a drag operation ends.\n" "Use [method Viewport.gui_is_drag_successful] to check if the drag succeeded." msgstr "" +"当拖拽æ“ä½œç»“æŸæ—¶æ”¶åˆ°çš„通知。\n" +"请使用 [method Viewport.gui_is_drag_successful] æ£€æŸ¥æ‹–æ”¾æ˜¯å¦æˆåŠŸã€‚" #: doc/classes/Node.xml msgid "Notification received when the node's [NodePath] changed." @@ -47305,6 +47564,27 @@ msgid "Continue to process regardless of the [SceneTree] pause state." msgstr "ä¸ç®¡ [SceneTree] 的暂åœçжæ€å¦‚ä½•ï¼Œç»§ç» process。" #: doc/classes/Node.xml +#, fuzzy +msgid "" +"Inherits physics interpolation mode from the node's parent. For the root " +"node, it is equivalent to [constant PHYSICS_INTERPOLATION_MODE_ON]. Default." +msgstr "" +"ç»§æ‰¿èŠ‚ç‚¹çš„çˆ¶èŠ‚ç‚¹çš„æš‚åœæ¨¡å¼ã€‚å¯¹äºŽæ ¹èŠ‚ç‚¹ï¼Œå®ƒç›¸å½“äºŽ[constant PAUSE_MODE_STOP]。" +"默认值。" + +#: doc/classes/Node.xml +msgid "" +"Turn off physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn on physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml msgid "Duplicate the node's signals." msgstr "å¤åˆ¶è¯¥èŠ‚ç‚¹çš„ä¿¡å·ã€‚" @@ -47889,8 +48169,9 @@ msgid "" "Returns the given property. Returns [code]null[/code] if the [code]property[/" "code] does not exist." msgstr "" -"虚方法,å¯ä»¥è¢«é‡è½½ä»¥å®šåˆ¶ [method get] 的返回值。\n" -"返回给定的属性。如果 [code]property[/code] ä¸å˜åœ¨ï¼Œè¿”回 [code]null[/code]。" +"虚方法。å¯å¯¹å…¶è¿›è¡Œè¦†ç›–,定制 [method get] 的返回值。\n" +"返回给定的属性。如果该 [code]property[/code] ä¸å˜åœ¨ï¼Œåˆ™è¿”回 [code]null[/" +"code]。" #: doc/classes/Object.xml msgid "" @@ -47903,12 +48184,13 @@ msgid "" "[code]hint_string: String[/code], and [code]usage: int[/code] (see [enum " "PropertyUsageFlags])." msgstr "" -"虚方法,å¯ä»¥è¢«é‡è½½ä»¥å®šåˆ¶ [method get_property_list] 的返回值。\n" -"返回对象的属性列表为一个 [Array] çš„å—典。\n" -"æ¯ä¸ªå±žæ€§çš„ [Dictionary] å¿…é¡»è‡³å°‘åŒ…å« [code]name: String[/code] å’Œ " -"[code]type: int[/code](è§[enum Variant.Type])æ¡ç›®ã€‚å¦å¤–,它还å¯ä»¥åŒ…括 " -"[code]hint: int[/code]ï¼ˆè§ [enum PropertyHint])ã€[code]hint_string: String[/" -"code]ï¼Œä»¥åŠ [code]usage: int[/code]ï¼ˆè§ [enum PropertyUsageFlags])。" +"虚方法。å¯å¯¹å…¶è¿›è¡Œè¦†ç›–,定制 [method get_property_list] 的返回值。\n" +"返回一个 [Array],表示该对象的属性列表,其ä¸çš„å…ƒç´ ä¸ºå—典类型。\n" +"æ¯ä¸ªå±žæ€§çš„ [Dictionary] 必须至少包å«åç§° [code]name: String[/code] 和类型 " +"[code]type: int[/code]ï¼ˆè§ [enum Variant.Type])æ¡ç›®ã€‚å¦å¤–,它还å¯ä»¥åŒ…括æç¤º " +"[code]hint: int[/code]ï¼ˆè§ [enum PropertyHint]ï¼‰ã€æç¤ºå—符串 " +"[code]hint_string: String[/code],以åŠç”¨æ³• [code]usage: int[/code]ï¼ˆè§ [enum " +"PropertyUsageFlags])。" #: doc/classes/Object.xml msgid "" @@ -47945,8 +48227,8 @@ msgid "" "Sets a property. Returns [code]true[/code] if the [code]property[/code] " "exists." msgstr "" -"虚方法,å¯ä»¥è¢«é‡è½½ä»¥å®šåˆ¶ [method set] 的返回值。\n" -"设置一个属性。如果 [code]property[/code] å˜åœ¨ï¼Œè¿”回 [code]true[/code]。" +"虚方法。å¯å¯¹å…¶è¿›è¡Œè¦†ç›–,定制 [method set] 的返回值。\n" +"设置属性。如果该 [code]property[/code] å˜åœ¨ï¼Œåˆ™è¿”回 [code]true[/code]。" #: doc/classes/Object.xml msgid "" @@ -47956,8 +48238,8 @@ msgid "" "Returns a [String] representing the object. If not overridden, defaults to " "[code]\"[ClassName:RID]\"[/code]." msgstr "" -"虚方法,å¯ä»¥è¢«é‡è½½ä»¥å®šåˆ¶ [method to_string] 的返回值,从而在对象被转æ¢ä¸ºå—符" -"串的地方,例如用 [code]print(obj)[/code] 表示。\n" +"虚方法。å¯å¯¹å…¶è¿›è¡Œè¦†ç›–,定制 [method to_string] 的返回值,从而在对象被转æ¢ä¸º" +"å—符串的地方,例如用 [code]print(obj)[/code] 表示。\n" "返回一个代表该对象的 [String] å—符串。如果没有被覆盖,默认为 " "[code]\"[ClassName:RID]\"[/code]。" @@ -48039,7 +48321,6 @@ msgstr "" "set_message_translation]å’Œ[method tr]。" #: doc/classes/Object.xml -#, fuzzy msgid "" "Connects a [code]signal[/code] to a [code]method[/code] on a [code]target[/" "code] object. Pass optional [code]binds[/code] to the call as an [Array] of " @@ -48079,7 +48360,7 @@ msgstr "" "ConnectFlags] 常é‡ã€‚\n" "ä¸€ä¸ªä¿¡å· [code]signal[/code] 与åŒä¸€æ–¹æ³• [code]method[/code] åªèƒ½è¿žæŽ¥ä¸€æ¬¡ã€‚除" "éžä¹‹å‰åœ¨è¿žæŽ¥ä¿¡å·æ—¶ä½¿ç”¨äº† [constant CONNECT_REFERENCE_COUNTED],å¦åˆ™åœ¨è¿›è¡Œé‡å¤" -"连接时会抛出错误。为é¿å…è¿™ç§æƒ…况,首先使用 [method is_connected] 检查是å¦å·²æœ‰" +"连接时会打å°é”™è¯¯ã€‚为é¿å…è¿™ç§æƒ…况,首先使用 [method is_connected] 检查是å¦å·²æœ‰" "连接。\n" "如果 [code]target[/code] 在游æˆç”Ÿå‘½å‘¨æœŸä¸è¢«é”€æ¯ï¼Œè¿žæŽ¥å°†ä¸¢å¤±ã€‚\n" "例å:\n" @@ -48102,7 +48383,6 @@ msgstr "" "[/codeblock]" #: doc/classes/Object.xml -#, fuzzy msgid "" "Disconnects a [code]signal[/code] from a [code]method[/code] on the given " "[code]target[/code].\n" @@ -48111,7 +48391,7 @@ msgid "" "exists." msgstr "" "å°† [code]ä¿¡å·[/code] 与给定 [code]ç›®æ ‡[/code] 上的 [code]方法[/code] æ–开。\n" -"如果您å°è¯•æ–å¼€ä¸å˜åœ¨çš„连接,该方法将引å‘错误。使用 [method is_connected] ç¡®ä¿" +"如果您å°è¯•æ–å¼€ä¸å˜åœ¨çš„连接,该方法将打å°é”™è¯¯ã€‚使用 [method is_connected] ç¡®ä¿" "连接å˜åœ¨ã€‚" #: doc/classes/Object.xml @@ -48969,8 +49249,9 @@ msgid "Returns the tooltip of the item at index [code]idx[/code]." msgstr "返回索引 [code]idx[/code] 处项目的工具æç¤ºã€‚" #: doc/classes/OptionButton.xml +#, fuzzy msgid "" -"Returns the ID of the selected item, or [code]0[/code] if no item is " +"Returns the ID of the selected item, or [code]-1[/code] if no item is " "selected." msgstr "返回所选项目的ID,如果没有选择项目,则返回 [code]0[/code]。" @@ -48990,9 +49271,11 @@ msgid "Removes the item at index [code]idx[/code]." msgstr "移除索引[code]idx[/code]处的项目。" #: doc/classes/OptionButton.xml +#, fuzzy msgid "" "Selects an item by index and makes it the current item. This will work even " -"if the item is disabled." +"if the item is disabled.\n" +"Passing [code]-1[/code] as the index deselects any currently selected item." msgstr "按索引选择项并使其为当å‰é€‰ä¸é¡¹ã€‚å³ä½¿è¯¥é¡¹æ˜¯ç¦ç”¨çš„,这也将起作用。" #: doc/classes/OptionButton.xml @@ -49521,6 +49804,11 @@ msgid "" "[b]Note:[/b] Currently only implemented on Android. Other platforms will " "return an empty array even if they do have display cutouts or notches." msgstr "" +"[Rect2] çš„ [Array] æ•°ç»„ï¼Œå…ƒç´ æ˜¯æ˜¾ç¤ºå™¨è£åˆ‡æˆ–刘海的包围矩形。它们是全é¢å±ä¸Šè¢«ç›¸" +"æœºå’Œä¼ æ„Ÿå™¨æ‰€å 用的éžåŠŸèƒ½æ€§åŒºåŸŸã€‚å¦‚æžœè¯¥è®¾å¤‡æ²¡æœ‰è£åˆ‡åˆ™è¿”回空数组。å¦è¯·å‚阅 " +"[method get_window_safe_area]。\n" +"[b]注æ„:[/b]ç›®å‰ä»…在 Android 上实现。其他平å°å³ä¾¿å˜åœ¨æ˜¾ç¤ºå™¨è£åˆ‡æˆ–刘海,也会" +"返回空数组。" #: doc/classes/OS.xml msgid "Returns the total amount of dynamic memory used (only works in debug)." @@ -50190,7 +50478,6 @@ msgstr "" "code]。" #: doc/classes/OS.xml -#, fuzzy msgid "" "Returns [code]true[/code] if the child process ID ([code]pid[/code]) is " "still running or [code]false[/code] if it has terminated.\n" @@ -50198,9 +50485,9 @@ msgid "" "[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and " "Windows." msgstr "" -"æ€æ»ï¼ˆç»ˆæ¢ï¼‰ç”±ç»™å®šçš„进程 ID([code]pid[/code]ï¼‰æ ‡è¯†çš„è¿›ç¨‹ï¼Œä¾‹å¦‚ï¼Œåœ¨éžé˜»å¡žæ¨¡å¼" -"下由 [method execute] 返回的进程。å¦è¯·å‚阅 [method crash]。\n" -"[b]注æ„:[/b]这个方法也å¯ä»¥ç”¨æ¥æ€æ»ä¸æ˜¯ç”±æ¸¸æˆäº§ç”Ÿçš„进程。\n" +"如果该å进程 ID([code]pid[/code])ä»åœ¨è¿è¡Œåˆ™è¿”回 [code]true[/code],如果已ç»" +"终æ¢åˆ™è¿”回 [code]false[/code]。\n" +"必须是由 [method execute] 生æˆçš„æœ‰æ•ˆ ID。\n" "[b]注æ„:[/b]这个方法在 Androidã€iOSã€Linuxã€macOS å’Œ Windows 上实现。" #: doc/classes/OS.xml @@ -50317,6 +50604,8 @@ msgid "" "[b]Note:[/b] If the user has disabled the recycle bin on their system, the " "file will be permanently deleted instead." msgstr "" +"将文件或目录移动到系统的回收站。å¦è¯·å‚阅 [method Directory.remove]。\n" +"[b]注æ„:[/b]如果用户ç¦ç”¨äº†ç³»ç»Ÿçš„å›žæ”¶ç«™ï¼Œé‚£ä¹ˆè¿™ä¸ªæ–‡ä»¶å°±ä¼šè¢«æ°¸ä¹…åˆ é™¤ã€‚" #: doc/classes/OS.xml msgid "" @@ -55370,6 +55659,13 @@ msgid "" "AntialiasedPolygon2D node. That node relies on a texture with custom mipmaps " "to perform antialiasing." msgstr "" +"为 [code]true[/code] 时,会å°è¯•对多边形的边缘进行抗锯齿处ç†ï¼Œæ–¹æ³•是在边缘绘制" +"一薄层 OpenGL 平滑线段。\n" +"[b]注æ„:[/b]ç”±äºŽå®žçŽ°çš„åŽŸå› ï¼Œå†…ç½®çš„æŠ—é”¯é½¿æ— æ³•åœ¨é€æ˜Žå¤šè¾¹å½¢ä¸Šå¾—到æ£ç¡®çš„æ•ˆæžœï¼Œå¹¶" +"且å¯èƒ½æ— 法在æŸäº›å¹³å°ä¸Šæ£å¸¸å·¥ä½œã€‚作为替代方案,请安装[url=https://github.com/" +"godot-extended-libraries/godot-antialiased-line2d]抗锯齿 Line2D[/url] æ’ä»¶å¹¶" +"创建 AntialiasedPolygon2D 节点。该节点的抗锯齿是使用带有自定义 mipmap 的纹ç†" +"进行的。" #: doc/classes/Polygon2D.xml msgid "" @@ -55459,18 +55755,16 @@ msgstr "" "如果数é‡å°‘,则未定义的顶点将使用[code]color[/code]." #: doc/classes/PoolByteArray.xml -#, fuzzy msgid "A pooled array of bytes." -msgstr "[Array] å—节集åˆã€‚" +msgstr "å—èŠ‚æ± æ•°ç»„ã€‚" #: doc/classes/PoolByteArray.xml -#, fuzzy msgid "" "An array specifically designed to hold bytes. Optimized for memory usage, " "does not fragment the memory.\n" "[b]Note:[/b] This type is passed by value and not by reference." msgstr "" -"专门设计用于ä¿å˜å—节的 [Array]。针对内å˜ä½¿ç”¨è¿›è¡Œäº†ä¼˜åŒ–,ä¸ä¼šé€ æˆå†…å˜ç¢Žç‰‡ã€‚\n" +"专门设计用于ä¿å˜å—节的数组。针对内å˜ä½¿ç”¨è¿›è¡Œäº†ä¼˜åŒ–,ä¸ä¼šé€ æˆå†…å˜ç¢Žç‰‡ã€‚\n" "[b]注æ„:[/b]è¿™ç§ç±»åž‹æ˜¯æŒ‰å€¼ä¼ é€’è€Œä¸æ˜¯æŒ‰å¼•ç”¨ä¼ é€’ã€‚" #: doc/classes/PoolByteArray.xml @@ -55536,6 +55830,8 @@ msgid "" "used together with [method resize] to create an array with a given size and " "initialized elements." msgstr "" +"将数组ä¸çš„æ‰€æœ‰å…ƒç´ 都设为给定的值。通常与 [method resize] 一起使用,创建给定大" +"å°çš„æ•°ç»„å¹¶åˆå§‹åŒ–å…ƒç´ ã€‚" #: doc/classes/PoolByteArray.xml msgid "" @@ -55561,6 +55857,16 @@ msgstr "" "ä½†æ”¯æŒ UTF-8 ç¼–ç 的数æ®ã€‚如果ä¸ç¡®å®šæ•°æ®çš„æ¥æºï¼Œè¯·ä½¿ç”¨æ¤å‡½æ•°ã€‚对于用户输入,应" "该始终首选æ¤å‡½æ•°ã€‚" +#: doc/classes/PoolByteArray.xml doc/classes/PoolColorArray.xml +#: doc/classes/PoolIntArray.xml doc/classes/PoolRealArray.xml +#: doc/classes/PoolStringArray.xml doc/classes/PoolVector2Array.xml +#: doc/classes/PoolVector3Array.xml +#, fuzzy +msgid "" +"Returns [code]true[/code] if the array contains the given value.\n" +"[b]Note:[/b] This is equivalent to using the [code]in[/code] operator." +msgstr "如果对象包å«ç»™å®šçš„æ–¹æ³• [code]method[/code],则返回 [code]true[/code]。" + #: doc/classes/PoolByteArray.xml msgid "" "Returns a hexadecimal representation of this array as a [String].\n" @@ -55623,18 +55929,16 @@ msgstr "" "负的索引都被认为是从数组的末端开始的。" #: doc/classes/PoolColorArray.xml -#, fuzzy msgid "A pooled array of [Color]." -msgstr "[Color]çš„[Array]的集åˆã€‚" +msgstr "[Color] æ± æ•°ç»„ã€‚" #: doc/classes/PoolColorArray.xml -#, fuzzy msgid "" "An array specifically designed to hold [Color]. Optimized for memory usage, " "does not fragment the memory.\n" "[b]Note:[/b] This type is passed by value and not by reference." msgstr "" -"专门用于ä¿å˜ [Color] çš„ [Array]。对内å˜çš„使用进行了优化,ä¸ä¼šä½¿å†…å˜ç¢Žç‰‡åŒ–。\n" +"专门用于ä¿å˜ [Color] 的数组。对内å˜çš„使用进行了优化,ä¸ä¼šä½¿å†…å˜ç¢Žç‰‡åŒ–。\n" "[b]注æ„:[/b]è¿™ç§ç±»åž‹æ˜¯é€šè¿‡å€¼ä¼ é€’çš„ï¼Œè€Œä¸æ˜¯å¼•用。" #: doc/classes/PoolColorArray.xml @@ -55667,12 +55971,10 @@ msgid "Changes the [Color] at the given index." msgstr "更改给定索引处的[Color]。" #: doc/classes/PoolIntArray.xml -#, fuzzy msgid "A pooled array of integers ([int])." -msgstr "æ•´æ•°[int]çš„[Array]的集åˆã€‚" +msgstr "整数([int]ï¼‰æ± æ•°ç»„ã€‚" #: doc/classes/PoolIntArray.xml -#, fuzzy msgid "" "An array specifically designed to hold integer values ([int]). Optimized for " "memory usage, does not fragment the memory.\n" @@ -55683,7 +55985,7 @@ msgid "" "around. In comparison, [int] uses signed 64-bit integers which can hold much " "larger values." msgstr "" -"专门用于ä¿å˜æ•´æ•°å€¼ï¼ˆ[int])的 [Array]。对内å˜çš„使用进行了优化,ä¸ä¼šä½¿å†…å˜ç¢Žç‰‡" +"专门用于ä¿å˜æ•´æ•°å€¼ï¼ˆ[int])的数组。对内å˜çš„使用进行了优化,ä¸ä¼šä½¿å†…å˜ç¢Žç‰‡" "化。\n" "[b]注æ„:[/b]è¿™ç§ç±»åž‹æ˜¯é€šè¿‡å€¼ä¼ é€’çš„ï¼Œè€Œä¸æ˜¯å¼•用。\n" "[b]注æ„:[/b]这个类型仅é™äºŽæœ‰ç¬¦å·çš„ 32 使•´æ•°ï¼Œè¿™æ„味ç€å®ƒåªèƒ½åœ¨ [code]" @@ -55714,12 +56016,10 @@ msgid "Changes the int at the given index." msgstr "更改给定索引处的 int。" #: doc/classes/PoolRealArray.xml -#, fuzzy msgid "A pooled array of reals ([float])." -msgstr "实数 [float] çš„[Array]集åˆã€‚" +msgstr "实数([float]ï¼‰æ± æ•°ç»„ã€‚" #: doc/classes/PoolRealArray.xml -#, fuzzy msgid "" "An array specifically designed to hold floating-point values. Optimized for " "memory usage, does not fragment the memory.\n" @@ -55732,8 +56032,7 @@ msgid "" "store [float]s will use roughly 6 times more memory compared to a " "[PoolRealArray]." msgstr "" -"专门设计用于ä¿å˜æµ®ç‚¹å€¼çš„ [Array] 。针对内å˜ä½¿ç”¨è¿›è¡Œäº†ä¼˜åŒ–,ä¸ä¼šé€ æˆå†…å˜ç¢Ž" -"片。\n" +"专门设计用于ä¿å˜æµ®ç‚¹å€¼çš„æ•°ç»„。针对内å˜ä½¿ç”¨è¿›è¡Œäº†ä¼˜åŒ–,ä¸ä¼šé€ æˆå†…å˜ç¢Žç‰‡ã€‚\n" "[b]注æ„:[/b]è¿™ç§ç±»åž‹æ˜¯æŒ‰å€¼ä¼ é€’è€Œä¸æ˜¯æŒ‰å¼•ç”¨ä¼ é€’ã€‚\n" "[b]注æ„:[/b]与 64 ä½åŽŸå§‹ [float] ä¸åŒï¼Œå˜å‚¨åœ¨ [PoolRealArray] ä¸çš„æ•°å—是 32 " "使µ®ç‚¹æ•°ã€‚è¿™æ„味ç€ä¸ŽåŽŸå§‹ [float] 相比,å˜å‚¨åœ¨ [PoolRealArray] ä¸çš„值具有较低" @@ -55756,18 +56055,16 @@ msgid "Changes the float at the given index." msgstr "更改给定索引处的浮点数。" #: doc/classes/PoolStringArray.xml -#, fuzzy msgid "A pooled array of [String]." -msgstr "[String] çš„ [Array] 集åˆã€‚" +msgstr "[String] æ± æ•°ç»„ã€‚" #: doc/classes/PoolStringArray.xml -#, fuzzy msgid "" "An array specifically designed to hold [String]s. Optimized for memory " "usage, does not fragment the memory.\n" "[b]Note:[/b] This type is passed by value and not by reference." msgstr "" -"[Array] 专门设计用于ä¿å˜ [String]。针对内å˜ä½¿ç”¨è¿›è¡Œäº†ä¼˜åŒ–,ä¸ä¼šé€ æˆå†…å˜ç¢Ž" +"专门设计用于ä¿å˜ [String] 的数组。针对内å˜ä½¿ç”¨è¿›è¡Œäº†ä¼˜åŒ–,ä¸ä¼šé€ æˆå†…å˜ç¢Ž" "片。\n" "[b]注æ„:[/b]è¿™ç§ç±»åž‹æ˜¯æŒ‰å€¼ä¼ é€’ï¼Œè€Œä¸æ˜¯å¼•ç”¨ä¼ é€’ã€‚" @@ -55798,18 +56095,16 @@ msgid "Changes the [String] at the given index." msgstr "更改给定索引处的[String]。" #: doc/classes/PoolVector2Array.xml -#, fuzzy msgid "A pooled array of [Vector2]." -msgstr "[Vector2] çš„ [Array] 集åˆã€‚" +msgstr "[Vector2] æ± æ•°ç»„ã€‚" #: doc/classes/PoolVector2Array.xml -#, fuzzy msgid "" "An array specifically designed to hold [Vector2]. Optimized for memory " "usage, does not fragment the memory.\n" "[b]Note:[/b] This type is passed by value and not by reference." msgstr "" -"专门用æ¥ä¿å˜[Vector2]çš„[Array]。对内å˜çš„使用进行了优化,ä¸ä¼šä½¿å†…å˜ç¢Žç‰‡åŒ–。\n" +"专门用æ¥ä¿å˜ [Vector2] 的数组。对内å˜çš„使用进行了优化,ä¸ä¼šä½¿å†…å˜ç¢Žç‰‡åŒ–。\n" "[b]注æ„:[/b]è¿™ç§ç±»åž‹æ˜¯é€šè¿‡å€¼ä¼ é€’çš„ï¼Œè€Œä¸æ˜¯å¼•用。" #: doc/classes/PoolVector2Array.xml doc/classes/TileMap.xml @@ -55837,19 +56132,16 @@ msgid "Changes the [Vector2] at the given index." msgstr "更改给定索引处的 [Vector2]。" #: doc/classes/PoolVector3Array.xml -#, fuzzy msgid "A pooled array of [Vector3]." -msgstr "[Vector3] çš„ [Array] 集åˆã€‚" +msgstr "[Vector3] æ± æ•°ç»„ã€‚" #: doc/classes/PoolVector3Array.xml -#, fuzzy msgid "" "An array specifically designed to hold [Vector3]. Optimized for memory " "usage, does not fragment the memory.\n" "[b]Note:[/b] This type is passed by value and not by reference." msgstr "" -"专门设计æ¥å®¹çº³[Vector3]çš„[Array]。对内å˜çš„使用进行了优化,ä¸ä¼šä½¿å†…å˜ç¢Žç‰‡" -"化。\n" +"专门设计æ¥å®¹çº³ [Vector3] 的数组。对内å˜çš„使用进行了优化,ä¸ä¼šä½¿å†…å˜ç¢Žç‰‡åŒ–。\n" "[b]注æ„:[/b]è¿™ç§ç±»åž‹æ˜¯é€šè¿‡å€¼ä¼ é€’çš„ï¼Œè€Œä¸æ˜¯å¼•用。" #: doc/classes/PoolVector3Array.xml @@ -56551,6 +56843,11 @@ msgid "[Font] used for the menu items." msgstr "用于èœå•项的 [Font] å—体。" #: doc/classes/PopupMenu.xml +#, fuzzy +msgid "[Font] used for the labeled separator." +msgstr "ç”¨äºŽæ ‡ç¾[Label]文本的å—体[Font]。" + +#: doc/classes/PopupMenu.xml msgid "[Texture] icon for the checked checkbox items." msgstr "å¤é€‰èœå•项被勾选时使用的 [Texture] å›¾æ ‡ã€‚" @@ -57947,6 +58244,10 @@ msgid "" "during [method Node._physics_process] (during a physics tick) rather than " "[method Node._process] (during a frame)." msgstr "" +"为 [code]true[/code] 时,å¯ç”¨åˆ©äºŽå®šä½ä¸æ£ç¡®æ›´æ–°çš„节点的è¦å‘Šï¼Œä¸æ£ç¡®çš„æ›´æ–°ä¼šå¯¼" +"è‡´ä¸æ£ç¡®çš„æ’å€¼å’Œç”»é¢é—®é¢˜ã€‚\n" +"对节点进行æ’值时,在 [method Node._physics_process](ä½äºŽç‰©ç†å‘¨æœŸï¼‰è€Œä¸æ˜¯ " +"[method Node._process](ä½äºŽå¸§ï¼‰ä¸æ›´æ–°å˜æ¢éžå¸¸å…³é”®ã€‚" #: doc/classes/ProjectSettings.xml msgid "Maximum amount of functions per frame allowed when profiling." @@ -60911,9 +61212,8 @@ msgid "" msgstr "对象å¯ä»¥åˆ©ç”¨è¯¥ä¿¡å·ï¼Œåªåœ¨å‘生修改时æ‰è¯»å–设置。" #: doc/classes/PropertyTweener.xml -#, fuzzy msgid "Interpolates an [Object]'s property over time." -msgstr "ä½¿èŠ‚ç‚¹çš„å±žæ€§éšæ—¶é—´å¹³æ»‘地å˜åŒ–。" +msgstr "éšæ—¶é—´å¯¹ [Object] 的属性进行æ’值。" #: doc/classes/PropertyTweener.xml msgid "" @@ -60923,6 +61223,10 @@ msgid "" "to create [PropertyTweener]. Any [PropertyTweener] created manually will not " "function correctly." msgstr "" +"[PropertyTweener] å¯ç”¨äºŽå¯¹æŸä¸ªå¯¹è±¡çš„æŸä¸ªå±žæ€§è¿›è¡Œæ’值。更多用法信æ¯è¯·å‚阅 " +"[method SceneTreeTween.tween_property]。\n" +"[b]注æ„:[/b]创建 [PropertyTweener] 的唯一æ£ç¡®æ–¹æ³•是 [method SceneTreeTween." +"tween_property]。任何手动创建的 [PropertyTweener] éƒ½æ— æ³•æ£å¸¸å·¥ä½œã€‚" #: doc/classes/PropertyTweener.xml msgid "" @@ -60934,6 +61238,12 @@ msgid "" "as_relative() #the node will move by 100 pixels to the right\n" "[/codeblock]" msgstr "" +"调用åŽï¼Œæœ€ç»ˆå€¼ä¼šè¢«ä½œä¸ºç›¸å¯¹å€¼ä½¿ç”¨ã€‚示例:\n" +"[codeblock]\n" +"var tween = get_tree().create_tween()\n" +"tween.tween_property(self, \"position\", Vector2.RIGHT * 100, 1)." +"as_relative() # 该节点会å‘å³ç§»åЍ 100 个åƒç´ \n" +"[/codeblock]" #: doc/classes/PropertyTweener.xml msgid "" @@ -60945,6 +61255,12 @@ msgid "" "(200, 100)\n" "[/codeblock]" msgstr "" +"设置该 [PropertyTweener] 的自定义åˆå§‹å€¼ã€‚示例:\n" +"[codeblock]\n" +"var tween = get_tree().create_tween()\n" +"tween.tween_property(self, \"position\", Vector2(200, 100), 1)." +"from(Vector2(100, 100) # 会将该节点从 (100, 100) 移动到 (200, 100)\n" +"[/codeblock]" #: doc/classes/PropertyTweener.xml msgid "" @@ -60959,30 +61275,24 @@ msgid "" "from_current()\n" "[/codeblock]" msgstr "" +"让该 [PropertyTweener] 使用当å‰å±žæ€§å€¼ä½œä¸ºèµ·ç‚¹ï¼ˆå³åˆ›å»ºè¿™ä¸ª [PropertyTweener] " +"时的值)。与使用当å‰å€¼è°ƒç”¨ [method from] ç‰ä»·ã€‚以下两ç§è°ƒç”¨æ–¹æ³•效果相åŒï¼š\n" +"[codeblock]\n" +"tween.tween_property(self, \"position\", Vector2(200, 100), 1)." +"from(position)\n" +"tween.tween_property(self, \"position\", Vector2(200, 100), 1)." +"from_current()\n" +"[/codeblock]" #: doc/classes/PropertyTweener.xml msgid "" "Sets the time in seconds after which the [PropertyTweener] will start " "interpolating. By default there's no delay." -msgstr "" - -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used easing from [enum Tween.EaseType]. If not set, the " -"default easing is used from the [Tween] that contains this Tweener." -msgstr "" - -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used transition from [enum Tween.TransitionType]. If not " -"set, the default transition is used from the [Tween] that contains this " -"Tweener." -msgstr "" +msgstr "设置该 [PropertyTweener] 开始æ’值的时间,å•ä½ä¸ºç§’ã€‚é»˜è®¤æ— å»¶è¿Ÿã€‚" #: doc/classes/ProximityGroup.xml -#, fuzzy msgid "General-purpose 3D proximity detection node." -msgstr "通用的é 近检测节点。" +msgstr "通用的 3D 邻近检测节点。" #: doc/classes/ProximityGroup.xml msgid "" @@ -61048,6 +61358,55 @@ msgid "" "[method Vector3.distance_to] or [method Vector3.distance_squared_to] are " "fast enough too, especially if you call them less often using a [Timer] node." msgstr "" +"通用邻近检测节点。[ProximityGroup] å¯ç”¨äºŽ[i]大致的[/i]è·ç¦»æ£€æŸ¥ï¼Œæ¯”使用 " +"[method Vector3.distance_to] 或 [method Vector3.distance_squared_to] 进行精确" +"检查è¦å¿«ã€‚\n" +"[member group_name] 相åŒçš„ [ProximityGroup] 节点如果相交,就会自动组åˆã€‚ä½ å¯" +"以通过调用 [method broadcast] æ¥å¯¹æ‰€æœ‰ç›¸äº¤çš„æˆå‘˜è°ƒç”¨ç‰¹å®šçš„æ–¹æ³•ï¼Œå‚æ•°ä»»æ„。\n" +"[ProximityGroup] 是立方体形状的,包å«ä¸€ç»„ [Vector3] åæ ‡ã€‚è¿™äº›åæ ‡æ˜¯è‡ªåŠ¨è°ƒç”¨ " +"[member grid_radius] 计算的。è¦è®© [ProximityGroup] 找到其对ç‰ä½“(并进行自动组" +"åˆï¼‰ï¼Œä½ 需è¦å°†å…¶ [member group_name] 设为éžç©ºçš„ [String]。当这个对象的形状与" +"å¦ä¸€ä¸ª [ProximityGroup] 对象的形状相交时,如果它们的 [member group_name] 一" +"致,就会被组åˆåœ¨ä¸€èµ·ï¼Œç›´åˆ°ä¸å†ç›¸äº¤ã€‚\n" +"å› ä¸º [ProximityGroup] ä¸ä¾èµ–于物ç†å¼•æ“Žï¼Œä½ ä¸éœ€è¦ä¸ºå…¶æ·»åР任何其他å节点(ä¸åŒ" +"于 [PhysicsBody])。\n" +"[ProximityGroup] 实际使用的是 [SceneTree] 的分组,会在内部调用 [method Node." +"add_to_group]。[SceneTree] 分组å称是通过将 [member group_name] åŠå…¶åæ ‡ç»„åˆ" +"而æ¥çš„,其ä¸çš„åæ ‡åˆ™æ˜¯æ ¹æ®ä½ 事先定义的 [member grid_radius] 计算而æ¥çš„。\n" +"[b]示例:[/b]å为 [code]\"PlanetEarth\"[/code] çš„ [ProximityGroup] 节点ä½äºŽ " +"[code]Vector3(6, 6, 6)[/code],其 [member group_name] 为 [code]\"planets\"[/" +"code],[member grid_radius] 为 [code]Vector3(1, 2, 3)[/code],那么就会创建下" +"列 [SceneTree] 分组å:\n" +"[codeblock]\n" +"- \"planets|5|4|3\"\n" +"- \"planets|5|4|4\"\n" +"- \"planets|5|4|5\"\n" +"- \"planets|5|4|6\"\n" +"- \"planets|5|4|7\"\n" +"- \"planets|5|4|8\"\n" +"- \"planets|5|4|9\"\n" +"- ...\n" +"[/codeblock]\n" +"如果有å¦ä¸€ä¸ªåå« [code]\"PlanetMars\"[/code] çš„ [ProximityGroup],分组å为 " +"[code]\"planets\"[/code]ï¼ŒåŒ…å« [code]Vector3(5, 4, 7)[/code] åæ ‡ï¼Œé‚£ä¹ˆæ£å¸¸å°±" +"会创建一个åå« [code]\"planets|5|4|7\"[/code] çš„ [SceneTree] åˆ†ç»„ã€‚ç„¶è€Œï¼Œå› ä¸º" +"这个分组åå·²å˜åœ¨ï¼Œè¿™ä¸ª [ProximityGroup] 对象就会[i]åŠ å…¥[/i]这个现有的分组。" +"[code]\"PlanetEarth\"[/code] å·²ç»å˜åœ¨äºŽè¿™ä¸ªåˆ†ç»„ä¸ã€‚åªè¦è¿™ä¸¤ä¸ªèŠ‚ç‚¹éƒ½ä¸æ”¹å˜å…¶å˜" +"æ¢ã€ä¸åœæ¢ç›¸äº¤ï¼ˆæˆ–è€…é€€å‡ºåœºæ™¯æ ‘ï¼‰ï¼Œé‚£ä¹ˆå®ƒä»¬å°±ä¼šè¢«ç»„åˆåœ¨ä¸€èµ·ã€‚相交时,任何 " +"[method broadcast] 都会影å“到[i]这两个[/i] [ProximityGroup] 节点。\n" +"使用 [ProximityGroup] 时有 3 个需è¦è®°ä½çš„缺陷:\n" +"- ç½‘æ ¼åŠå¾„è¶Šå¤§ï¼Œåæ ‡æ•°é‡è¶Šå¤šï¼Œåˆ›å»ºçš„ [SceneTree] 分组也越多。如果创建了太多的" +"åˆ†ç»„ï¼Œå°±ä¼šå½±å“æ€§èƒ½ã€‚\n" +"- 如果通过任何手段改å˜äº† [ProximityGroup] èŠ‚ç‚¹çš„å˜æ¢ï¼ˆæˆ–è€…ä»Žåœºæ™¯æ ‘ä¸ç§»é™¤ï¼‰ï¼Œ" +"就需è¦é‡æ–°è®¡ç®—åˆ†ç»„ï¼Œä¹Ÿä¼šå½±å“æ€§èƒ½ã€‚\n" +"- å¦‚æžœä½ çš„ [member grid_radius] 比 [code]Vector3(1, 1, 1)[/code] å°ï¼Œå°±ä¼šè¢«èˆ" +"入到 [code]Vector3(1, 1, 1)[/code]ã€‚å› æ¤ï¼Œè¾ƒå°çš„ç½‘æ ¼åŠå¾„å¯èƒ½ä¼šå¯¼è‡´æ„外的分" +"组。\n" +"[/codeblock]\n" +"[b]注æ„:[/b]Godot 4.0 会移除 [ProximityGroup],使用更高效ã€å¿«é€Ÿçš„ " +"[VisibilityNotifier] 功能。对于大多数情况,[method Vector3.distance_to] å’Œ " +"[method Vector3.distance_squared_to] 都足够快了,尤其是在使用 [Timer] 节点å‡" +"少调用次数时。" #: doc/classes/ProximityGroup.xml msgid "" @@ -61055,11 +61414,14 @@ msgid "" "If the [member dispatch_mode] is set to [constant MODE_PROXY] (the default), " "all calls are delegated to their respective parent [Node]." msgstr "" +"对所有相交的 [ProximityGroup] ä½¿ç”¨ç»™å®šçš„å‚æ•°è°ƒç”¨ç»™å®šçš„æ–¹æ³•。\n" +"如果 [member dispatch_mode] 为 [constant MODE_PROXY](默认值),这些调用会被" +"代ç†åˆ°å®ƒä»¬å„自的父级 [Node] 上。" #: doc/classes/ProximityGroup.xml msgid "" "Specifies which node gets contacted on a call of method [method broadcast]." -msgstr "" +msgstr "指定调用 [method broadcast] 方法时è”系到的节点。" #: doc/classes/ProximityGroup.xml msgid "" @@ -61069,6 +61431,9 @@ msgid "" "proximity checks at the cost of performance, since more groups will be " "created." msgstr "" +"空间的大å°ï¼Œä½¿ç”¨ 3D å•ä½ã€‚åŒæ—¶è¿˜ä¼šè®¾ç½®åæ ‡çš„æ•°é‡ï¼Œç”¨äºŽè®¡ç®—两个 " +"[ProximityGroup] 节点是å¦ç›¸äº¤ã€‚较å°çš„ [member grid_radius] 会牺牲性能实现更精" +"ç¡®çš„ä¸´è¿‘æ£€æµ‹ï¼Œå› ä¸ºä¼šåˆ›å»ºæ›´å¤šçš„åˆ†ç»„ã€‚" #: doc/classes/ProximityGroup.xml msgid "" @@ -61081,6 +61446,12 @@ msgid "" "significantly larger [member grid_radius] than their actual radius, position " "them close enough and they'll be automatically grouped." msgstr "" +"指定共用的分组å称,其它 [ProximityGroup] 节点å¯ä»¥å€Ÿæ¤å¾—知相交时是å¦åº”该与这" +"个节点自动组åˆã€‚\n" +"例如,å‡è®¾ä½ 有一个å为 [code]\"地çƒ\"[/code] çš„ [ProximityGroup] 节点,å¦ä¸€ä¸ª" +"åå« [code]\"ç«æ˜Ÿ\"[/code],这两个节点的 [member group_name] éƒ½å« [code]\"星" +"çƒ\"[/code]。如果为这两个星çƒè®¾ç½®æ¯”它们实际åŠå¾„更大的 [member grid_radius]," +"那么åªè¦å°†å®ƒä»¬æ”¾å¾—足够近,就会自动组åˆåˆ°ä¸€èµ·ã€‚" #: doc/classes/ProximityGroup.xml msgid "" @@ -61092,16 +61463,24 @@ msgid "" "[b]Note:[/b] This signal is [i]not[/i] emitted by default, as the default " "[member dispatch_mode] is [constant MODE_PROXY]." msgstr "" +"当用户调用 [method broadcast] 方法且 [member dispatch_mode] 为 [constant " +"MODE_SIGNAL] 时触å‘。\n" +"ç»™å®šçš„æ–¹æ³•å’Œå‚æ•°ä¼šä¼ 递给连接到这个信å·çš„监å¬è€…ï¼Œæ— è®ºæ˜¯è¿™ä¸ªå¯¹è±¡çš„ä¿¡å·ï¼Œè¿˜æ˜¯ä¸Ž" +"这个节点组åˆçš„ [ProximityGroup] 节点的信å·ã€‚\n" +"[b]注æ„:[/b]这个信å·é»˜è®¤[i]ä¸ä¼š[/i]触å‘ï¼Œå› ä¸º [member dispatch_mode] 默认为 " +"[constant MODE_PROXY]。" #: doc/classes/ProximityGroup.xml msgid "This [ProximityGroup]'s parent will be target of [method broadcast]." -msgstr "" +msgstr "这个 [ProximityGroup] 的父级会æˆä¸º [method broadcast] çš„ç›®æ ‡ã€‚" #: doc/classes/ProximityGroup.xml msgid "" "This [ProximityGroup] will emit the [signal broadcast] [i]signal[/i] when " "calling the [method broadcast] [i]method[/i]." msgstr "" +"这个 [ProximityGroup] 会在调用 [method broadcast] [i]方法[/i]æ—¶å‘出 [signal " +"broadcast] [i]ä¿¡å·[/i]。" #: doc/classes/QuadMesh.xml msgid "Class representing a square mesh." @@ -63424,7 +63803,6 @@ msgid "Adds raw non-BBCode-parsed text to the tag stack." msgstr "å°†éž BBCode è§£æžçš„åŽŸå§‹æ–‡æœ¬æ·»åŠ åˆ°æ ‡ç¾æ ˆä¸ã€‚" #: doc/classes/RichTextLabel.xml -#, fuzzy msgid "" "Parses [code]bbcode[/code] and adds tags to the tag stack as needed.\n" "[b]Note:[/b] Using this method, you can't close a tag that was opened in a " @@ -63436,12 +63814,13 @@ msgid "" "[b]Note:[/b] This method internals' can't possibly fail, but an error code " "is returned for backwards compatibility, which will always be [constant OK]." msgstr "" -"è§£æž [code]bbcode[/code] å¹¶æ ¹æ®éœ€è¦å°†æ ‡ç¾æ·»åŠ åˆ°æ ‡ç¾å †æ ˆä¸ã€‚返回解æžç»“果,æˆåŠŸ" -"则返回 [constant OK]。\n" +"è§£æž [code]bbcode[/code] å¹¶æ ¹æ®éœ€è¦å°†æ ‡ç¾æ·»åŠ åˆ°æ ‡ç¾å †æ ˆä¸ã€‚\n" "[b]注æ„:[/b]ä½¿ç”¨æ¤æ–¹æ³•ï¼Œæ‚¨æ— æ³•å…³é—在之å‰çš„ [method append_bbcode] è°ƒç”¨ä¸æ‰“å¼€" "çš„æ ‡ç¾ã€‚è¿™æ ·åšæ˜¯ä¸ºäº†æé«˜æ€§èƒ½ï¼Œç‰¹åˆ«æ˜¯åœ¨æ›´æ–°å¤§åž‹ RichTextLabel æ—¶ï¼Œå› ä¸ºæ¯æ¬¡é‡å»º" "整个 BBCode 会更慢。如果您ç»å¯¹éœ€è¦åœ¨å°†æ¥çš„æ–¹æ³•调用ä¸å…³é—æ ‡ç¾ï¼Œè¯·é™„åŠ [member " -"bbcode_text] è€Œä¸æ˜¯ä½¿ç”¨ [method append_bbcode]。" +"bbcode_text] è€Œä¸æ˜¯ä½¿ç”¨ [method append_bbcode]。\n" +"[b]注æ„:[/b]这个方法内部是ä¸å¯èƒ½å¤±è´¥çš„ï¼Œè¿”å›žé”™è¯¯ç æ˜¯ä¸ºäº†å‘åŽå…¼å®¹ï¼Œå§‹ç»ˆä¸º " +"[constant OK]。" #: doc/classes/RichTextLabel.xml msgid "Clears the tag stack and sets [member bbcode_text] to an empty string." @@ -63483,14 +63862,13 @@ msgid "Adds a newline tag to the tag stack." msgstr "åœ¨æ ‡ç¾å †ä¸æ·»åŠ ä¸€ä¸ªæ¢è¡Œæ ‡ç¾ã€‚" #: doc/classes/RichTextLabel.xml -#, fuzzy msgid "" "The assignment version of [method append_bbcode]. Clears the tag stack and " "inserts the new content.\n" "[b]Note:[/b] This method internals' can't possibly fail, but an error code " "is returned for backwards compatibility, which will always be [constant OK]." msgstr "" -"ç‰å¾…该 [Semaphore],如果其值为零,则阻塞至éžé›¶ã€‚\n" +"[method append_bbcode] çš„èµ‹å€¼ç‰ˆæœ¬ã€‚ä¼šæ¸…é™¤æ ‡ç¾æ ˆå¹¶æ’入新内容。\n" "[b]注æ„:[/b]这个方法内部是ä¸å¯èƒ½å¤±è´¥çš„ï¼Œè¿”å›žé”™è¯¯ç æ˜¯ä¸ºäº†å‘åŽå…¼å®¹ï¼Œå§‹ç»ˆä¸º " "[constant OK]。" @@ -64400,18 +64778,18 @@ msgid "" "The center of mass is always located at the node's origin without taking " "into account the [CollisionShape2D] centroid offsets." msgstr "" -"该节点实现了模拟的2D物ç†ã€‚ä½ ä¸èƒ½ç›´æŽ¥æŽ§åˆ¶ä¸€ä¸ªRigidBody2Dã€‚è€Œæ˜¯ï¼Œä½ å¯¹å®ƒæ–½åŠ åŠ›" +"该节点实现了模拟的 2D 物ç†ã€‚ä½ ä¸èƒ½ç›´æŽ¥æŽ§åˆ¶ RigidBody2Dã€‚è€Œæ˜¯ï¼Œä½ å¯¹å®ƒæ–½åŠ åŠ›" "(é‡åŠ›ã€å†²åŠ›ç‰ï¼‰ï¼Œç‰©ç†æ¨¡æ‹Ÿä¼šæ ¹æ®å®ƒçš„è´¨é‡ã€æ‘©æ“¦åŠ›å’Œå…¶ä»–ç‰©ç†å±žæ€§æ¥è®¡ç®—出è¿åŠ¨ç»“" "果。\n" -"RigidBody2D有4ç§è¡Œä¸º[member mode]。刚性ã€é™æ€ã€è§’色和è¿åŠ¨ã€‚\n" -"[b]注æ„:[/b]ä½ ä¸åº”该æ¯ä¸€å¸§æˆ–ç»å¸¸æ”¹å˜RigidBody2Dçš„[code]position[/code]或" -"[code]linear_velocity[/code]。如果需è¦ç›´æŽ¥å½±å“物体的状æ€ï¼Œè¯·ä½¿ç”¨[method " +"RigidBody2D 有 4 ç§è¡Œä¸º [member mode]。刚性ã€é™æ€ã€è§’色和è¿åŠ¨ã€‚\n" +"[b]注æ„:[/b]ä½ ä¸åº”该æ¯ä¸€å¸§æˆ–ç»å¸¸æ”¹å˜ RigidBody2D çš„ [code]position[/code] " +"或 [code]linear_velocity[/code]。如果需è¦ç›´æŽ¥å½±å“物体的状æ€ï¼Œè¯·ä½¿ç”¨ [method " "_integrate_forces],它å…è®¸ä½ ç›´æŽ¥è®¿é—®ç‰©ç†çжæ€ã€‚\n" "è¦è®°ä½ï¼Œç‰©ç†ç‰©ä½“在自己管ç†å˜æ¢ï¼Œå®ƒä¼šè¦†ç›–ä½ çš„å˜æ¢è®¾ç½®ã€‚所以任何直接或间接的å˜" "æ¢ï¼ˆåŒ…括节点或其父级的缩放)将åªåœ¨ç¼–辑器ä¸å¯è§ï¼Œå¹¶åœ¨è¿è¡Œæ—¶ç«‹å³é‡ç½®ã€‚\n" -"å¦‚æžœä½ éœ€è¦é‡è½½é»˜è®¤çš„物ç†è¡Œä¸ºæˆ–者在è¿è¡Œæ—¶æ·»åŠ å˜æ¢ï¼Œä½ å¯ä»¥å†™ä¸€ä¸ªè‡ªå®šä¹‰çš„åˆåŠ›ã€‚" -"å‚阅[member custom_integrator]。\n" -"è´¨é‡ä¸å¿ƒæ€»æ˜¯ä½äºŽèŠ‚ç‚¹çš„åŽŸç‚¹ï¼Œè€Œä¸è€ƒè™‘[CollisionShape2D]ä¸å¿ƒç‚¹çš„å移。" +"å¦‚æžœä½ éœ€è¦è¦†ç›–默认的物ç†è¡Œä¸ºæˆ–者在è¿è¡Œæ—¶æ·»åŠ å˜æ¢ï¼Œä½ å¯ä»¥å†™ä¸€ä¸ªè‡ªå®šä¹‰çš„åˆåŠ›ã€‚" +"å‚阅 [member custom_integrator]。\n" +"è´¨é‡ä¸å¿ƒæ€»æ˜¯ä½äºŽèŠ‚ç‚¹çš„åŽŸç‚¹ï¼Œè€Œä¸è€ƒè™‘ [CollisionShape2D] ä¸å¿ƒç‚¹çš„å移。" #: doc/classes/RigidBody2D.xml msgid "2D Physics Platformer Demo" @@ -65637,7 +66015,7 @@ msgstr "" #: doc/classes/SceneTree.xml msgid "Creates and returns a new [SceneTreeTween]." -msgstr "" +msgstr "创建并返回一个新的 [SceneTreeTween]。" #: doc/classes/SceneTree.xml msgid "" @@ -65669,6 +66047,8 @@ msgid "" "Returns an array of currently existing [SceneTreeTween]s in the [SceneTree] " "(both running and paused)." msgstr "" +"返回当å‰åœ¨è¯¥ [SceneTree] ä¸å˜åœ¨çš„ [SceneTreeTween] çš„æ•°ç»„ï¼ˆåŒ…å«æ£åœ¨æ‰§è¡Œçš„和已" +"æš‚åœçš„)。" #: doc/classes/SceneTree.xml msgid "Returns the sender's peer ID for the most recently received RPC call." @@ -66113,7 +66493,7 @@ msgstr "当计时器到 0 æ—¶å‘出。" msgid "" "Lightweight object used for general-purpose animation via script, using " "[Tweener]s." -msgstr "" +msgstr "通过脚本进行通用动画的轻é‡çº§å¯¹è±¡ï¼Œä½¿ç”¨ [Tweener]。" #: doc/classes/SceneTreeTween.xml msgid "" @@ -66188,6 +66568,64 @@ msgid "" "prevent a [SceneTreeTween] from autostarting, you can call [method stop] " "immediately after it was created." msgstr "" +"[SceneTreeTween] æ˜¯ç”±åœºæ™¯æ ‘ç®¡ç†çš„补间动画。与 [Tween] 相对,ä¸éœ€è¦å®žä¾‹åŒ–节" +"点。\n" +"[SceneTreeTween] 比 [AnimationPlayer] æ›´è½»é‡ï¼Œéžå¸¸é€‚åˆç®€å•的动画,以åŠä¸éœ€è¦" +"编辑器å¯è§†åŒ–æ“作的通用任务。å¯ä»¥å³å‘å³å¼ƒï¼Œæ— 需å†ç¼–写é¢å¤–的代ç ã€‚ä¾‹å¦‚ï¼Œä½ å¯ä»¥" +"循环使用带延迟的 [CallbackTweener],让æŸäº›å¯¹è±¡ä¸æ–地进行射击。\n" +"å¯ä»¥ä½¿ç”¨ [method SceneTree.create_tween] 或 [method Node.create_tween] æ¥åˆ›" +"建 [SceneTreeTween]。手动创建的 [SceneTreeTween](å³ä½¿ç”¨ [code]Tween.new()[/" +"code]ï¼‰æ˜¯æ— æ•ˆçš„ï¼Œä¸èƒ½ç”¨äºŽå¯¹å€¼è¿›è¡Œè¡¥é—´ï¼Œä½†ä½ å¯ä»¥ç”¨ [method interpolate_value] " +"æ¥æ‰‹åЍæ’值。\n" +"[SceneTreeTween] 动画是由 [Tweener] åºåˆ—æž„æˆçš„,默认串行执行。å‘该 " +"[SceneTreeTween] è¿½åŠ [Tweener] å³å¯åˆ›å»ºåºåˆ—。使用 [Tweener] æ¥åšåŠ¨ç”»å°±å«åšè¡¥" +"间(Tweening)。示例补间åºåˆ—æ˜¯ç±»ä¼¼è¿™æ ·çš„ï¼š\n" +"[codeblock]\n" +"var tween = get_tree().create_tween()\n" +"tween.tween_property($Sprite, \"modulate\", Color.red, 1)\n" +"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n" +"tween.tween_callback($Sprite, \"queue_free\")\n" +"[/codeblock]\n" +"这个åºåˆ—会让 [code]$Sprite[/code] å˜çº¢ï¼Œç„¶åŽç¼©å°ï¼Œæœ€åŽè°ƒç”¨ [method Node." +"queue_free] æ¥ç§»é™¤ç²¾çµã€‚更多用法信æ¯è¯·å‚阅 [method tween_property]ã€[method " +"tween_interval]ã€[method tween_callback]ã€[method tween_method] 方法。\n" +"使用 [code]tween_*[/code] 方法创建 [Tweener] åŽï¼Œå¯ä»¥ä½¿ç”¨é“¾å¼æ–¹æ³•调用æ¥è°ƒæ•´" +"该 [Tweener] çš„å±žæ€§ã€‚ä¾‹å¦‚ï¼Œå¦‚æžœä½ æƒ³è¦åœ¨ä¸Šé¢çš„例åä¸è®¾ç½®ä¸åŒçš„è¿‡æ¸¡ç±»åž‹ï¼Œé‚£ä¹ˆä½ " +"å¯ä»¥ï¼š\n" +"[codeblock]\n" +"var tween = get_tree().create_tween()\n" +"tween.tween_property($Sprite, \"modulate\", Color.red, 1).set_trans(Tween." +"TRANS_SINE)\n" +"tween.tween_property($Sprite, \"scale\", Vector2(), 1).set_trans(Tween." +"TRANS_BOUNCE)\n" +"tween.tween_callback($Sprite, \"queue_free\")\n" +"[/codeblock]\n" +"[SceneTreeTween] 的大部分方法都å¯ä»¥ç”¨è¿™ç§æ–¹æ³•进行链å¼è°ƒç”¨ã€‚在这个示例ä¸ï¼Œæˆ‘们" +"对该 [SceneTreeTween] 进行了绑定,并设置了默认的过渡:\n" +"[codeblock]\n" +"var tween = get_tree().create_tween().bind_node(self).set_trans(Tween." +"TRANS_ELASTIC)\n" +"tween.tween_property($Sprite, \"modulate\", Color.red, 1)\n" +"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n" +"tween.tween_callback($Sprite, \"queue_free\")\n" +"[/codeblock]\n" +"[SceneTreeTween] è¿˜æœ‰ä¸€ç§æœ‰æ„æ€çš„用法,å¯ä»¥å¯¹ä»»æ„一组对象进行动画:\n" +"[codeblock]\n" +"var tween = create_tween()\n" +"for sprite in get_children():\n" +" tween.tween_property(sprite, \"position\", Vector2(), 1)\n" +"[/codeblock]\n" +"上é¢çš„示例ä¸ï¼Œè¯¥èŠ‚ç‚¹çš„æ‰€æœ‰åèŠ‚ç‚¹éƒ½ä¼šä¾æ¬¡è¢«ç§»åŠ¨åˆ° (0, 0)。\n" +"一些 [Tweener] 会用到过渡和缓动。å‰è€…æŽ¥å— [enum Tween.TransitionType] 常é‡ï¼Œ" +"指的是如何处ç†è¯¥åŠ¨ç”»çš„æ—¶é—´ï¼ˆç¤ºä¾‹è§ [url=https://easings.net/]easings.net[/" +"url])。第二个接å—的是 [enum Tween.EaseType] 常é‡ï¼ŒæŽ§åˆ¶ [code]trans_type[/" +"code] 应用到æ’值ä¸çš„ä½ç½®ï¼ˆå¼€å¤´ã€ç»“å°¾ã€å¤´å°¾å‡æœ‰ï¼‰ã€‚å¦‚æžœä½ ä¸çŸ¥é“该选用哪ç§è¿‡æ¸¡" +"和缓动,å¯ä»¥ä½¿ç”¨ [constant Tween.EASE_IN_OUT] é…åˆå°è¯•ä¸åŒçš„ [enum Tween." +"TransitionType],然åŽé€‰ç”¨çœ‹ä¸ŠåŽ»æœ€å¥½çš„é‚£ç§ã€‚\n" +"[url=https://raw.githubusercontent.com/godotengine/godot-docs/master/img/" +"tween_cheatsheet.png]补间缓动与过渡类型速查表[/url]\n" +"[b]注æ„:[/b]所有 [SceneTreeTween] 都默认会自动å¯åŠ¨ã€‚å¦‚æžœè¦é˜»æ¢æŸä¸ª " +"[SceneTreeTween] 自动å¯åŠ¨ï¼Œä½ å¯ä»¥åœ¨åˆ›å»ºåŽç«‹å³è°ƒç”¨ [method stop]。" #: doc/classes/SceneTreeTween.xml msgid "" @@ -66201,6 +66639,12 @@ msgid "" "For a shorter way to create and bind a [SceneTreeTween], you can use [method " "Node.create_tween]." msgstr "" +"将这个 [SceneTreeTween] 绑定到给定的 [code]node[/code] 上。[SceneTreeTween] " +"是由 [SceneTree] 直接处ç†çš„,所以ä¸ä¾èµ–被动画的节点è¿è¡Œã€‚将该 " +"[SceneTreeTween] 绑定到æŸä¸ª [Node] åŽï¼Œè¯¥å¯¹è±¡ä¸åœ¨æ ‘䏿—¶è¯¥ [SceneTreeTween] å°±" +"会暂åœåŠ¨ç”»ï¼Œç»‘å®šå¯¹è±¡è¢«é‡Šæ”¾æ—¶è¯¥ [SceneTreeTween] 会被自动销æ¯ã€‚å¦å¤–," +"[constant TWEEN_PAUSE_BOUND] 会让暂åœè¡Œä¸ºä¾èµ–于绑定的节点。\n" +"使用 [method Node.create_tween] æ¥åˆ›å»ºå¹¶ç»‘定 [SceneTreeTween] 更简å•。" #: doc/classes/SceneTreeTween.xml msgid "" @@ -66213,6 +66657,14 @@ msgid "" "tween.chain().tween_property(...) # Will run after two above are finished.\n" "[/codeblock]" msgstr "" +"用于在使用 [code]true[/code] 调用 [method set_parallel] åŽï¼Œå°†ä¸¤ä¸ª [Tweener] " +"串è”。\n" +"[codeblock]\n" +"var tween = create_tween().set_parallel(true)\n" +"tween.tween_property(...)\n" +"tween.tween_property(...) # 会和上一æ¡å¹¶è¡Œæ‰§è¡Œã€‚\n" +"tween.chain().tween_property(...) # 会在å‰ä¸¤æ¡å®ŒæˆåŽæ‰§è¡Œã€‚\n" +"[/codeblock]" #: doc/classes/SceneTreeTween.xml msgid "" @@ -66225,6 +66677,13 @@ msgid "" "[b]Note:[/b] The [SceneTreeTween] will become invalid after finished, but " "you can call [method stop] after the step, to keep it and reset." msgstr "" +"使用给定的增é‡ç§’æ•° [code]delta[/code] 处ç†è¯¥ [SceneTreeTween]。最常è§çš„用法是" +"在该 [SceneTreeTween] æš‚åœæ—¶å¯¹å…¶è¿›è¡Œæ‰‹åŠ¨æŽ§åˆ¶ã€‚ä¹Ÿå¯ç”¨äºŽç«‹å³åœæ¢è¯¥ " +"[SceneTreeTween] 的动画,使用比完整长度更大的 [code]delta[/code] å³å¯ã€‚\n" +"如果该 [SceneTreeTween] ä»ç„¶æœ‰æœªå®Œæˆçš„ [Tweener],则返回 [code]true[/" +"code]。\n" +"[b]注æ„:[/b]该 [SceneTreeTween] 在完æˆåŽä¼šå¤±æ•ˆï¼Œä½†ä½ å¯ä»¥åœ¨ step åŽè°ƒç”¨ " +"[method stop] 将其ä¿ç•™å¹¶é‡ç½®ã€‚" #: doc/classes/SceneTreeTween.xml msgid "" @@ -66235,6 +66694,11 @@ msgid "" "after the [SceneTreeTween] has finished animating will be slightly greater " "than the actual [SceneTreeTween] duration." msgstr "" +"返回该 [SceneTreeTween] 已进行动画的总时长(å³è‡ªå¼€å§‹ä»¥æ¥ç»è¿‡çš„æ—¶é—´ï¼Œä¸è®¡ç®—æš‚" +"åœç‰æ—¶é—´ï¼‰ï¼Œå•ä½ä¸ºç§’。时长会å—到 [method set_speed_scale] å½±å“,[method " +"stop] 会将其é‡ç½®ä¸º [code]0[/code]。\n" +"[b]注æ„:[/b]ç”±äºŽæ—¶é•¿æ˜¯ç”±å¸§çš„å¢žé‡æ—¶é—´ç´¯è®¡è€Œæ¥çš„,该 [SceneTreeTween] 完æˆåŠ¨ç”»" +"åŽæ‰€è¿”回的时长会比 [SceneTreeTween] 的实际时长略大。" #: doc/classes/SceneTreeTween.xml msgid "" @@ -66255,12 +66719,23 @@ msgid "" "will always return the final value, regardless of [code]elapsed_time[/code] " "provided." msgstr "" +"䏿ƒ³ä½¿ç”¨ [SceneTreeTween] 进行动画时,å¯ä»¥ä½¿ç”¨è¿™ä¸ªæ–¹æ³•进行手动æ’值。与 " +"[method @GDScript.lerp] 类似,但支æŒè‡ªå®šä¹‰è¿‡æ¸¡å’Œç¼“动。\n" +"[code]initial_value[/code] 为æ’值的起始值。\n" +"[code]delta_value[/code] 为æ’值的å˜åŒ–值,å³ç‰äºŽ [code]final_value - " +"initial_value[/code]。\n" +"[code]elapsed_time[/code] 为æ’å€¼å¼€å§‹åŽæ‰€ç»è¿‡çš„秒数,用于控制æ’值的ä½ç½®ã€‚例" +"如,ç‰äºŽ [code]duration[/code] çš„ä¸€åŠæ—¶ï¼Œæ’值åŽçš„值ä½äºŽåˆå§‹å€¼å’Œæœ€ç»ˆå€¼çš„一åŠã€‚" +"这个值也å¯ä»¥æ¯” [code]duration[/code] 大或者比 0 å°ï¼Œæ¤æ—¶ä¼šè¿›è¡Œå¤–æ’。\n" +"[code]duration[/code] 为æ’值的总时长。\n" +"[b]注æ„:[/b]如果 [code]duration[/code] ç‰äºŽ [code]0[/code]ï¼Œé‚£ä¹ˆæ— è®ºæä¾›çš„ " +"[code]elapsed_time[/code] 为多少,该方法返回的始终是最终值。" #: doc/classes/SceneTreeTween.xml msgid "" "Returns whether the [SceneTreeTween] is currently running, i.e. it wasn't " "paused and it's not finished." -msgstr "" +msgstr "返回该 [SceneTreeTween] ç›®å‰æ˜¯å¦æ£åœ¨æ‰§è¡Œï¼Œå³æœªæš‚åœä¸”未完æˆã€‚" #: doc/classes/SceneTreeTween.xml msgid "" @@ -66272,10 +66747,15 @@ msgid "" "[SceneTreeTween] can't have [Tweener]s appended, because it can't animate " "them. You can however still use [method interpolate_value]." msgstr "" +"返回该 [SceneTreeTween] æ˜¯å¦æœ‰æ•ˆã€‚有效的 [SceneTreeTween] æ˜¯ç”±åœºæ™¯æ ‘åŒ…å«çš„ " +"[SceneTreeTween]ï¼ˆå³ [method SceneTree.get_processed_tweens] 返回的数组ä¸åŒ…å«" +"这个 [SceneTreeTween])。[SceneTreeTween] 失效的情况有:补间完æˆã€è¢«é”€æ¯ã€ä½¿" +"用 [code]Tween.new()[/code] åˆ›å»ºã€‚æ— æ•ˆçš„ [SceneTreeTween] ä¸èƒ½è¿½åŠ " +"[Tweener]ï¼Œå› ä¸ºæ— æ³•è¿›è¡ŒåŠ¨ç”»ã€‚ä¸è¿‡ [method interpolate_value] 还是å¯ä»¥ä½¿ç”¨çš„。" #: doc/classes/SceneTreeTween.xml msgid "Aborts all tweening operations and invalidates the [SceneTreeTween]." -msgstr "" +msgstr "ç»ˆæ¢æ‰€æœ‰è¡¥é—´æ“作并将该 [SceneTreeTween] ç½®ä¸ºæ— æ•ˆã€‚" #: doc/classes/SceneTreeTween.xml msgid "" @@ -66290,21 +66770,32 @@ msgid "" "You can make the [SceneTreeTween] parallel by default by using [method " "set_parallel]." msgstr "" +"让下一个 [Tweener] 与上一个并行执行。示例:\n" +"[codeblock]\n" +"var tween = create_tween()\n" +"tween.tween_property(...)\n" +"tween.parallel().tween_property(...)\n" +"tween.parallel().tween_property(...)\n" +"[/codeblock]\n" +"该示例ä¸çš„æ‰€æœ‰ [Tweener] éƒ½ä¼šåŒæ—¶æ‰§è¡Œã€‚\n" +"ä½ å¯ä»¥é€šè¿‡ä½¿ç”¨ [method set_parallel] 让该 [SceneTreeTween] 默认并行。" #: doc/classes/SceneTreeTween.xml msgid "" "Pauses the tweening. The animation can be resumed by using [method play]." -msgstr "" +msgstr "æš‚åœè¡¥é—´ã€‚å¯ä»¥ä½¿ç”¨ [method play] æ¢å¤åŠ¨ç”»ã€‚" #: doc/classes/SceneTreeTween.xml msgid "Resumes a paused or stopped [SceneTreeTween]." -msgstr "" +msgstr "æ¢å¤æš‚åœæˆ–åœæ¢çš„ [SceneTreeTween]。" #: doc/classes/SceneTreeTween.xml msgid "" "Sets the default ease type for [PropertyTweener]s and [MethodTweener]s " "animated by this [SceneTreeTween]." msgstr "" +"设置由这个 [SceneTreeTween] 进行动画的 [PropertyTweener] å’Œ [MethodTweener] " +"的默认缓动类型。" #: doc/classes/SceneTreeTween.xml msgid "" @@ -66321,12 +66812,22 @@ msgid "" "[SceneTreeTween]'s lifetime depends on some node, always use [method " "bind_node]." msgstr "" +"è¿™åªè¯¥è¡¥é—´åºåˆ—çš„é‡å¤æ¬¡æ•°ï¼Œå³ [code]set_loops(2)[/code] 会让动画执行两次。\n" +"调用这个方法时如果ä¸å¸¦å‚数,那么该 [SceneTreeTween] ä¼šæ— é™æ‰§è¡Œï¼Œç›´åˆ°è¢« " +"[method kill] 销æ¯ã€ç»‘å®šèŠ‚ç‚¹è¢«é‡Šæ”¾ã€æˆ–è€…æ‰€æœ‰è¿›è¡ŒåŠ¨ç”»çš„å¯¹è±¡éƒ½è¢«é‡Šæ”¾ï¼ˆæ— æ³•å†è¿›" +"行任何动画)。\n" +"[b]è¦å‘Šï¼š[/b]ä½¿ç”¨æ— é™å¾ªçŽ¯æ—¶è¯·ä¸€å®šè¦åŠ å…¥ä¸€äº›æ—¶é•¿/延迟。0 时长的循环动画(例如" +"å•个ä¸å¸¦å»¶è¿Ÿçš„ [CallbackTweener] æˆ–è€…èŠ‚ç‚¹æ— æ•ˆçš„ [PropertyTweener]ï¼‰å’Œæ— é™ " +"[code]while[/code] å¾ªçŽ¯æ˜¯ä¸€æ ·çš„ï¼Œä¼šå¯¼è‡´æ¸¸æˆå†»ç»“。如果 [SceneTreeTween] 的生命" +"期ä¾èµ–于æŸä¸ªèŠ‚ç‚¹ï¼Œè¯·ä¸€å®šä½¿ç”¨ [method bind_node]。" #: doc/classes/SceneTreeTween.xml msgid "" "If [code]parallel[/code] is [code]true[/code], the [Tweener]s appended after " "this method will by default run simultaneously, as opposed to sequentially." msgstr "" +"如果 [code]parallel[/code] 为 [code]true[/code],那么在这个方法之åŽè¿½åŠ çš„ " +"[Tweener] å°†é»˜è®¤åŒæ—¶æ‰§è¡Œï¼Œè€Œä¸æ˜¯é¡ºåºæ‰§è¡Œã€‚" #: doc/classes/SceneTreeTween.xml msgid "" @@ -66334,6 +66835,9 @@ msgid "" "paused. Check [enum TweenPauseMode] for options.\n" "Default value is [constant TWEEN_PAUSE_BOUND]." msgstr "" +"决定该 [SceneTreeTween] 在 [SceneTree] æš‚åœæ—¶çš„行为。å¯é€‰é¡¹è¯·æŸ¥çœ‹ [enum " +"TweenPauseMode]。\n" +"默认值为 [constant TWEEN_PAUSE_BOUND]。" #: doc/classes/SceneTreeTween.xml msgid "" @@ -66342,23 +66846,30 @@ msgid "" "_physics_process].\n" "Default value is [constant Tween.TWEEN_PROCESS_IDLE]." msgstr "" +"决定该 [SceneTreeTween] åº”å½“åœ¨ç©ºé—²å¸§ï¼ˆè§ [method Node._process])还是物ç†å¸§" +"ï¼ˆè§ [method Node._physics_process])执行。\n" +"默认值为 [constant Tween.TWEEN_PROCESS_IDLE]。" #: doc/classes/SceneTreeTween.xml msgid "" "Scales the speed of tweening. This affects all [Tweener]s and their delays." -msgstr "" +msgstr "è¡¥é—´çš„é€Ÿåº¦ç¼©æ”¾ã€‚å½±å“æ‰€æœ‰ [Tweener] åŠå…¶å»¶è¿Ÿã€‚" #: doc/classes/SceneTreeTween.xml msgid "" "Sets the default transition type for [PropertyTweener]s and [MethodTweener]s " "animated by this [SceneTreeTween]." msgstr "" +"设置由这个 [SceneTreeTween] 进行动画的 [PropertyTweener] å’Œ [MethodTweener] " +"的默认过渡类型。" #: doc/classes/SceneTreeTween.xml msgid "" "Stops the tweening and resets the [SceneTreeTween] to its initial state. " "This will not remove any appended [Tweener]s." msgstr "" +"åœæ¢è¡¥é—´ï¼Œå¹¶å°†è¯¥ [SceneTreeTween] é‡ç½®ä¸ºåˆå§‹çжæ€ã€‚ä¸ä¼šç§»é™¤å·²è¿½åŠ çš„ " +"[Tweener]。" #: doc/classes/SceneTreeTween.xml msgid "" @@ -66377,6 +66888,19 @@ msgid "" "tween.tween_callback($Sprite, \"set_modulate\", [Color.blue]).set_delay(2)\n" "[/codeblock]" msgstr "" +"åˆ›å»ºå¹¶è¿½åŠ ä¸€ä¸ª [CallbackTweener]。这个方法å¯ç”¨äºŽè°ƒç”¨ä»»æ„å¯¹è±¡çš„ä»»æ„æ–¹æ³•。请使" +"用 [code]binds[/code] 绑定é¢å¤–çš„è°ƒç”¨å‚æ•°ã€‚\n" +"示例:总是æ¯éš” 1 秒射击一次的对象。\n" +"[codeblock]\n" +"var tween = get_tree().create_tween().set_loops()\n" +"tween.tween_callback(self, \"shoot\").set_delay(1)\n" +"[/codeblock]\n" +"示例:将精çµå˜çº¢ç„¶åŽå˜è“,带有 2 秒延迟。\n" +"[codeblock]\n" +"var tween = get_tree().create_tween()\n" +"tween.tween_callback($Sprite, \"set_modulate\", [Color.red]).set_delay(2)\n" +"tween.tween_callback($Sprite, \"set_modulate\", [Color.blue]).set_delay(2)\n" +"[/codeblock]" #: doc/classes/SceneTreeTween.xml msgid "" @@ -66403,6 +66927,25 @@ msgid "" "tween.tween_interval(2)\n" "[/codeblock]" msgstr "" +"åˆ›å»ºå¹¶è¿½åŠ ä¸€ä¸ª [IntervalTweener]。这个方法å¯ç”¨äºŽåœ¨è¡¥é—´åŠ¨ç”»ä¸åˆ›å»ºå»¶è¿Ÿï¼Œå¯ä»¥æ›¿" +"代在其他 [Tweener] ä¸ä½¿ç”¨å»¶è¿Ÿï¼Œæˆ–æ— åŠ¨ç”»çš„æƒ…å†µï¼ˆæ¤æ—¶ [SceneTreeTween] 充当计时" +"器的角色)。[code]time[/code] 为间隔时间,å•ä½ä¸ºç§’。\n" +"ç¤ºä¾‹ï¼šåˆ›å»ºä»£ç æ‰§è¡Œçš„间隔。\n" +"[codeblock]\n" +"# ... 一些代ç \n" +"yield(create_tween().tween_interval(2), \"finished\")\n" +"# ... 更多代ç \n" +"[/codeblock]\n" +"示例:创建æ¯éš”å‡ ç§’å°±æ¥å›žç§»åŠ¨å¹¶è·³è·ƒçš„å¯¹è±¡ã€‚\n" +"[codeblock]\n" +"var tween = create_tween().set_loops()\n" +"tween.tween_property($Sprite, \"position:x\", 200.0, 1).as_relative()\n" +"tween.tween_callback(self, \"jump\")\n" +"tween.tween_interval(2)\n" +"tween.tween_property($Sprite, \"position:x\", -200.0, 1).as_relative()\n" +"tween.tween_callback(self, \"jump\")\n" +"tween.tween_interval(2)\n" +"[/codeblock]" #: doc/classes/SceneTreeTween.xml msgid "" @@ -66432,6 +66975,28 @@ msgid "" " $Label.text = \"Counting \" + str(value)\n" "[/codeblock]" msgstr "" +"åˆ›å»ºå¹¶è¿½åŠ ä¸€ä¸ª [MethodTweener]。这个方法与 [method tween_callback] å’Œ " +"[method tween_property] 的组åˆç±»ä¼¼ï¼Œä¼šä½¿ç”¨è¡¥é—´åŽçš„å€¼ä½œä¸ºå‚æ•°åŽ»æŒç»è°ƒç”¨æŸä¸ªæ–¹" +"法。该值是从 [code]from[/code] 到 [code]to[/code] 进行补间的,时长为 " +"[code]duration[/code] 秒。请使用 [code]binds[/code] 绑定é¢å¤–çš„è°ƒç”¨å‚æ•°ã€‚ä½ å¯" +"以使用 [method MethodTweener.set_ease] å’Œ [method MethodTweener.set_trans] æ¥" +"调整该值的缓动和过渡,å¯ä»¥ä½¿ç”¨ [method MethodTweener.set_delay] æ¥å»¶è¿Ÿè¡¥" +"间。\n" +"示例:让 3D 对象é¢å‘å¦ä¸€ä¸ªç‚¹ã€‚\n" +"[codeblock]\n" +"var tween = create_tween()\n" +"tween.tween_method(self, \"look_at\", Vector3(-1, 0, -1), Vector3(1, 0, -1), " +"1, [Vector3.UP]) # look_at() æ–¹æ³•çš„ç¬¬äºŒä¸ªå‚æ•°æŽ¥å—的是上å‘é‡ã€‚\n" +"[/codeblock]\n" +"示例:在一段延迟åŽï¼Œä½¿ç”¨ä¸é—´æ–¹æ³•æ¥è®¾ç½® [Label] 的文本。\n" +"[codeblock]\n" +"func _ready():\n" +" var tween = create_tween()\n" +" tween.tween_method(self, \"set_label_text\", 0, 10, 1).set_delay(1)\n" +"\n" +"func set_label_text(value: int):\n" +" $Label.text = \"Counting \" + str(value)\n" +"[/codeblock]" #: doc/classes/SceneTreeTween.xml msgid "" @@ -66464,6 +67029,29 @@ msgid "" "as_relative().from_current().set_trans(Tween.TRANS_EXPO)\n" "[/codeblock]" msgstr "" +"åˆ›å»ºå¹¶è¿½åŠ ä¸€ä¸ª [PropertyTweener]。这个方法会将 [code]object[/code] 对象的 " +"[code]property[/code] 属性在åˆå§‹å€¼å’Œæœ€ç»ˆå€¼ [code]final_val[/code] 之间进行补" +"间,æŒç»æ—¶é—´ä¸º [code]duration[/code] 秒。åˆå§‹å€¼é»˜è®¤ä¸ºè¯¥ [PropertyTweener] å¯" +"动时的值。例如:\n" +"[codeblock]\n" +"var tween = create_tween()\n" +"tween.tween_property($Sprite, \"position\", Vector2(100, 200), 1)\n" +"tween.tween_property($Sprite, \"position\", Vector2(200, 300), 1)\n" +"[/codeblock]\n" +"会将该精çµç§»åŠ¨åˆ° (100, 200) ç„¶åŽå†ç§»åŠ¨åˆ° (200, 300)ã€‚å¦‚æžœä½ ä½¿ç”¨äº† [method " +"PropertyTweener.from] 或 [method PropertyTweener.from_current],那么起始ä½ç½®" +"就会被给定的值所覆盖。更多调整项请å‚阅 [PropertyTweener] ä¸çš„其他方法。\n" +"[b]注æ„:[/b]é¼ æ ‡æ‚¬åœåœ¨æ£€æŸ¥å™¨ä¸çš„属性上å³å¯æŸ¥çœ‹æ£ç¡®çš„属性åç§°ã€‚ä½ è¿˜å¯ä»¥ç”¨ " +"[code]\"属性:组件\"[/code] çš„å½¢å¼æä¾›å±žæ€§ä¸çš„组件(例如 [code]position:x[/" +"code]ï¼‰ï¼Œè¿™æ ·å°±åªä¼šä¿®æ”¹è¿™ä¸ªç‰¹å®šçš„组件。\n" +"示例:使用ä¸åŒçš„过渡类型从åŒä¸€ä½ç½®å¼€å§‹ç§»åŠ¨ä¸¤æ¬¡ã€‚\n" +"[codeblock]\n" +"var tween = create_tween()\n" +"tween.tween_property($Sprite, \"position\", Vector2.RIGHT * 300, 1)." +"as_relative().set_trans(Tween.TRANS_SINE)\n" +"tween.tween_property($Sprite, \"position\", Vector2.RIGHT * 300, 1)." +"as_relative().from_current().set_trans(Tween.TRANS_EXPO)\n" +"[/codeblock]" #: doc/classes/SceneTreeTween.xml msgid "" @@ -66475,6 +67063,11 @@ msgid "" "frame. Calling [method stop] inside the signal callback will preserve the " "[SceneTreeTween]." msgstr "" +"在该 [SceneTreeTween] å®Œæˆæ‰€æœ‰è¡¥é—´æ—¶è§¦å‘。该 [SceneTreeTween] è¢«è®¾ä¸ºæ— é™å¾ªçޝ" +"æ—¶ä¸ä¼šè§¦å‘ï¼ˆè§ [method set_loops])。\n" +"[b]注æ„:[/b]触å‘这个信å·åŽï¼Œè¯¥ [SceneTreeTween] ä¼šè¢«ç§»é™¤ï¼ˆç½®ä¸ºæ— æ•ˆï¼‰ï¼Œä½†ä¸æ˜¯" +"ç«‹å³å‘生的,而是在下一个处ç†å¸§ä¸å‘生。在该信å·çš„回调ä¸è°ƒç”¨ [method stop] 会ä¿" +"留该 [SceneTreeTween]。" #: doc/classes/SceneTreeTween.xml msgid "" @@ -66482,6 +67075,8 @@ msgid "" "loop index. This signal is not emitted after final loop, use [signal " "finished] instead for this case." msgstr "" +"完æˆä¸€æ¬¡å¾ªçŽ¯æ—¶è§¦å‘ï¼ˆè§ [method set_loops]),会æä¾›è¯¥å¾ªçŽ¯çš„ç´¢å¼•å·ã€‚这个信å·ä¸" +"会在最åŽä¸€æ¬¡å¾ªçޝåŽè§¦å‘ï¼Œè¿™ç§æƒ…况请使用 [signal finished] 代替。" #: doc/classes/SceneTreeTween.xml msgid "" @@ -66489,6 +67084,8 @@ msgid "" "step index. One step is either a single [Tweener] or a group of [Tweener]s " "running parallelly." msgstr "" +"完æˆè¯¥ [SceneTreeTween] 的一æ¥å®ŒæˆåŽè§¦å‘,会æä¾›è¿™ä¸€æ¥çš„索引å·ã€‚ä¸€æ¥æŒ‡çš„æ˜¯å•" +"个 [Tweener] 或一组并行执行的 [Tweener]。" #: doc/classes/SceneTreeTween.xml msgid "" @@ -66496,17 +67093,18 @@ msgid "" "process (see [member Node.pause_mode]). Otherwise it's the same as [constant " "TWEEN_PAUSE_STOP]." msgstr "" +"如果该 [SceneTreeTween] ç»‘å®šäº†èŠ‚ç‚¹ï¼Œä¼šåœ¨è¯¥èŠ‚ç‚¹èƒ½å¤Ÿå¤„ç†æ—¶è¿›è¡Œå¤„ç†ï¼ˆè§ [member " +"Node.pause_mode])。å¦åˆ™ä¸Ž [constant TWEEN_PAUSE_STOP] 相åŒã€‚" #: doc/classes/SceneTreeTween.xml msgid "If [SceneTree] is paused, the [SceneTreeTween] will also pause." -msgstr "" +msgstr "如果 [SceneTree] æš‚åœäº†ï¼Œåˆ™è¯¥ [SceneTreeTween] 也会暂åœã€‚" #: doc/classes/SceneTreeTween.xml -#, fuzzy msgid "" "The [SceneTreeTween] will process regardless of whether [SceneTree] is " "paused." -msgstr "ä¸ç®¡ [SceneTree] 的暂åœçжæ€å¦‚ä½•ï¼Œç»§ç» process。" +msgstr "æ— è®º [SceneTree] æ˜¯å¦æš‚åœï¼Œè¯¥ [SceneTreeTween] 都会进行处ç†ã€‚" #: doc/classes/Script.xml msgid "A class stored as a resource." @@ -67077,17 +67675,20 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape touches another. If there are " -"no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape touches another.\n" +"If there are no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the shape to check collisions with " "([code]with_shape[/code]), and the transformation matrix of that shape " "([code]shape_xform[/code])." msgstr "" -"返回这个形状与å¦ä¸€ä¸ªå½¢çŠ¶ç›¸æŽ¥è§¦çš„ç‚¹çš„åˆ—è¡¨ã€‚å¦‚æžœæ²¡æœ‰ç¢°æ’žï¼Œåˆ™åˆ—è¡¨ä¸ºç©ºã€‚\n" -"这个方法需è¦è¿™ä¸ªå½¢çŠ¶çš„å˜æ¢çŸ©é˜µï¼ˆ[code]local_xform[/code]ï¼‰ï¼Œè¦æ£€æŸ¥ç¢°æ’žçš„形状" -"([code]with_shape[/code]),以åŠé‚£ä¸ªå½¢çŠ¶çš„å˜æ¢çŸ©é˜µï¼ˆ[code]shape_xform[/" -"code])。" #: doc/classes/Shape2D.xml msgid "" @@ -67107,9 +67708,18 @@ msgstr "" "çš„è¿åŠ¨ï¼ˆ[code]shape_motion[/code])。" #: doc/classes/Shape2D.xml +#, fuzzy msgid "" -"Returns a list of the points where this shape would touch another, if a " -"given movement was applied. If there are no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape would touch another, " +"if a given movement was applied.\n" +"If there would be no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the movement to test on this shape " "([code]local_motion[/code]), the shape to check collisions with " @@ -72083,7 +72693,6 @@ msgstr "" "[code]size_right[/code] å’Œ [code]size_bottom[/code] åƒç´ 。" #: doc/classes/StyleBoxFlat.xml -#, fuzzy msgid "" "Antialiasing draws a small ring around the edges, which fades to " "transparency. As a result, edges look much smoother. This is only noticeable " @@ -72094,7 +72703,7 @@ msgid "" "glitches." msgstr "" "抗锯齿会在边缘周围绘制一个æ¸å˜åˆ°é€æ˜Žçš„å°çŽ¯ã€‚å› æ¤è¾¹ç¼˜çœ‹èµ·æ¥ä¼šæ›´åŠ å¹³æ»‘ã€‚è¿™ä»…åœ¨" -"ä½¿ç”¨åœ†è§’æ—¶æ‰æ˜Žæ˜¾ã€‚\n" +"使用圆角或 [member skew] æ—¶æ‰æ˜Žæ˜¾ã€‚\n" "[b]注æ„:[/b]使用 45 度倒角([member corner_detail] = 1)时,建议将 [member " "anti_aliasing] 设为 [code]false[/code]ï¼Œè¿™æ ·å¯ä»¥ä¿è¯ç”»é¢é”利ã€é¿å…一些显示问" "题。" @@ -72188,6 +72797,12 @@ msgid "" "user may try to click an area of the StyleBox that cannot actually receive " "clicks." msgstr "" +"å°†è¯¥æ ·å¼ç›’扩展到该控件矩形的底边。å¯ä»¥ä¸Ž [member border_width_bottom] 组åˆï¼Œ" +"在该控件矩形之外绘制边框。\n" +"[b]注æ„:[/b]与 [member StyleBox.content_margin_bottom] ä¸åŒï¼Œ[member " +"expand_margin_bottom] [i]å¹¶ä¸ä¼š[/i]å½±å“ [Control] çš„å¯ç‚¹å‡»åŒºåŸŸã€‚错误使用时会" +"对å¯ç”¨æ€§é€ æˆè´Ÿé¢å½±å“ï¼Œå› ä¸ºç”¨æˆ·å¯èƒ½ä¼šç‚¹å‡»è¯¥ StyleBox ä¸Šå®žé™…æ— æ³•æŽ¥å—点击的区" +"域。" #: doc/classes/StyleBoxFlat.xml msgid "" @@ -72200,6 +72815,11 @@ msgid "" "user may try to click an area of the StyleBox that cannot actually receive " "clicks." msgstr "" +"å°†è¯¥æ ·å¼ç›’扩展到该控件矩形的左边。å¯ä»¥ä¸Ž [member border_width_left] 组åˆï¼Œåœ¨" +"该控件矩形之外绘制边框。\n" +"[b]注æ„:[/b]与 [member StyleBox.content_margin_left] ä¸åŒï¼Œ[member " +"expand_margin_left] [i]å¹¶ä¸ä¼š[/i]å½±å“ [Control] çš„å¯ç‚¹å‡»åŒºåŸŸã€‚错误使用时会对" +"å¯ç”¨æ€§é€ æˆè´Ÿé¢å½±å“ï¼Œå› ä¸ºç”¨æˆ·å¯èƒ½ä¼šç‚¹å‡»è¯¥ StyleBox ä¸Šå®žé™…æ— æ³•æŽ¥å—点击的区域。" #: doc/classes/StyleBoxFlat.xml msgid "" @@ -72212,6 +72832,11 @@ msgid "" "user may try to click an area of the StyleBox that cannot actually receive " "clicks." msgstr "" +"å°†è¯¥æ ·å¼ç›’扩展到该控件矩形的å³è¾¹ã€‚å¯ä»¥ä¸Ž [member border_width_right] 组åˆï¼Œåœ¨" +"该控件矩形之外绘制边框。\n" +"[b]注æ„:[/b]与 [member StyleBox.content_margin_right] ä¸åŒï¼Œ[member " +"expand_margin_right] [i]å¹¶ä¸ä¼š[/i]å½±å“ [Control] çš„å¯ç‚¹å‡»åŒºåŸŸã€‚错误使用时会对" +"å¯ç”¨æ€§é€ æˆè´Ÿé¢å½±å“ï¼Œå› ä¸ºç”¨æˆ·å¯èƒ½ä¼šç‚¹å‡»è¯¥ StyleBox ä¸Šå®žé™…æ— æ³•æŽ¥å—点击的区域。" #: doc/classes/StyleBoxFlat.xml msgid "" @@ -72223,6 +72848,11 @@ msgid "" "[Control]s. This can negatively impact usability if used wrong, as the user " "may try to click an area of the StyleBox that cannot actually receive clicks." msgstr "" +"å°†è¯¥æ ·å¼ç›’扩展到该控件矩形的顶边。å¯ä»¥ä¸Ž [member border_width_top] 组åˆï¼Œåœ¨è¯¥" +"控件矩形之外绘制边框。\n" +"[b]注æ„:[/b]与 [member StyleBox.content_margin_top] ä¸åŒï¼Œ[member " +"expand_margin_top] [i]å¹¶ä¸ä¼š[/i]å½±å“ [Control] çš„å¯ç‚¹å‡»åŒºåŸŸã€‚错误使用时会对å¯" +"ç”¨æ€§é€ æˆè´Ÿé¢å½±å“ï¼Œå› ä¸ºç”¨æˆ·å¯èƒ½ä¼šç‚¹å‡»è¯¥ StyleBox ä¸Šå®žé™…æ— æ³•æŽ¥å—点击的区域。" #: doc/classes/StyleBoxFlat.xml msgid "" @@ -72254,6 +72884,13 @@ msgid "" "increasing the expand margin does not increase the size of the clickable " "area for [Control]s." msgstr "" +"如果任何轴被设为了éžé›¶å€¼ï¼Œ[member skew] 就会将该 StyleBox 进行横å‘å’Œ/或纵å‘å˜" +"形。å¯ç”¨äºŽå®žçŽ°â€œæœªæ¥é£Žâ€çš„ UI。æ£å€¼ä¼šè®©è¯¥ StyleBox æœå³ï¼ˆX 轴)上(Y è½´ï¼‰åæ–œï¼Œ" +"负值会让该 StyleBox æœå·¦ï¼ˆX 轴)下(Y è½´ï¼‰åæ–œã€‚\n" +"[b]注æ„:[/b]为了让文本ä¸è§¦ç¢°åˆ°è¯¥ StyleBox 的边缘,请考虑增大该 [StyleBox] çš„" +"内容边è·ï¼ˆè§ [member StyleBox.content_margin_bottom]ï¼‰ã€‚å¢žå¤§å†…å®¹è¾¹è·æ¯”增大扩" +"展边è·ï¼ˆè§ [member expand_margin_bottom]ï¼‰æ›´å¥½ï¼Œå› ä¸ºå¢žå¤§æ‰©å±•è¾¹è·å¹¶ä¸ä¼šå¢žå¤§ " +"[Control] çš„å¯ç‚¹å‡»åŒºåŸŸã€‚" #: doc/classes/StyleBoxLine.xml msgid "[StyleBox] that displays a single line." @@ -76181,7 +76818,6 @@ msgid "" msgstr "将给定的 Unix 时间戳转æ¢ä¸º ISO 8601 日期å—符串(YYYY-MM-DD)。" #: doc/classes/Time.xml -#, fuzzy msgid "" "Converts the given ISO 8601 date and time string (YYYY-MM-DDTHH:MM:SS) to a " "dictionary of keys: [code]year[/code], [code]month[/code], [code]day[/code], " @@ -76196,7 +76832,8 @@ msgstr "" "为:[code]year[/code]ã€[code]month[/code]ã€[code]day[/code]ã€[code]weekday[/" "code]ã€[code]hour[/code]ã€[code]minute[/code]ã€[code]second[/code]。\n" "[code]weekday[/code] ä¸ºå‡æ—¶ï¼Œä¸åŒ…å« [code]weekday[/code] 记录(计算花费相对较" -"大)。" +"大)。\n" +"[b]注æ„:[/b]æ—¶é—´å—符串ä¸çš„å°æ•°ä¼šè¢«é™é»˜å¿½ç•¥ã€‚" #: doc/classes/Time.xml msgid "" @@ -76367,7 +77004,6 @@ msgstr "" "时区与给定的日期时间å—典相åŒã€‚" #: doc/classes/Time.xml -#, fuzzy msgid "" "Converts the given ISO 8601 date and/or time string to a Unix timestamp. The " "string can contain a date only, a time only, or both.\n" @@ -76380,10 +77016,10 @@ msgstr "" "将给定的 ISO 8601 日期和/或时间å—符串转æ¢ä¸º Unix 时间戳。å—符串ä¸å¯ä»¥åªåŒ…嫿—¥" "期ã€åªåŒ…嫿—¶é—´ï¼Œä¹Ÿå¯ä»¥ä¸¤è€…都包å«ã€‚\n" "[b]注æ„:[/b]Unix 时间戳通常是 UTC 的。本方法ä¸ä¼šåšä»»ä½•时区转æ¢ï¼Œæ‰€ä»¥æ—¶é—´æˆ³çš„" -"时区与给定的日期时间å—符串相åŒã€‚" +"时区与给定的日期时间å—符串相åŒã€‚\n" +"[b]注æ„:[/b]æ—¶é—´å—符串ä¸çš„å°æ•°ä¼šè¢«é™é»˜å¿½ç•¥ã€‚" #: doc/classes/Time.xml -#, fuzzy msgid "" "Returns the current Unix timestamp in seconds based on the system time in " "UTC. This method is implemented by the operating system and always returns " @@ -76392,7 +77028,9 @@ msgid "" "returns the timestamp as a [float] for sub-second precision." msgstr "" "返回当å‰çš„ Unix 时间戳,以秒为å•ä½ï¼ŒåŸºäºŽ UTC 系统时间。本方法由æ“作系统实现," -"返回的时间总是 UTC 的。" +"返回的时间总是 UTC 的。\n" +"[b]注æ„:[/b]与其他使用整数时间戳的方法ä¸åŒï¼Œè¿™ä¸ªæ–¹æ³•返回的是 [float] 类型的" +"时间戳,å¯ä»¥è¡¨ç¤ºæ¯”秒更高的精度。" #: doc/classes/Time.xml msgid "The month of January, represented numerically as [code]01[/code]." @@ -76846,31 +77484,32 @@ msgid "" msgstr "返回使用æ£äº¤åŸºï¼ˆ90 度)以åŠå½’一化的轴å‘é‡ï¼ˆç¼©æ”¾ä¸º 1 或 -1ï¼‰çš„å˜æ¢ã€‚" #: doc/classes/Transform.xml -#, fuzzy msgid "" "Returns a copy of the transform rotated around the given [code]axis[/code] " "by the given [code]angle[/code] (in radians), using matrix multiplication. " "The [code]axis[/code] must be a normalized vector." msgstr "" -"ä½¿ç”¨çŸ©é˜µä¹˜æ³•ï¼Œå°†å˜æ¢å›´ç»•给定的轴旋转给定的角度(å•ä½ä¸ºå¼§åº¦ï¼‰ã€‚轴必须是归一化" -"çš„å‘é‡ã€‚" +"è¿”å›žè¯¥å˜æ¢çš„副本,使用矩阵乘法将其围绕给定的轴 [code]axis[/code] 旋转给定的角" +"度 [code]angle[/code](å•ä½ä¸ºå¼§åº¦ï¼‰ã€‚è½´ [code]axis[/code] 必须是归一化的å‘" +"é‡ã€‚" #: doc/classes/Transform.xml -#, fuzzy msgid "" "Returns a copy of the transform with its basis and origin scaled by the " "given [code]scale[/code] factor, using matrix multiplication." -msgstr "ä½¿ç”¨çŸ©é˜µä¹˜æ³•ï¼Œé€šè¿‡ç»™å®šçš„ç¼©æ”¾ç³»æ•°ï¼Œå¯¹å˜æ¢çš„基和原点进行缩放。" +msgstr "" +"è¿”å›žè¯¥å˜æ¢çš„副本,使用矩阵乘法,通过给定的缩放系数 [code]scale[/code],对它的" +"基和原点进行缩放。" #: doc/classes/Transform.xml doc/classes/Transform2D.xml -#, fuzzy msgid "" "Returns a copy of the transform translated by the given [code]offset[/code], " "relative to the transform's basis vectors.\n" "Unlike [method rotated] and [method scaled], this does not use matrix " "multiplication." msgstr "" -"ç›¸å¯¹äºŽå˜æ¢çš„基å‘é‡ï¼Œå°†å˜æ¢æŒ‰ç»™å®šçš„åç§»é‡è¿›è¡Œå¹³ç§»ã€‚\n" +"è¿”å›žè¯¥å˜æ¢çš„å‰¯æœ¬ï¼Œå°†å…¶ç›¸å¯¹äºŽè¯¥å˜æ¢çš„基å‘釿Œ‰ç»™å®šçš„åç§»é‡ [code]offset[/code] " +"进行平移。\n" "与 [method rotated] å’Œ [method scaled] ä¸åŒï¼Œå®ƒä¸ä½¿ç”¨çŸ©é˜µä¹˜æ³•。" #: doc/classes/Transform.xml @@ -76992,18 +77631,20 @@ msgid "Returns the scale." msgstr "返回缩放。" #: doc/classes/Transform2D.xml -#, fuzzy msgid "" "Returns a copy of the transform rotated by the given [code]angle[/code] (in " "radians), using matrix multiplication." -msgstr "ä½¿ç”¨çŸ©é˜µä¹˜æ³•ï¼Œå°†å˜æ¢æ—‹è½¬ç»™å®šçš„角度,å³å¼§åº¦ã€‚" +msgstr "" +"è¿”å›žè¯¥å˜æ¢çš„副本,使用矩阵乘法将其旋转给定的角度 [code]angle[/code](å•ä½ä¸ºå¼§" +"度)。" #: doc/classes/Transform2D.xml -#, fuzzy msgid "" "Returns a copy of the transform scaled by the given [code]scale[/code] " "factor, using matrix multiplication." -msgstr "使用矩阵乘法,用给定的缩放系数æ¥ç¼©æ”¾å˜æ¢ã€‚" +msgstr "" +"è¿”å›žè¯¥å˜æ¢çš„副本,使用矩阵乘法将其用给定的缩放系数 [code]scale[/code] 进行缩" +"放。" #: doc/classes/Transform2D.xml msgid "" @@ -77279,7 +77920,6 @@ msgstr "" "è¦èŽ·å¾—è¿”å›žçš„æ”¾ç½®éƒ¨åˆ†ç›¸å¯¹é¡¹ï¼Œè¯·ä½¿ç”¨[method get_item_at_position]。" #: doc/classes/Tree.xml -#, fuzzy msgid "" "Returns the currently edited item. Can be used with [signal item_edited] to " "get the item that was modified.\n" @@ -77291,13 +77931,13 @@ msgid "" " print($Tree.get_edited()) # This item just got edited (e.g. checked).\n" "[/codeblock]" msgstr "" -"返回当å‰è¢«ç¼–辑的项。å¯ä»¥å’Œ[signal item_edited]一起使用,获得被修改的项。\n" +"返回当å‰è¢«ç¼–辑的项。å¯ä»¥å’Œ [signal item_edited] 一起使用,获得被修改的项。\n" "[codeblock]\n" "func _ready():\n" -" $Tree.item_edited.connect(on_Tree_item_edited)\n" +" $Tree.connect(\"item_edited\", self, \"on_Tree_item_edited\")\n" "\n" "func on_Tree_item_edited():\n" -" print($Tree.get_edited()) # This item just got edited (e.g. checked).\n" +" print($Tree.get_edited()) # 这个项目刚刚被编辑(例如勾选)。\n" "[/codeblock]" #: doc/classes/Tree.xml @@ -78191,7 +78831,6 @@ msgid "Smoothly animates a node's properties over time." msgstr "ä½¿èŠ‚ç‚¹çš„å±žæ€§éšæ—¶é—´å¹³æ»‘地å˜åŒ–。" #: doc/classes/Tween.xml -#, fuzzy msgid "" "Tweens are useful for animations requiring a numerical property to be " "interpolated over a range of values. The name [i]tween[/i] comes from [i]in-" @@ -78258,7 +78897,9 @@ msgstr "" "[url=https://raw.githubusercontent.com/godotengine/godot-docs/master/img/" "tween_cheatsheet.png]Tween 缓动与过渡类型速查表[/url]\n" "[b]注æ„:[/b]å¦‚æžœæ— æ³•å®Œæˆæ‰€è¯·æ±‚çš„æ“作,Tween 的方法会返回 [code]false[/" -"code]。" +"code]。\n" +"[b]注æ„:[/b]如果想è¦ä½¿ç”¨å¦ä¸€ç§å½¢å¼çš„ä¸éœ€è¦ä½¿ç”¨èŠ‚ç‚¹çš„è¡¥é—´åŠ¨ç”»ï¼Œè¯·å‚阅 " +"[SceneTreeTween]。" #: doc/classes/Tween.xml msgid "" @@ -78599,7 +79240,7 @@ msgstr "[constant EASE_IN] and [constant EASE_OUT]的组åˆã€‚两端的æ’值最 #: doc/classes/Tweener.xml msgid "Abstract class for all Tweeners used by [SceneTreeTween]." -msgstr "" +msgstr "[SceneTreeTween] 所使用的所有 Tweener(补间器)的抽象类。" #: doc/classes/Tweener.xml msgid "" @@ -78608,11 +79249,12 @@ msgid "" "can't be created manually, you need to use a dedicated method from " "[SceneTreeTween]." msgstr "" +"Tweener 是执行特定动画任务的对象,例如对属性进行æ’值ã€åœ¨ç»™å®šçš„æ—¶åˆ»è°ƒç”¨æŸä¸ªæ–¹" +"法。[Tweener] æ— æ³•æ‰‹åŠ¨åˆ›å»ºï¼Œä½ éœ€è¦ä½¿ç”¨ [SceneTreeTween] ä¸çš„专用方法。" #: doc/classes/Tweener.xml -#, fuzzy msgid "Emitted when the [Tweener] has just finished its job." -msgstr "å½“èŠ‚ç‚¹è¿›å…¥æ ‘æ—¶è§¦å‘。" +msgstr "当该 [Tweener] 刚刚完æˆå…¶ä»»åŠ¡æ—¶è§¦å‘。" #: doc/classes/UDPServer.xml msgid "Helper class to implement a UDP server." @@ -79693,15 +80335,14 @@ msgstr "" "vector2_angle_to.png]返回角度的说明。[/url]" #: doc/classes/Vector2.xml -#, fuzzy msgid "" "Returns the angle between the line connecting the two points and the X axis, " "in radians.\n" "[url=https://raw.githubusercontent.com/godotengine/godot-docs/stable/img/" "vector2_angle_to_point.png]Illustration of the returned angle.[/url]" msgstr "" -"返回连接两点的直线与X轴的夹角,å•ä½ä¸ºå¼§åº¦ã€‚\n" -"[url=https://raw.githubusercontent.com/godotengine/godot-docs/master/img/" +"返回连接两点的直线与 X 轴的夹角,å•ä½ä¸ºå¼§åº¦ã€‚\n" +"[url=https://raw.githubusercontent.com/godotengine/godot-docs/stable/img/" "vector2_angle_to_point.png]返回角度的图示。[/url]" #: doc/classes/Vector2.xml @@ -79897,11 +80538,12 @@ msgstr "" "é‡ã€‚" #: doc/classes/Vector2.xml -#, fuzzy msgid "" "Returns the vector rotated by [code]angle[/code] (in radians). See also " "[method @GDScript.deg2rad]." -msgstr "返回旋转了[code]phi[/code]弧度的å‘é‡ã€‚å‚阅[method @GDScript.deg2rad]。" +msgstr "" +"返回旋转了 [code]angle[/code] çš„å‘é‡ï¼ˆå•ä½ä¸ºå¼§åº¦ï¼‰ã€‚å¦è¯·å‚阅 [method " +"@GDScript.deg2rad]。" #: doc/classes/Vector2.xml doc/classes/Vector3.xml msgid "" @@ -80004,7 +80646,6 @@ msgid "Vector used for 3D math." msgstr "用于 3D æ•°å¦çš„å‘é‡ã€‚" #: doc/classes/Vector3.xml -#, fuzzy msgid "" "3-element structure that can be used to represent positions in 3D space or " "any other triplet of numeric values.\n" @@ -80012,7 +80653,7 @@ msgid "" "code] if it's equal to [code]Vector3(0, 0, 0)[/code]. Otherwise, a Vector3 " "will always evaluate to [code]true[/code]." msgstr "" -"å¯ç”¨äºŽè¡¨ç¤º 3D 空间ä¸çš„ä½ç½®æˆ–任何其他数值对的 3 å…ƒç´ ç»“æž„ã€‚\n" +"3 å…ƒç´ ç»“æž„ï¼Œå¯ç”¨äºŽè¡¨ç¤º 3D 空间ä¸çš„ä½ç½®æˆ–任何其他数值三元组。\n" "[b]注æ„:[/b]在布尔上下文ä¸ï¼Œå¦‚æžœ Vector3 ç‰äºŽ [code]Vector3(0, 0, 0)[/" "code],将评估为 [code]false[/code]。å¦åˆ™ï¼Œ Vector3 将始终评估为 [code]true[/" "code]。" @@ -80110,11 +80751,12 @@ msgid "Returns this vector reflected from a plane defined by the given normal." msgstr "返回从给定法线定义的平é¢ä¸Šåå°„çš„å‘é‡ã€‚" #: doc/classes/Vector3.xml -#, fuzzy msgid "" "Rotates this vector around a given axis by [code]angle[/code] (in radians). " "The axis must be a normalized vector." -msgstr "å°†æ¤å‘é‡ç»•给定的轴旋转 [code]phi[/code] 弧度。该轴必须是归一化的å‘é‡ã€‚" +msgstr "" +"å°†æ¤å‘é‡ç»•给定的轴旋转 [code]angle[/code](å•ä½ä¸ºå¼§åº¦ï¼‰ã€‚该轴必须是归一化的å‘" +"é‡ã€‚" #: doc/classes/Vector3.xml msgid "" @@ -80849,6 +81491,9 @@ msgid "" "Alternative to [constant Node.NOTIFICATION_DRAG_BEGIN] and [constant Node." "NOTIFICATION_DRAG_END] when you prefer polling the value." msgstr "" +"å¦‚æžœè¯¥è§†åŒºç›®å‰æ£åœ¨æ‰§è¡Œæ‹–拽æ“作,则返回 [code]true[/code]。\n" +"å¦‚æžœä½ æ›´å€¾å‘于对其进行轮询,那么就å¯ä»¥ä½œä¸º [constant Node." +"NOTIFICATION_DRAG_BEGIN] å’Œ [constant Node.NOTIFICATION_DRAG_END] 的替代å“。" #: doc/classes/Viewport.xml msgid "" @@ -86071,6 +86716,26 @@ msgid "" " $TextureRect.texture = proxy_texture\n" "[/codeblock]" msgstr "" +"在两个纹ç†ä¹‹é—´åˆ›å»ºæ›´æ–°é“¾ï¼Œä¸Ž [ViewportTexture] 的原ç†ç±»ä¼¼ã€‚基础纹ç†ä¸º " +"[Viewport] çš„çº¹ç†æ—¶ï¼Œè§†åŒºæ¯æ–°æ¸²æŸ“一帧,代ç†çº¹ç†å°±ä¼šè‡ªåŠ¨æ”¶åˆ°æ›´æ–°ã€‚\n" +"例如,æ¤å¤„的代ç 会利用 VisualServer API å°†ä¸€å¼ é€šç”¨çš„ [ImageTexture] 链接到 " +"[Viewport] 的纹ç†è¾“出上:\n" +"[codeblock]\n" +"func _ready():\n" +" var viewport_rid = get_viewport().get_viewport_rid()\n" +" var viewport_texture_rid = VisualServer." +"viewport_get_texture(viewport_rid)\n" +"\n" +" var proxy_texture = ImageTexture.new()\n" +" var viewport_texture_image_data = VisualServer." +"texture_get_data(viewport_texture_rid)\n" +"\n" +" proxy_texture.create_from_image(viewport_texture_image_data)\n" +" var proxy_texture_rid = proxy_texture.get_rid()\n" +" VisualServer.texture_set_proxy(proxy_texture_rid, viewport_texture_rid)\n" +"\n" +" $TextureRect.texture = proxy_texture\n" +"[/codeblock]" #: doc/classes/VisualServer.xml msgid "" @@ -87193,16 +87858,17 @@ msgid "" "Output color as they came in. This can cause bright lighting to look blown " "out, with noticeable clipping in the output colors." msgstr "" +"æŒ‰ç…§è¾“å…¥åŽŸæ ·è¾“å‡ºé¢œè‰²ã€‚è¾ƒäº®çš„å…‰ç…§ä¼šå¯¼è‡´è¿‡æ›ã€è¾“出的颜色ä¸ä¼šæœ‰å¯è§çš„æˆªæ–。" #: doc/classes/VisualServer.xml -#, fuzzy msgid "" "Use the Reinhard tonemapper. Performs a variation on rendered pixels' colors " "by this formula: [code]color = color / (1 + color)[/code]. This avoids " "clipping bright highlights, but the resulting image can look a bit dull." msgstr "" -"Reinhardt tonemapperè¿ç®—器。通过这个公å¼å¯¹æ¸²æŸ“åƒç´ 的颜色进行å˜åŒ–。" -"[code]color = color / (1 + color)[/code]." +"使用 Reinhard è‰²è°ƒæ˜ å°„å™¨ã€‚å¯¹æ¸²æŸ“åŽçš„åƒç´ 颜色进行调整,使用的是这个公å¼ï¼š" +"[code]color = color / (1 + color)[/code]。å¯ä»¥é¿å…对高光的截æ–,但最终的图åƒ" +"å¯èƒ½çœ‹ä¸ŠåŽ»æœ‰äº›å¯¡æ·¡ã€‚" #: doc/classes/VisualServer.xml msgid "" @@ -87210,6 +87876,8 @@ msgid "" "resulting image that usually looks more vivid than [constant " "ENV_TONE_MAPPER_REINHARD]." msgstr "" +"ä½¿ç”¨ç”µå½±çº§è‰²è°ƒæ˜ å°„å™¨ã€‚å¯ä»¥é¿å…对高光的截æ–,最终的图åƒä¸€èˆ¬æ¯” [constant " +"ENV_TONE_MAPPER_REINHARD] 看上去更鲜艳。" #: doc/classes/VisualServer.xml msgid "" @@ -87221,6 +87889,12 @@ msgid "" "[b]Note:[/b] This tonemapping operator will be removed in Godot 4.0 in favor " "of the more accurate [constant ENV_TONE_MAPPER_ACES_FITTED]." msgstr "" +"使用旧有的 Godot 版本的å¦é™¢è‰²å½©ç¼–ç 系统(Academy Color Encoding System)色调" +"æ˜ å°„å™¨ã€‚ä¸Ž [constant ENV_TONE_MAPPER_ACES_FITTED] ä¸åŒï¼Œè¿™ä¸ªç‰ˆæœ¬çš„ ACES 对较" +"亮的光照的处ç†ä»Žç‰©ç†è§’度看并ä¸ç²¾ç¡®ã€‚ACES 的输出在对比度方é¢é€šå¸¸æ¯” [constant " +"ENV_TONE_MAPPER_REINHARD] å’Œ [constant ENV_TONE_MAPPER_FILMIC] 更高。\n" +"[b]注æ„:[/b]Godot 4.0 ä¸ä¼šç§»é™¤è¿™ä¸ªè‰²è°ƒæ˜ å°„è¿ç®—å,使用更精确的 [constant " +"ENV_TONE_MAPPER_ACES_FITTED]。" #: doc/classes/VisualServer.xml msgid "" @@ -87230,6 +87904,10 @@ msgid "" "has a more contrasted output compared to [constant ENV_TONE_MAPPER_REINHARD] " "and [constant ENV_TONE_MAPPER_FILMIC]." msgstr "" +"使用å¦é™¢è‰²å½©ç¼–ç 系统(Academy Color Encoding Systemï¼‰è‰²è°ƒæ˜ å°„å™¨ã€‚ä¸Žå…¶ä»–é€‰é¡¹ç›¸" +"比,ACES çš„æ¶ˆè€—ç•¥é«˜ï¼Œä½†å¯¹äºŽè¾ƒäº®çš„å…‰ç…§çš„å¤„ç†æ›´çœŸå®žï¼Œè¶Šäº®é¥±å’Œåº¦è¶Šä½Žã€‚ACES 的输" +"出在对比度方é¢é€šå¸¸æ¯” [constant ENV_TONE_MAPPER_REINHARD] å’Œ [constant " +"ENV_TONE_MAPPER_FILMIC] 更高。" #: doc/classes/VisualServer.xml msgid "Lowest quality of screen space ambient occlusion." diff --git a/doc/translations/zh_TW.po b/doc/translations/zh_TW.po index 72e6532ad3..4b40723235 100644 --- a/doc/translations/zh_TW.po +++ b/doc/translations/zh_TW.po @@ -1035,11 +1035,12 @@ msgstr "aasd" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Random range, any floating point value between [code]from[/code] and " -"[code]to[/code].\n" +"Returns a random floating point value between [code]from[/code] and " +"[code]to[/code] (both endpoints inclusive).\n" "[codeblock]\n" "prints(rand_range(0, 1), rand_range(0, 1)) # Prints e.g. 0.135591 0.405263\n" -"[/codeblock]" +"[/codeblock]\n" +"[b]Note:[/b] This is equivalent to [code]randf() * (to - from) + from[/code]." msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml @@ -1083,37 +1084,36 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" -"Returns an array with the given range. Range can be 1 argument [code]N[/" -"code] (0 to [code]N[/code] - 1), two arguments ([code]initial[/code], " -"[code]final - 1[/code]) or three arguments ([code]initial[/code], " -"[code]final - 1[/code], [code]increment[/code]). Returns an empty array if " -"the range isn't valid (e.g. [code]range(2, 5, -1)[/code] or [code]range(5, " -"5, 1)[/code]).\n" -"Returns an array with the given range. [code]range()[/code] can have 1 " -"argument N ([code]0[/code] to [code]N - 1[/code]), two arguments " -"([code]initial[/code], [code]final - 1[/code]) or three arguments " -"([code]initial[/code], [code]final - 1[/code], [code]increment[/code]). " -"[code]increment[/code] can be negative. If [code]increment[/code] is " -"negative, [code]final - 1[/code] will become [code]final + 1[/code]. Also, " -"the initial value must be greater than the final value for the loop to run.\n" -"[codeblock]\n" -"print(range(4))\n" -"print(range(2, 5))\n" -"print(range(0, 6, 2))\n" -"[/codeblock]\n" -"Output:\n" +"Returns an array with the given range. [method range] can be called in three " +"ways:\n" +"[code]range(n: int)[/code]: Starts from 0, increases by steps of 1, and " +"stops [i]before[/i] [code]n[/code]. The argument [code]n[/code] is " +"[b]exclusive[/b].\n" +"[code]range(b: int, n: int)[/code]: Starts from [code]b[/code], increases by " +"steps of 1, and stops [i]before[/i] [code]n[/code]. The arguments [code]b[/" +"code] and [code]n[/code] are [b]inclusive[/b] and [b]exclusive[/b], " +"respectively.\n" +"[code]range(b: int, n: int, s: int)[/code]: Starts from [code]b[/code], " +"increases/decreases by steps of [code]s[/code], and stops [i]before[/i] " +"[code]n[/code]. The arguments [code]b[/code] and [code]n[/code] are " +"[b]inclusive[/b] and [b]exclusive[/b], respectively. The argument [code]s[/" +"code] [b]can[/b] be negative, but not [code]0[/code]. If [code]s[/code] is " +"[code]0[/code], an error message is printed.\n" +"[method range] converts all arguments to [int] before processing.\n" +"[b]Note:[/b] Returns an empty array if no value meets the value constraint " +"(e.g. [code]range(2, 5, -1)[/code] or [code]range(5, 5, 1)[/code]).\n" +"Examples:\n" "[codeblock]\n" -"[0, 1, 2, 3]\n" -"[2, 3, 4]\n" -"[0, 2, 4]\n" +"print(range(4)) # Prints [0, 1, 2, 3]\n" +"print(range(2, 5)) # Prints [2, 3, 4]\n" +"print(range(0, 6, 2)) # Prints [0, 2, 4]\n" +"print(range(4, 1, -1)) # Prints [4, 3, 2]\n" "[/codeblock]\n" "To iterate over an [Array] backwards, use:\n" "[codeblock]\n" "var array = [3, 6, 9]\n" -"var i := array.size() - 1\n" -"while i >= 0:\n" -" print(array[i])\n" -" i -= 1\n" +"for i in range(array.size(), 0, -1):\n" +" print(array[i - 1])\n" "[/codeblock]\n" "Output:\n" "[codeblock]\n" @@ -4215,17 +4215,24 @@ msgid "Maximum value for the mode enum." msgstr "" #: doc/classes/AnimatedSprite.xml -msgid "Sprite node that can use multiple textures for animation." +msgid "" +"Sprite node that contains multiple textures as frames to play for animation." msgstr "" #: doc/classes/AnimatedSprite.xml msgid "" -"Animations are created using a [SpriteFrames] resource, which can be " -"configured in the editor via the SpriteFrames panel.\n" -"[b]Note:[/b] You can associate a set of normal maps by creating additional " -"[SpriteFrames] resources with a [code]_normal[/code] suffix. For example, " -"having 2 [SpriteFrames] resources [code]run[/code] and [code]run_normal[/" -"code] will make it so the [code]run[/code] animation uses the normal map." +"[AnimatedSprite] is similar to the [Sprite] node, except it carries multiple " +"textures as animation frames. Animations are created using a [SpriteFrames] " +"resource, which allows you to import image files (or a folder containing " +"said files) to provide the animation frames for the sprite. The " +"[SpriteFrames] resource can be configured in the editor via the SpriteFrames " +"bottom panel.\n" +"[b]Note:[/b] You can associate a set of normal or specular maps by creating " +"additional [SpriteFrames] resources with a [code]_normal[/code] or " +"[code]_specular[/code] suffix. For example, having 3 [SpriteFrames] " +"resources [code]run[/code], [code]run_normal[/code], and [code]run_specular[/" +"code] will make it so the [code]run[/code] animation uses normal and " +"specular maps." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml @@ -4253,9 +4260,9 @@ msgstr "" msgid "Stops the current animation (does not reset the frame counter)." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml +#: doc/classes/AnimatedSprite.xml msgid "" -"The current animation from the [code]frames[/code] resource. If this value " +"The current animation from the [member frames] resource. If this value " "changes, the [code]frame[/code] counter is reset." msgstr "" @@ -4279,8 +4286,11 @@ msgstr "" msgid "The displayed animation frame's index." msgstr "" -#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml -msgid "The [SpriteFrames] resource containing the animation(s)." +#: doc/classes/AnimatedSprite.xml +msgid "" +"The [SpriteFrames] resource containing the animation(s). Allows you the " +"option to load, edit, clear, make unique and save the states of the " +"[SpriteFrames] resource." msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/Sprite.xml @@ -4332,6 +4342,16 @@ msgid "" "provided, the current animation is played." msgstr "" +#: doc/classes/AnimatedSprite3D.xml +msgid "" +"The current animation from the [code]frames[/code] resource. If this value " +"changes, the [code]frame[/code] counter is reset." +msgstr "" + +#: doc/classes/AnimatedSprite3D.xml +msgid "The [SpriteFrames] resource containing the animation(s)." +msgstr "" + #: doc/classes/AnimatedTexture.xml msgid "Proxy texture for simple frame-based animations." msgstr "" @@ -4848,11 +4868,11 @@ msgstr "" msgid "No interpolation (nearest value)." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Linear interpolation." msgstr "" -#: doc/classes/Animation.xml +#: doc/classes/Animation.xml doc/classes/Gradient.xml msgid "Cubic interpolation." msgstr "" @@ -5888,7 +5908,10 @@ msgid "" "Seeks the animation to the [code]seconds[/code] point in time (in seconds). " "If [code]update[/code] is [code]true[/code], the animation updates too, " "otherwise it updates at process time. Events between the current frame and " -"[code]seconds[/code] are skipped." +"[code]seconds[/code] are skipped.\n" +"[b]Note:[/b] Seeking to the end of the animation doesn't emit [signal " +"animation_finished]. If you want to skip animation and emit the signal, use " +"[method advance]." msgstr "" #: doc/classes/AnimationPlayer.xml @@ -7081,7 +7104,10 @@ msgid "" "[code]0[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "Returns the number of times an element is in the array." msgstr "" @@ -7126,10 +7152,14 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array for a value and returns its index or [code]-1[/code] if " -"not found. Optionally, the initial search index can be passed." +"not found. Optionally, the initial search index can be passed. Returns " +"[code]-1[/code] if [code]from[/code] is out of bounds." msgstr "" #: doc/classes/Array.xml @@ -7267,11 +7297,15 @@ msgid "" "[code]null[/code]." msgstr "" -#: doc/classes/Array.xml +#: doc/classes/Array.xml doc/classes/PoolByteArray.xml +#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml +#: doc/classes/PoolRealArray.xml doc/classes/PoolStringArray.xml +#: doc/classes/PoolVector2Array.xml doc/classes/PoolVector3Array.xml msgid "" "Searches the array in reverse order. Optionally, a start search index can be " "passed. If negative, the start index is considered relative to the end of " -"the array." +"the array. If the adjusted start index is out of bounds, this method " +"searches from the end of the array." msgstr "" #: doc/classes/Array.xml @@ -8406,7 +8440,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -8628,7 +8662,7 @@ msgstr "" msgid "" "Adds a new point at the given position with the given identifier. The " "[code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must " -"be 1 or larger.\n" +"be 0.0 or greater.\n" "The [code]weight_scale[/code] is multiplied by the result of [method " "_compute_cost] when determining the overall cost of traveling across a " "segment from a neighboring point to this point. Thus, all else being equal, " @@ -11743,17 +11777,17 @@ msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a normal vector in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml msgid "" "Returns a 3D position in world space, that is the result of projecting a " -"point on the [Viewport] rectangle by the camera projection. This is useful " -"for casting rays in the form of (origin, normal) for object intersection or " -"picking." +"point on the [Viewport] rectangle by the inverse camera projection. This is " +"useful for casting rays in the form of (origin, normal) for object " +"intersection or picking." msgstr "" #: doc/classes/Camera.xml @@ -14008,7 +14042,9 @@ msgstr "" #: doc/classes/CollisionPolygon2D.xml msgid "" "If [code]true[/code], only edges that face up, relative to " -"[CollisionPolygon2D]'s rotation, will collide with other objects." +"[CollisionPolygon2D]'s rotation, will collide with other objects.\n" +"[b]Note:[/b] This property has no effect if this [CollisionPolygon2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionPolygon2D.xml @@ -14104,7 +14140,9 @@ msgstr "" #: doc/classes/CollisionShape2D.xml msgid "" "Sets whether this collision shape should only detect collision on one side " -"(top or bottom)." +"(top or bottom).\n" +"[b]Note:[/b] This property has no effect if this [CollisionShape2D] is a " +"child of an [Area2D] node." msgstr "" #: doc/classes/CollisionShape2D.xml @@ -22520,6 +22558,11 @@ msgid "" "same behavior." msgstr "" +#: doc/classes/EditorSpinSlider.xml +#, fuzzy +msgid "If [code]true[/code], the slider is hidden." +msgstr "å›žå‚³åƒæ•¸çš„餘弦值。" + #: doc/classes/EditorVCSInterface.xml msgid "" "Version Control System (VCS) interface, which reads and writes to the local " @@ -26108,9 +26151,22 @@ msgid "Gradient's colors returned as a [PoolColorArray]." msgstr "" #: doc/classes/Gradient.xml +msgid "" +"Defines how the colors between points of the gradient are interpolated. See " +"[enum InterpolationMode] for available modes." +msgstr "" + +#: doc/classes/Gradient.xml msgid "Gradient's offsets returned as a [PoolRealArray]." msgstr "" +#: doc/classes/Gradient.xml +msgid "" +"Constant interpolation, color changes abruptly at each point and stays " +"uniform between. This might cause visible aliasing when used for a gradient " +"texture in some cases." +msgstr "" + #: doc/classes/GradientTexture.xml msgid "Gradient-filled texture." msgstr "" @@ -34647,13 +34703,13 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used easing from [enum Tween.EaseType]. If not set, the " "default easing is used from the [SceneTreeTween] that contains this Tweener." msgstr "" -#: doc/classes/MethodTweener.xml +#: doc/classes/MethodTweener.xml doc/classes/PropertyTweener.xml msgid "" "Sets the type of used transition from [enum Tween.TransitionType]. If not " "set, the default transition is used from the [SceneTreeTween] that contains " @@ -35365,6 +35421,12 @@ msgid "Creates the agent." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]agent[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" @@ -35434,6 +35496,12 @@ msgid "Create a new map." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation agents [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns the map cell size." msgstr "å›žå‚³åƒæ•¸çš„åæ£å¼¦å€¼ã€‚" @@ -35461,6 +35529,12 @@ msgid "Returns the navigation path to reach the destination from the origin." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns all navigation regions [RID]s that are currently assigned to the " +"requested navigation [code]map[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns [code]true[/code] if the map is active." msgstr "å›žå‚³åƒæ•¸çš„餘弦值。" @@ -35484,6 +35558,12 @@ msgid "Creates a new region." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the navigation map [RID] the requested [code]region[/code] is " +"currently assigned to." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Sets the map for the region." msgstr "å›žå‚³åƒæ•¸çš„æ£å¼¦å€¼ã€‚" @@ -35963,19 +36043,60 @@ msgid "Represents the size of the [enum SourceGeometryMode] enum." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "This class is responsible for creating and clearing navigation meshes." +msgid "Helper class for creating and clearing navigation meshes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml msgid "" -"Bakes the navigation mesh. This will allow you to use pathfinding with the " -"navigation system." +"This class is responsible for creating and clearing 3D navigation meshes " +"used as [NavigationMesh] resources inside [NavigationMeshInstance]. The " +"[NavigationMeshGenerator] has very limited to no use for 2D as the " +"navigation mesh baking process expects 3D node types and 3D source geometry " +"to parse.\n" +"The entire navigation mesh baking is best done in a separate thread as the " +"voxelization, collision tests and mesh optimization steps involved are very " +"performance and time hungry operations.\n" +"Navigation mesh baking happens in multiple steps and the result depends on " +"3D source geometry and properties of the [NavigationMesh] resource. In the " +"first step, starting from a root node and depending on [NavigationMesh] " +"properties all valid 3D source geometry nodes are collected from the " +"[SceneTree]. Second, all collected nodes are parsed for their relevant 3D " +"geometry data and a combined 3D mesh is build. Due to the many different " +"types of parsable objects, from normal [MeshInstance]s to [CSGShape]s or " +"various [CollisionObject]s, some operations to collect geometry data can " +"trigger [VisualServer] and [PhysicsServer] synchronizations. Server " +"synchronization can have a negative effect on baking time or framerate as it " +"often involves [Mutex] locking for thread security. Many parsable objects " +"and the continuous synchronization with other threaded Servers can increase " +"the baking time significantly. On the other hand only a few but very large " +"and complex objects will take some time to prepare for the Servers which can " +"noticeably stall the next frame render. As a general rule the total amount " +"of parsable objects and their individual size and complexity should be " +"balanced to avoid framerate issues or very long baking times. The combined " +"mesh is then passed to the Recast Navigation Object to test the source " +"geometry for walkable terrain suitable to [NavigationMesh] agent properties " +"by creating a voxel world around the meshes bounding area.\n" +"The finalized navigation mesh is then returned and stored inside the " +"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes." msgstr "" #: doc/classes/NavigationMeshGenerator.xml -msgid "Clears the navigation mesh." +msgid "" +"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " +"nodes under the provided [code]root_node[/code] or a specific group of nodes " +"for potential source geometry. The parse behavior can be controlled with the " +"[member NavigationMesh.geometry/parsed_geometry_type] and [member " +"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[NavigationMesh] resource." msgstr "" +#: doc/classes/NavigationMeshGenerator.xml +#, fuzzy +msgid "" +"Removes all polygons and vertices from the provided [code]nav_mesh[/code] " +"resource." +msgstr "計算兩個å‘é‡çš„外ç©ã€‚" + #: doc/classes/NavigationMeshInstance.xml msgid "An instance of a [NavigationMesh]." msgstr "" @@ -35994,7 +36115,10 @@ msgid "" "thread is useful because navigation baking is not a cheap operation. When it " "is completed, it automatically sets the new [NavigationMesh]. Please note " "that baking on separate thread may be very slow if geometry is parsed from " -"meshes as async access to each mesh involves heavy synchronization." +"meshes as async access to each mesh involves heavy synchronization. Also, " +"please note that baking on a separate thread is automatically disabled on " +"operating systems that cannot use threads (such as HTML5 with threads " +"disabled)." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -36040,6 +36164,11 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle.xml +#, fuzzy +msgid "Returns the [RID] of this obstacle on the [NavigationServer]." +msgstr "å›žå‚³åƒæ•¸çš„æ£å¼¦å€¼ã€‚" + +#: doc/classes/NavigationObstacle.xml msgid "" "Sets the [Navigation] node used by the obstacle. Useful when you don't want " "to make the obstacle a child of a [Navigation] node." @@ -36076,6 +36205,11 @@ msgid "" msgstr "" #: doc/classes/NavigationObstacle2D.xml +#, fuzzy +msgid "Returns the [RID] of this obstacle on the [Navigation2DServer]." +msgstr "å›žå‚³åƒæ•¸çš„æ£å¼¦å€¼ã€‚" + +#: doc/classes/NavigationObstacle2D.xml msgid "" "Sets the [Navigation2D] node used by the obstacle. Useful when you don't " "want to make the obstacle a child of a [Navigation2D] node." @@ -37264,7 +37398,7 @@ msgstr "" #: doc/classes/Node.xml msgid "" "Returns [code]true[/code] if the physics interpolated flag is set for this " -"Node (see [method set_physics_interpolated]).\n" +"Node (see [member physics_interpolation_mode]).\n" "[b]Note:[/b] Interpolation will only be active is both the flag is set " "[b]and[/b] physics interpolation is enabled within the [SceneTree]. This can " "be tested using [method is_physics_interpolated_and_enabled]." @@ -37272,8 +37406,8 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Returns [code]true[/code] if physics interpolation is enabled (see [method " -"set_physics_interpolated]) [b]and[/b] enabled in the [SceneTree].\n" +"Returns [code]true[/code] if physics interpolation is enabled (see [member " +"physics_interpolation_mode]) [b]and[/b] enabled in the [SceneTree].\n" "This is a convenience version of [method is_physics_interpolated] that also " "checks whether physics interpolation is enabled globally.\n" "See [member SceneTree.physics_interpolation] and [member ProjectSettings." @@ -37567,14 +37701,6 @@ msgstr "" #: doc/classes/Node.xml msgid "" -"Enables or disables physics interpolation per node, offering a finer grain " -"of control than turning physics interpolation on and off globally.\n" -"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " -"interpolation can sometimes give superior results." -msgstr "" - -#: doc/classes/Node.xml -msgid "" "Enables or disables physics (i.e. fixed framerate) processing. When a node " "is being processed, it will receive a [constant " "NOTIFICATION_PHYSICS_PROCESS] at a fixed (usually 60 FPS, see [member Engine." @@ -37707,6 +37833,15 @@ msgstr "" #: doc/classes/Node.xml msgid "" +"Allows enabling or disabling physics interpolation per node, offering a " +"finer grain of control than turning physics interpolation on and off " +"globally.\n" +"[b]Note:[/b] This can be especially useful for [Camera]s, where custom " +"interpolation can sometimes give superior results." +msgstr "" + +#: doc/classes/Node.xml +msgid "" "The node's priority in the execution order of the enabled processing " "callbacks (i.e. [constant NOTIFICATION_PROCESS], [constant " "NOTIFICATION_PHYSICS_PROCESS] and their internal counterparts). Nodes whose " @@ -37868,6 +38003,24 @@ msgid "Continue to process regardless of the [SceneTree] pause state." msgstr "" #: doc/classes/Node.xml +msgid "" +"Inherits physics interpolation mode from the node's parent. For the root " +"node, it is equivalent to [constant PHYSICS_INTERPOLATION_MODE_ON]. Default." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn off physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml +msgid "" +"Turn on physics interpolation in this node and children set to [constant " +"PHYSICS_INTERPOLATION_MODE_INHERIT]." +msgstr "" + +#: doc/classes/Node.xml msgid "Duplicate the node's signals." msgstr "" @@ -39109,7 +39262,7 @@ msgstr "計算兩個å‘é‡çš„外ç©ã€‚" #: doc/classes/OptionButton.xml msgid "" -"Returns the ID of the selected item, or [code]0[/code] if no item is " +"Returns the ID of the selected item, or [code]-1[/code] if no item is " "selected." msgstr "" @@ -39131,7 +39284,8 @@ msgstr "" #: doc/classes/OptionButton.xml msgid "" "Selects an item by index and makes it the current item. This will work even " -"if the item is disabled." +"if the item is disabled.\n" +"Passing [code]-1[/code] as the index deselects any currently selected item." msgstr "" #: doc/classes/OptionButton.xml @@ -44483,6 +44637,15 @@ msgid "" "should always be preferred." msgstr "" +#: doc/classes/PoolByteArray.xml doc/classes/PoolColorArray.xml +#: doc/classes/PoolIntArray.xml doc/classes/PoolRealArray.xml +#: doc/classes/PoolStringArray.xml doc/classes/PoolVector2Array.xml +#: doc/classes/PoolVector3Array.xml +msgid "" +"Returns [code]true[/code] if the array contains the given value.\n" +"[b]Note:[/b] This is equivalent to using the [code]in[/code] operator." +msgstr "" + #: doc/classes/PoolByteArray.xml msgid "" "Returns a hexadecimal representation of this array as a [String].\n" @@ -45277,6 +45440,10 @@ msgid "[Font] used for the menu items." msgstr "" #: doc/classes/PopupMenu.xml +msgid "[Font] used for the labeled separator." +msgstr "" + +#: doc/classes/PopupMenu.xml msgid "[Texture] icon for the checked checkbox items." msgstr "" @@ -48723,19 +48890,6 @@ msgid "" "interpolating. By default there's no delay." msgstr "" -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used easing from [enum Tween.EaseType]. If not set, the " -"default easing is used from the [Tween] that contains this Tweener." -msgstr "" - -#: doc/classes/PropertyTweener.xml -msgid "" -"Sets the type of used transition from [enum Tween.TransitionType]. If not " -"set, the default transition is used from the [Tween] that contains this " -"Tweener." -msgstr "" - #: doc/classes/ProximityGroup.xml msgid "General-purpose 3D proximity detection node." msgstr "" @@ -53567,8 +53721,15 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape touches another. If there are " -"no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape touches another.\n" +"If there are no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the shape to check collisions with " "([code]with_shape[/code]), and the transformation matrix of that shape " @@ -53589,8 +53750,16 @@ msgstr "" #: doc/classes/Shape2D.xml msgid "" -"Returns a list of the points where this shape would touch another, if a " -"given movement was applied. If there are no collisions the list is empty.\n" +"Returns a list of contact point pairs where this shape would touch another, " +"if a given movement was applied.\n" +"If there would be no collisions, the returned list is empty. Otherwise, the " +"returned list contains contact points arranged in pairs, with entries " +"alternating between points on the boundary of this shape and points on the " +"boundary of [code]with_shape[/code].\n" +"A collision pair A, B can be used to calculate the collision normal with " +"[code](B - A).normalized()[/code], and the collision depth with [code](B - " +"A).length()[/code]. This information is typically used to separate shapes, " +"particularly in collision solvers.\n" "This method needs the transformation matrix for this shape " "([code]local_xform[/code]), the movement to test on this shape " "([code]local_motion[/code]), the shape to check collisions with " diff --git a/drivers/gles3/shaders/tonemap.glsl b/drivers/gles3/shaders/tonemap.glsl index 4f962626a3..a478cf9170 100644 --- a/drivers/gles3/shaders/tonemap.glsl +++ b/drivers/gles3/shaders/tonemap.glsl @@ -231,10 +231,10 @@ vec3 apply_fxaa(vec3 color, vec2 uv_interp, vec2 pixel_size) { } void main() { - vec3 color = textureLod(source, uv_interp, 0.0).rgb; + vec4 color = textureLod(source, uv_interp, 0.0); #ifdef USE_FXAA - color = apply_fxaa(color, uv_interp, pixel_size); + color.rgb = apply_fxaa(color.rgb, uv_interp, pixel_size); #endif // Glow @@ -296,18 +296,18 @@ void main() { #endif //USE_MULTI_TEXTURE_GLOW glow *= glow_intensity; - color = apply_glow(color, glow); + color.rgb = apply_glow(color.rgb, glow); #endif // Additional effects #ifdef USE_BCS - color = apply_bcs(color, bcs); + color.rgb = apply_bcs(color.rgb, bcs); #endif #ifdef USE_COLOR_CORRECTION - color = apply_color_correction(color, color_correction); + color.rgb = apply_color_correction(color.rgb, color_correction); #endif - frag_color = vec4(color, 1.0); + frag_color = color; } diff --git a/drivers/gles3/storage/material_storage.cpp b/drivers/gles3/storage/material_storage.cpp index e93c503396..7b18376a2a 100644 --- a/drivers/gles3/storage/material_storage.cpp +++ b/drivers/gles3/storage/material_storage.cpp @@ -2091,8 +2091,8 @@ void MaterialStorage::global_variable_set(const StringName &p_name, const Varian } else { //texture MaterialStorage *material_storage = MaterialStorage::get_singleton(); - for (RBSet<RID>::Element *E = gv.texture_materials.front(); E; E = E->next()) { - Material *material = material_storage->get_material(E->get()); + for (const RID &E : gv.texture_materials) { + Material *material = material_storage->get_material(E); ERR_CONTINUE(!material); material_storage->_material_queue_update(material, false, true); } @@ -2123,8 +2123,8 @@ void MaterialStorage::global_variable_set_override(const StringName &p_name, con } else { //texture MaterialStorage *material_storage = MaterialStorage::get_singleton(); - for (RBSet<RID>::Element *E = gv.texture_materials.front(); E; E = E->next()) { - Material *material = material_storage->get_material(E->get()); + for (const RID &E : gv.texture_materials) { + Material *material = material_storage->get_material(E); ERR_CONTINUE(!material); material_storage->_material_queue_update(material, false, true); } @@ -2421,8 +2421,8 @@ void MaterialStorage::shader_set_code(RID p_shader, const String &p_code) { shader->data = nullptr; } - for (RBSet<Material *>::Element *E = shader->owners.front(); E; E = E->next()) { - Material *material = E->get(); + for (Material *E : shader->owners) { + Material *material = E; material->shader_mode = new_mode; if (material->data) { memdelete(material->data); @@ -2438,8 +2438,8 @@ void MaterialStorage::shader_set_code(RID p_shader, const String &p_code) { shader->mode = RS::SHADER_MAX; //invalid } - for (RBSet<Material *>::Element *E = shader->owners.front(); E; E = E->next()) { - Material *material = E->get(); + for (Material *E : shader->owners) { + Material *material = E; if (shader->data) { material->data = material_data_request_func[new_mode](shader->data); material->data->self = material->self; @@ -2462,8 +2462,8 @@ void MaterialStorage::shader_set_code(RID p_shader, const String &p_code) { shader->data->set_code(p_code); } - for (RBSet<Material *>::Element *E = shader->owners.front(); E; E = E->next()) { - Material *material = E->get(); + for (Material *E : shader->owners) { + Material *material = E; material->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_MATERIAL); _material_queue_update(material, true, true); } @@ -2504,8 +2504,8 @@ void MaterialStorage::shader_set_default_texture_param(RID p_shader, const Strin if (shader->data) { shader->data->set_default_texture_param(p_name, p_texture, p_index); } - for (RBSet<Material *>::Element *E = shader->owners.front(); E; E = E->next()) { - Material *material = E->get(); + for (Material *E : shader->owners) { + Material *material = E; _material_queue_update(material, false, true); } } diff --git a/drivers/gles3/storage/mesh_storage.cpp b/drivers/gles3/storage/mesh_storage.cpp index 5739a63cac..3be1792868 100644 --- a/drivers/gles3/storage/mesh_storage.cpp +++ b/drivers/gles3/storage/mesh_storage.cpp @@ -68,8 +68,8 @@ void MeshStorage::mesh_free(RID p_rid) { ERR_PRINT("deleting mesh with active instances"); } if (mesh->shadow_owners.size()) { - for (RBSet<Mesh *>::Element *E = mesh->shadow_owners.front(); E; E = E->next()) { - Mesh *shadow_owner = E->get(); + for (Mesh *E : mesh->shadow_owners) { + Mesh *shadow_owner = E; shadow_owner->shadow_mesh = RID(); shadow_owner->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_MESH); } @@ -268,8 +268,8 @@ void MeshStorage::mesh_add_surface(RID p_mesh, const RS::SurfaceData &p_surface) mesh->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_MESH); - for (RBSet<Mesh *>::Element *E = mesh->shadow_owners.front(); E; E = E->next()) { - Mesh *shadow_owner = E->get(); + for (Mesh *E : mesh->shadow_owners) { + Mesh *shadow_owner = E; shadow_owner->shadow_mesh = RID(); shadow_owner->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_MESH); } @@ -610,8 +610,8 @@ void MeshStorage::mesh_clear(RID p_mesh) { mesh->has_bone_weights = false; mesh->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_MESH); - for (RBSet<Mesh *>::Element *E = mesh->shadow_owners.front(); E; E = E->next()) { - Mesh *shadow_owner = E->get(); + for (Mesh *E : mesh->shadow_owners) { + Mesh *shadow_owner = E; shadow_owner->shadow_mesh = RID(); shadow_owner->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_MESH); } diff --git a/drivers/vulkan/rendering_device_vulkan.cpp b/drivers/vulkan/rendering_device_vulkan.cpp index 23c2d764b8..1a60ca0647 100644 --- a/drivers/vulkan/rendering_device_vulkan.cpp +++ b/drivers/vulkan/rendering_device_vulkan.cpp @@ -159,8 +159,8 @@ void RenderingDeviceVulkan::_free_dependencies(RID p_id) { E = reverse_dependency_map.find(p_id); if (E) { - for (RBSet<RID>::Element *F = E->value.front(); F; F = F->next()) { - HashMap<RID, RBSet<RID>>::Iterator G = dependency_map.find(F->get()); + for (const RID &F : E->value) { + HashMap<RID, RBSet<RID>>::Iterator G = dependency_map.find(F); ERR_CONTINUE(!G); ERR_CONTINUE(!G->value.has(p_id)); G->value.erase(p_id); @@ -5473,9 +5473,9 @@ RenderingDeviceVulkan::DescriptorPool *RenderingDeviceVulkan::_descriptor_pool_a DescriptorPool *pool = nullptr; - for (RBSet<DescriptorPool *>::Element *E = descriptor_pools[p_key].front(); E; E = E->next()) { - if (E->get()->usage < max_descriptors_per_pool) { - pool = E->get(); + for (DescriptorPool *E : descriptor_pools[p_key]) { + if (E->usage < max_descriptors_per_pool) { + pool = E; break; } } @@ -8349,31 +8349,31 @@ void RenderingDeviceVulkan::compute_list_end(uint32_t p_post_barrier) { uint32_t barrier_idx = 0; - for (RBSet<Texture *>::Element *E = compute_list->state.textures_to_sampled_layout.front(); E; E = E->next()) { + for (Texture *E : compute_list->state.textures_to_sampled_layout) { VkImageMemoryBarrier &image_memory_barrier = image_barriers[barrier_idx++]; image_memory_barrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; image_memory_barrier.pNext = nullptr; image_memory_barrier.srcAccessMask = VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT; image_memory_barrier.dstAccessMask = access_flags; - image_memory_barrier.oldLayout = E->get()->layout; + image_memory_barrier.oldLayout = E->layout; image_memory_barrier.newLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; image_memory_barrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; image_memory_barrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; - image_memory_barrier.image = E->get()->image; - image_memory_barrier.subresourceRange.aspectMask = E->get()->read_aspect_mask; - image_memory_barrier.subresourceRange.baseMipLevel = E->get()->base_mipmap; - image_memory_barrier.subresourceRange.levelCount = E->get()->mipmaps; - image_memory_barrier.subresourceRange.baseArrayLayer = E->get()->base_layer; - image_memory_barrier.subresourceRange.layerCount = E->get()->layers; - - E->get()->layout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; - - if (E->get()->used_in_frame != frames_drawn) { - E->get()->used_in_transfer = false; - E->get()->used_in_raster = false; - E->get()->used_in_compute = false; - E->get()->used_in_frame = frames_drawn; + image_memory_barrier.image = E->image; + image_memory_barrier.subresourceRange.aspectMask = E->read_aspect_mask; + image_memory_barrier.subresourceRange.baseMipLevel = E->base_mipmap; + image_memory_barrier.subresourceRange.levelCount = E->mipmaps; + image_memory_barrier.subresourceRange.baseArrayLayer = E->base_layer; + image_memory_barrier.subresourceRange.layerCount = E->layers; + + E->layout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; + + if (E->used_in_frame != frames_drawn) { + E->used_in_transfer = false; + E->used_in_raster = false; + E->used_in_compute = false; + E->used_in_frame = frames_drawn; } } diff --git a/editor/animation_bezier_editor.cpp b/editor/animation_bezier_editor.cpp index ff8b72274c..c5f800b17a 100644 --- a/editor/animation_bezier_editor.cpp +++ b/editor/animation_bezier_editor.cpp @@ -747,8 +747,8 @@ void AnimationBezierTrackEdit::_update_locked_tracks_after(int p_track) { } Vector<int> updated_locked_tracks; - for (RBSet<int>::Element *E = locked_tracks.front(); E; E = E->next()) { - updated_locked_tracks.push_back(E->get()); + for (const int &E : locked_tracks) { + updated_locked_tracks.push_back(E); } locked_tracks.clear(); for (int i = 0; i < updated_locked_tracks.size(); ++i) { @@ -766,8 +766,8 @@ void AnimationBezierTrackEdit::_update_hidden_tracks_after(int p_track) { } Vector<int> updated_hidden_tracks; - for (RBSet<int>::Element *E = hidden_tracks.front(); E; E = E->next()) { - updated_hidden_tracks.push_back(E->get()); + for (const int &E : hidden_tracks) { + updated_hidden_tracks.push_back(E); } hidden_tracks.clear(); for (int i = 0; i < updated_hidden_tracks.size(); ++i) { diff --git a/editor/animation_track_editor.cpp b/editor/animation_track_editor.cpp index 7d8197bead..ad4b7b7d95 100644 --- a/editor/animation_track_editor.cpp +++ b/editor/animation_track_editor.cpp @@ -560,30 +560,30 @@ public: if (use_fps && animation->get_step() > 0) { float max_frame = animation->get_length() / animation->get_step(); - p_list->push_back(PropertyInfo(Variant::FLOAT, "frame", PROPERTY_HINT_RANGE, "0," + rtos(max_frame) + ",1")); + p_list->push_back(PropertyInfo(Variant::FLOAT, PNAME("frame"), PROPERTY_HINT_RANGE, "0," + rtos(max_frame) + ",1")); } else { - p_list->push_back(PropertyInfo(Variant::FLOAT, "time", PROPERTY_HINT_RANGE, "0," + rtos(animation->get_length()) + ",0.01")); + p_list->push_back(PropertyInfo(Variant::FLOAT, PNAME("time"), PROPERTY_HINT_RANGE, "0," + rtos(animation->get_length()) + ",0.01")); } switch (animation->track_get_type(track)) { case Animation::TYPE_POSITION_3D: { - p_list->push_back(PropertyInfo(Variant::VECTOR3, "position")); + p_list->push_back(PropertyInfo(Variant::VECTOR3, PNAME("position"))); } break; case Animation::TYPE_ROTATION_3D: { - p_list->push_back(PropertyInfo(Variant::QUATERNION, "rotation")); + p_list->push_back(PropertyInfo(Variant::QUATERNION, PNAME("rotation"))); } break; case Animation::TYPE_SCALE_3D: { - p_list->push_back(PropertyInfo(Variant::VECTOR3, "scale")); + p_list->push_back(PropertyInfo(Variant::VECTOR3, PNAME("scale"))); } break; case Animation::TYPE_BLEND_SHAPE: { - p_list->push_back(PropertyInfo(Variant::FLOAT, "value")); + p_list->push_back(PropertyInfo(Variant::FLOAT, PNAME("value"))); } break; case Animation::TYPE_VALUE: { Variant v = animation->track_get_key_value(track, key); if (hint.type != Variant::NIL) { PropertyInfo pi = hint; - pi.name = "value"; + pi.name = PNAME("value"); p_list->push_back(pi); } else { PropertyHint val_hint = PROPERTY_HINT_NONE; @@ -599,14 +599,14 @@ public: } if (v.get_type() != Variant::NIL) { - p_list->push_back(PropertyInfo(v.get_type(), "value", val_hint, val_hint_string)); + p_list->push_back(PropertyInfo(v.get_type(), PNAME("value"), val_hint, val_hint_string)); } } } break; case Animation::TYPE_METHOD: { - p_list->push_back(PropertyInfo(Variant::STRING_NAME, "name")); - p_list->push_back(PropertyInfo(Variant::INT, "arg_count", PROPERTY_HINT_RANGE, "0,32,1,or_greater")); + p_list->push_back(PropertyInfo(Variant::STRING_NAME, PNAME("name"))); + p_list->push_back(PropertyInfo(Variant::INT, PNAME("arg_count"), PROPERTY_HINT_RANGE, "0,32,1,or_greater")); Dictionary d = animation->track_get_key_value(track, key); ERR_FAIL_COND(!d.has("args")); @@ -620,24 +620,24 @@ public: } for (int i = 0; i < args.size(); i++) { - p_list->push_back(PropertyInfo(Variant::INT, "args/" + itos(i) + "/type", PROPERTY_HINT_ENUM, vtypes)); + p_list->push_back(PropertyInfo(Variant::INT, vformat("%s/%d/%s", PNAME("args"), i, PNAME("type")), PROPERTY_HINT_ENUM, vtypes)); if (args[i].get_type() != Variant::NIL) { - p_list->push_back(PropertyInfo(args[i].get_type(), "args/" + itos(i) + "/value")); + p_list->push_back(PropertyInfo(args[i].get_type(), vformat("%s/%d/%s", PNAME("args"), i, PNAME("value")))); } } } break; case Animation::TYPE_BEZIER: { - p_list->push_back(PropertyInfo(Variant::FLOAT, "value")); - p_list->push_back(PropertyInfo(Variant::VECTOR2, "in_handle")); - p_list->push_back(PropertyInfo(Variant::VECTOR2, "out_handle")); - p_list->push_back(PropertyInfo(Variant::INT, "handle_mode", PROPERTY_HINT_ENUM, "Free,Balanced")); + p_list->push_back(PropertyInfo(Variant::FLOAT, PNAME("value"))); + p_list->push_back(PropertyInfo(Variant::VECTOR2, PNAME("in_handle"))); + p_list->push_back(PropertyInfo(Variant::VECTOR2, PNAME("out_handle"))); + p_list->push_back(PropertyInfo(Variant::INT, PNAME("handle_mode"), PROPERTY_HINT_ENUM, "Free,Balanced")); } break; case Animation::TYPE_AUDIO: { - p_list->push_back(PropertyInfo(Variant::OBJECT, "stream", PROPERTY_HINT_RESOURCE_TYPE, "AudioStream")); - p_list->push_back(PropertyInfo(Variant::FLOAT, "start_offset", PROPERTY_HINT_RANGE, "0,3600,0.01,or_greater")); - p_list->push_back(PropertyInfo(Variant::FLOAT, "end_offset", PROPERTY_HINT_RANGE, "0,3600,0.01,or_greater")); + p_list->push_back(PropertyInfo(Variant::OBJECT, PNAME("stream"), PROPERTY_HINT_RESOURCE_TYPE, "AudioStream")); + p_list->push_back(PropertyInfo(Variant::FLOAT, PNAME("start_offset"), PROPERTY_HINT_RANGE, "0,3600,0.01,or_greater")); + p_list->push_back(PropertyInfo(Variant::FLOAT, PNAME("end_offset"), PROPERTY_HINT_RANGE, "0,3600,0.01,or_greater")); } break; case Animation::TYPE_ANIMATION: { @@ -663,13 +663,13 @@ public: } animations += "[stop]"; - p_list->push_back(PropertyInfo(Variant::STRING_NAME, "animation", PROPERTY_HINT_ENUM, animations)); + p_list->push_back(PropertyInfo(Variant::STRING_NAME, PNAME("animation"), PROPERTY_HINT_ENUM, animations)); } break; } if (animation->track_get_type(track) == Animation::TYPE_VALUE) { - p_list->push_back(PropertyInfo(Variant::FLOAT, "easing", PROPERTY_HINT_EXP_EASING)); + p_list->push_back(PropertyInfo(Variant::FLOAT, PNAME("easing"), PROPERTY_HINT_EXP_EASING)); } } @@ -1417,14 +1417,14 @@ void AnimationTimelineEdit::_anim_length_changed(double p_new_len) { void AnimationTimelineEdit::_anim_loop_pressed() { undo_redo->create_action(TTR("Change Animation Loop")); switch (animation->get_loop_mode()) { - case Animation::LoopMode::LOOP_NONE: { - undo_redo->add_do_method(animation.ptr(), "set_loop_mode", Animation::LoopMode::LOOP_LINEAR); + case Animation::LOOP_NONE: { + undo_redo->add_do_method(animation.ptr(), "set_loop_mode", Animation::LOOP_LINEAR); } break; - case Animation::LoopMode::LOOP_LINEAR: { - undo_redo->add_do_method(animation.ptr(), "set_loop_mode", Animation::LoopMode::LOOP_PINGPONG); + case Animation::LOOP_LINEAR: { + undo_redo->add_do_method(animation.ptr(), "set_loop_mode", Animation::LOOP_PINGPONG); } break; - case Animation::LoopMode::LOOP_PINGPONG: { - undo_redo->add_do_method(animation.ptr(), "set_loop_mode", Animation::LoopMode::LOOP_NONE); + case Animation::LOOP_PINGPONG: { + undo_redo->add_do_method(animation.ptr(), "set_loop_mode", Animation::LOOP_NONE); } break; default: break; @@ -1724,15 +1724,15 @@ void AnimationTimelineEdit::update_values() { } switch (animation->get_loop_mode()) { - case Animation::LoopMode::LOOP_NONE: { + case Animation::LOOP_NONE: { loop->set_icon(get_theme_icon(SNAME("Loop"), SNAME("EditorIcons"))); loop->set_pressed(false); } break; - case Animation::LoopMode::LOOP_LINEAR: { + case Animation::LOOP_LINEAR: { loop->set_icon(get_theme_icon(SNAME("Loop"), SNAME("EditorIcons"))); loop->set_pressed(true); } break; - case Animation::LoopMode::LOOP_PINGPONG: { + case Animation::LOOP_PINGPONG: { loop->set_icon(get_theme_icon(SNAME("PingPongLoop"), SNAME("EditorIcons"))); loop->set_pressed(true); } break; diff --git a/editor/animation_track_editor.h b/editor/animation_track_editor.h index 07c3ed9990..55c3bd922a 100644 --- a/editor/animation_track_editor.h +++ b/editor/animation_track_editor.h @@ -478,10 +478,10 @@ class AnimationTrackEditor : public VBoxContainer { struct TrackClipboard { NodePath full_path; NodePath base_path; - Animation::TrackType track_type = Animation::TrackType::TYPE_ANIMATION; - Animation::InterpolationType interp_type = Animation::InterpolationType::INTERPOLATION_CUBIC; - Animation::UpdateMode update_mode = Animation::UpdateMode::UPDATE_CAPTURE; - Animation::LoopMode loop_mode = Animation::LoopMode::LOOP_LINEAR; + Animation::TrackType track_type = Animation::TYPE_ANIMATION; + Animation::InterpolationType interp_type = Animation::INTERPOLATION_CUBIC; + Animation::UpdateMode update_mode = Animation::UPDATE_CAPTURE; + Animation::LoopMode loop_mode = Animation::LOOP_LINEAR; bool loop_wrap = false; bool enabled = false; diff --git a/editor/create_dialog.cpp b/editor/create_dialog.cpp index fb908ea573..3469e96a0a 100644 --- a/editor/create_dialog.cpp +++ b/editor/create_dialog.cpp @@ -138,8 +138,8 @@ bool CreateDialog::_should_hide_type(const String &p_type) const { return true; // Wrong inheritance. } - for (RBSet<StringName>::Element *E = type_blacklist.front(); E; E = E->next()) { - if (ClassDB::is_parent_class(p_type, E->get())) { + for (const StringName &E : type_blacklist) { + if (ClassDB::is_parent_class(p_type, E)) { return true; // Parent type is blacklisted. } } diff --git a/editor/debugger/editor_debugger_inspector.cpp b/editor/debugger/editor_debugger_inspector.cpp index 6d7f3f4ae2..0dd7b44b68 100644 --- a/editor/debugger/editor_debugger_inspector.cpp +++ b/editor/debugger/editor_debugger_inspector.cpp @@ -193,8 +193,8 @@ ObjectID EditorDebuggerInspector::add_object(const Array &p_arr) { if (old_prop_size == debugObj->prop_list.size() && new_props_added == 0) { //only some may have changed, if so, then update those, if exist - for (RBSet<String>::Element *E = changed.front(); E; E = E->next()) { - emit_signal(SNAME("object_property_updated"), debugObj->remote_object_id, E->get()); + for (const String &E : changed) { + emit_signal(SNAME("object_property_updated"), debugObj->remote_object_id, E); } } else { //full update, because props were added or removed diff --git a/editor/debugger/editor_debugger_node.cpp b/editor/debugger/editor_debugger_node.cpp index de26b56ab6..bc28b11a71 100644 --- a/editor/debugger/editor_debugger_node.cpp +++ b/editor/debugger/editor_debugger_node.cpp @@ -118,8 +118,8 @@ ScriptEditorDebugger *EditorDebuggerNode::_add_debugger() { } if (!debugger_plugins.is_empty()) { - for (RBSet<Ref<Script>>::Element *i = debugger_plugins.front(); i; i = i->next()) { - node->add_debugger_plugin(i->get()); + for (const Ref<Script> &i : debugger_plugins) { + node->add_debugger_plugin(i); } } diff --git a/editor/debugger/editor_profiler.cpp b/editor/debugger/editor_profiler.cpp index 55c3c7af78..9899e91c5a 100644 --- a/editor/debugger/editor_profiler.cpp +++ b/editor/debugger/editor_profiler.cpp @@ -198,13 +198,13 @@ void EditorProfiler::_update_plot() { for (int i = 0; i < total_metrics; i++) { const Metric &m = _get_frame_metric(i); - for (RBSet<StringName>::Element *E = plot_sigs.front(); E; E = E->next()) { - HashMap<StringName, Metric::Category *>::ConstIterator F = m.category_ptrs.find(E->get()); + for (const StringName &E : plot_sigs) { + HashMap<StringName, Metric::Category *>::ConstIterator F = m.category_ptrs.find(E); if (F) { highest = MAX(F->value->total_time, highest); } - HashMap<StringName, Metric::Category::Item *>::ConstIterator G = m.item_ptrs.find(E->get()); + HashMap<StringName, Metric::Category::Item *>::ConstIterator G = m.item_ptrs.find(E); if (G) { if (use_self) { highest = MAX(G->value->self, highest); @@ -234,17 +234,17 @@ void EditorProfiler::_update_plot() { int current = i * frame_metrics.size() / w; - for (RBSet<StringName>::Element *E = plot_sigs.front(); E; E = E->next()) { + for (const StringName &E : plot_sigs) { const Metric &m = _get_frame_metric(current); float value = 0; - HashMap<StringName, Metric::Category *>::ConstIterator F = m.category_ptrs.find(E->get()); + HashMap<StringName, Metric::Category *>::ConstIterator F = m.category_ptrs.find(E); if (F) { value = F->value->total_time; } - HashMap<StringName, Metric::Category::Item *>::ConstIterator G = m.item_ptrs.find(E->get()); + HashMap<StringName, Metric::Category::Item *>::ConstIterator G = m.item_ptrs.find(E); if (G) { if (use_self) { value = G->value->self; @@ -256,12 +256,12 @@ void EditorProfiler::_update_plot() { int plot_pos = CLAMP(int(value * h / highest), 0, h - 1); int prev_plot = plot_pos; - HashMap<StringName, int>::Iterator H = prev_plots.find(E->get()); + HashMap<StringName, int>::Iterator H = prev_plots.find(E); if (H) { prev_plot = H->value; H->value = plot_pos; } else { - prev_plots[E->get()] = plot_pos; + prev_plots[E] = plot_pos; } plot_pos = h - plot_pos - 1; @@ -271,7 +271,7 @@ void EditorProfiler::_update_plot() { SWAP(prev_plot, plot_pos); } - Color col = _get_color_from_signature(E->get()); + Color col = _get_color_from_signature(E); for (int j = prev_plot; j <= plot_pos; j++) { column[j * 4 + 0] += Math::fast_ftoi(CLAMP(col.r * 255, 0, 255)); @@ -534,9 +534,9 @@ Vector<Vector<String>> EditorProfiler::get_data_as_csv() const { Vector<String> signatures; signatures.resize(possible_signatures.size()); int sig_index = 0; - for (const RBSet<StringName>::Element *E = possible_signatures.front(); E; E = E->next()) { - signatures.write[sig_index] = E->get(); - sig_map[E->get()] = sig_index; + for (const StringName &E : possible_signatures) { + signatures.write[sig_index] = E; + sig_map[E] = sig_index; sig_index++; } res.push_back(signatures); diff --git a/editor/editor_about.cpp b/editor/editor_about.cpp index cd5a4f16e4..8e2aa3b35c 100644 --- a/editor/editor_about.cpp +++ b/editor/editor_about.cpp @@ -196,6 +196,7 @@ EditorAbout::EditorAbout() { // License _license_text = memnew(RichTextLabel); + _license_text->set_threaded(true); _license_text->set_name(TTR("License")); _license_text->set_h_size_flags(Control::SIZE_EXPAND_FILL); _license_text->set_v_size_flags(Control::SIZE_EXPAND_FILL); @@ -272,6 +273,7 @@ EditorAbout::EditorAbout() { tpl_hbc->add_child(_tpl_tree); _tpl_text = memnew(RichTextLabel); + _tpl_text->set_threaded(true); _tpl_text->set_h_size_flags(Control::SIZE_EXPAND_FILL); _tpl_text->set_v_size_flags(Control::SIZE_EXPAND_FILL); tpl_hbc->add_child(_tpl_text); diff --git a/editor/editor_asset_installer.cpp b/editor/editor_asset_installer.cpp index 93b155bcd2..b696bc3ac6 100644 --- a/editor/editor_asset_installer.cpp +++ b/editor/editor_asset_installer.cpp @@ -154,8 +154,8 @@ void EditorAssetInstaller::open(const String &p_path, int p_depth) { int num_file_conflicts = 0; - for (RBSet<String>::Element *E = files_sorted.front(); E; E = E->next()) { - String path = E->get(); + for (const String &E : files_sorted) { + String path = E; int depth = p_depth; bool skip = false; while (depth > 0) { @@ -224,7 +224,7 @@ void EditorAssetInstaller::open(const String &p_path, int p_depth) { ti->set_metadata(0, res_path); } - status_map[E->get()] = ti; + status_map[E] = ti; } if (num_file_conflicts >= 1) { diff --git a/editor/editor_export.cpp b/editor/editor_export.cpp index f0eea50d3a..586ffa418c 100644 --- a/editor/editor_export.cpp +++ b/editor/editor_export.cpp @@ -95,9 +95,9 @@ Ref<EditorExportPlatform> EditorExportPreset::get_platform() const { void EditorExportPreset::update_files_to_export() { Vector<String> to_remove; - for (RBSet<String>::Element *E = selected_files.front(); E; E = E->next()) { - if (!FileAccess::exists(E->get())) { - to_remove.push_back(E->get()); + for (const String &E : selected_files) { + if (!FileAccess::exists(E)) { + to_remove.push_back(E); } } for (int i = 0; i < to_remove.size(); ++i) { @@ -107,8 +107,8 @@ void EditorExportPreset::update_files_to_export() { Vector<String> EditorExportPreset::get_files_to_export() const { Vector<String> files; - for (RBSet<String>::Element *E = selected_files.front(); E; E = E->next()) { - files.push_back(E->get()); + for (const String &E : selected_files) { + files.push_back(E); } return files; } @@ -879,8 +879,8 @@ Error EditorExportPlatform::export_project_files(const Ref<EditorExportPreset> & int idx = 0; int total = paths.size(); - for (RBSet<String>::Element *E = paths.front(); E; E = E->next()) { - String path = E->get(); + for (const String &E : paths) { + String path = E; String type = ResourceLoader::get_resource_type(path); if (FileAccess::exists(path + ".import")) { diff --git a/editor/editor_feature_profile.cpp b/editor/editor_feature_profile.cpp index 7eb5aec5d0..670f193326 100644 --- a/editor/editor_feature_profile.cpp +++ b/editor/editor_feature_profile.cpp @@ -166,15 +166,15 @@ Error EditorFeatureProfile::save_to_file(const String &p_path) { Dictionary data; data["type"] = "feature_profile"; Array dis_classes; - for (RBSet<StringName>::Element *E = disabled_classes.front(); E; E = E->next()) { - dis_classes.push_back(String(E->get())); + for (const StringName &E : disabled_classes) { + dis_classes.push_back(String(E)); } dis_classes.sort(); data["disabled_classes"] = dis_classes; Array dis_editors; - for (RBSet<StringName>::Element *E = disabled_editors.front(); E; E = E->next()) { - dis_editors.push_back(String(E->get())); + for (const StringName &E : disabled_editors) { + dis_editors.push_back(String(E)); } dis_editors.sort(); data["disabled_editors"] = dis_editors; @@ -182,8 +182,8 @@ Error EditorFeatureProfile::save_to_file(const String &p_path) { Array dis_props; for (KeyValue<StringName, RBSet<StringName>> &E : disabled_properties) { - for (RBSet<StringName>::Element *F = E.value.front(); F; F = F->next()) { - dis_props.push_back(String(E.key) + ":" + String(F->get())); + for (const StringName &F : E.value) { + dis_props.push_back(String(E.key) + ":" + String(F)); } } diff --git a/editor/editor_file_system.cpp b/editor/editor_file_system.cpp index 56edb03184..e37bfa32bc 100644 --- a/editor/editor_file_system.cpp +++ b/editor/editor_file_system.cpp @@ -1458,8 +1458,8 @@ void EditorFileSystem::_save_late_updated_files() { String fscache = EditorSettings::get_singleton()->get_project_settings_dir().plus_file("filesystem_update4"); Ref<FileAccess> f = FileAccess::open(fscache, FileAccess::WRITE); ERR_FAIL_COND_MSG(f.is_null(), "Cannot create file '" + fscache + "'. Check user write permissions."); - for (RBSet<String>::Element *E = late_update_files.front(); E; E = E->next()) { - f->store_line(E->get()); + for (const String &E : late_update_files) { + f->store_line(E); } } diff --git a/editor/editor_folding.cpp b/editor/editor_folding.cpp index 39dc253429..ad8aaf324c 100644 --- a/editor/editor_folding.cpp +++ b/editor/editor_folding.cpp @@ -40,8 +40,8 @@ Vector<String> EditorFolding::_get_unfolds(const Object *p_object) { if (sections.size()) { String *w = sections.ptrw(); int idx = 0; - for (const RBSet<String>::Element *E = p_object->editor_get_section_folding().front(); E; E = E->next()) { - w[idx++] = E->get(); + for (const String &E : p_object->editor_get_section_folding()) { + w[idx++] = E; } } @@ -270,8 +270,8 @@ void EditorFolding::_do_object_unfolds(Object *p_object, RBSet<Ref<Resource>> &r } } - for (RBSet<String>::Element *E = unfold_group.front(); E; E = E->next()) { - p_object->editor_set_section_unfold(E->get(), true); + for (const String &E : unfold_group) { + p_object->editor_set_section_unfold(E, true); } } diff --git a/editor/editor_help.cpp b/editor/editor_help.cpp index e33d160762..d6278a63fe 100644 --- a/editor/editor_help.cpp +++ b/editor/editor_help.cpp @@ -235,7 +235,7 @@ String EditorHelp::_fix_constant(const String &p_constant) const { } void EditorHelp::_add_method(const DocData::MethodDoc &p_method, bool p_overview) { - method_line[p_method.name] = class_desc->get_line_count() - 2; //gets overridden if description + method_line[p_method.name] = class_desc->get_paragraph_count() - 2; //gets overridden if description const bool is_vararg = p_method.qualifiers.contains("vararg"); @@ -593,8 +593,8 @@ void EditorHelp::_update_doc() { // Class description if (!cd.description.is_empty()) { - section_line.push_back(Pair<String, int>(TTR("Description"), class_desc->get_line_count() - 2)); - description_line = class_desc->get_line_count() - 2; + section_line.push_back(Pair<String, int>(TTR("Description"), class_desc->get_paragraph_count() - 2)); + description_line = class_desc->get_paragraph_count() - 2; class_desc->push_color(title_color); class_desc->push_font(doc_title_font); class_desc->add_text(TTR("Description")); @@ -664,7 +664,7 @@ void EditorHelp::_update_doc() { } if (has_properties) { - section_line.push_back(Pair<String, int>(TTR("Properties"), class_desc->get_line_count() - 2)); + section_line.push_back(Pair<String, int>(TTR("Properties"), class_desc->get_paragraph_count() - 2)); class_desc->push_color(title_color); class_desc->push_font(doc_title_font); class_desc->add_text(TTR("Properties")); @@ -682,7 +682,7 @@ void EditorHelp::_update_doc() { if (cd.properties[i].name.begins_with("_") && cd.properties[i].description.is_empty()) { continue; } - property_line[cd.properties[i].name] = class_desc->get_line_count() - 2; //gets overridden if description + property_line[cd.properties[i].name] = class_desc->get_paragraph_count() - 2; //gets overridden if description // Property type. class_desc->push_cell(); @@ -828,7 +828,7 @@ void EditorHelp::_update_doc() { cd.constructors.sort(); } - section_line.push_back(Pair<String, int>(TTR("Constructors"), class_desc->get_line_count() - 2)); + section_line.push_back(Pair<String, int>(TTR("Constructors"), class_desc->get_paragraph_count() - 2)); class_desc->push_color(title_color); class_desc->push_font(doc_title_font); class_desc->add_text(TTR("Constructors")); @@ -839,7 +839,7 @@ void EditorHelp::_update_doc() { if (sort_methods) { methods.sort(); } - section_line.push_back(Pair<String, int>(TTR("Methods"), class_desc->get_line_count() - 2)); + section_line.push_back(Pair<String, int>(TTR("Methods"), class_desc->get_paragraph_count() - 2)); class_desc->push_color(title_color); class_desc->push_font(doc_title_font); class_desc->add_text(TTR("Methods")); @@ -851,7 +851,7 @@ void EditorHelp::_update_doc() { cd.operators.sort(); } - section_line.push_back(Pair<String, int>(TTR("Operators"), class_desc->get_line_count() - 2)); + section_line.push_back(Pair<String, int>(TTR("Operators"), class_desc->get_paragraph_count() - 2)); class_desc->push_color(title_color); class_desc->push_font(doc_title_font); class_desc->add_text(TTR("Operators")); @@ -860,7 +860,7 @@ void EditorHelp::_update_doc() { // Theme properties if (!cd.theme_properties.is_empty()) { - section_line.push_back(Pair<String, int>(TTR("Theme Properties"), class_desc->get_line_count() - 2)); + section_line.push_back(Pair<String, int>(TTR("Theme Properties"), class_desc->get_paragraph_count() - 2)); class_desc->push_color(title_color); class_desc->push_font(doc_title_font); class_desc->add_text(TTR("Theme Properties")); @@ -882,7 +882,7 @@ void EditorHelp::_update_doc() { data_type_names["style"] = TTR("Styles"); for (int i = 0; i < cd.theme_properties.size(); i++) { - theme_property_line[cd.theme_properties[i].name] = class_desc->get_line_count() - 2; // Gets overridden if description. + theme_property_line[cd.theme_properties[i].name] = class_desc->get_paragraph_count() - 2; // Gets overridden if description. if (theme_data_type != cd.theme_properties[i].data_type) { theme_data_type = cd.theme_properties[i].data_type; @@ -954,7 +954,7 @@ void EditorHelp::_update_doc() { cd.signals.sort(); } - section_line.push_back(Pair<String, int>(TTR("Signals"), class_desc->get_line_count() - 2)); + section_line.push_back(Pair<String, int>(TTR("Signals"), class_desc->get_paragraph_count() - 2)); class_desc->push_color(title_color); class_desc->push_font(doc_title_font); class_desc->add_text(TTR("Signals")); @@ -967,7 +967,7 @@ void EditorHelp::_update_doc() { class_desc->push_indent(1); for (int i = 0; i < cd.signals.size(); i++) { - signal_line[cd.signals[i].name] = class_desc->get_line_count() - 2; // Gets overridden if description. + signal_line[cd.signals[i].name] = class_desc->get_paragraph_count() - 2; // Gets overridden if description. class_desc->push_font(doc_code_font); // monofont class_desc->push_color(headline_color); @@ -1040,7 +1040,7 @@ void EditorHelp::_update_doc() { // Enums if (enums.size()) { - section_line.push_back(Pair<String, int>(TTR("Enumerations"), class_desc->get_line_count() - 2)); + section_line.push_back(Pair<String, int>(TTR("Enumerations"), class_desc->get_paragraph_count() - 2)); class_desc->push_color(title_color); class_desc->push_font(doc_title_font); class_desc->add_text(TTR("Enumerations")); @@ -1051,7 +1051,7 @@ void EditorHelp::_update_doc() { class_desc->add_newline(); for (KeyValue<String, Vector<DocData::ConstantDoc>> &E : enums) { - enum_line[E.key] = class_desc->get_line_count() - 2; + enum_line[E.key] = class_desc->get_paragraph_count() - 2; class_desc->push_font(doc_code_font); class_desc->push_color(title_color); @@ -1098,7 +1098,7 @@ void EditorHelp::_update_doc() { } // Add the enum constant line to the constant_line map so we can locate it as a constant. - constant_line[enum_list[i].name] = class_desc->get_line_count() - 2; + constant_line[enum_list[i].name] = class_desc->get_paragraph_count() - 2; class_desc->push_font(doc_code_font); class_desc->push_color(headline_color); @@ -1144,7 +1144,7 @@ void EditorHelp::_update_doc() { // Constants if (constants.size()) { - section_line.push_back(Pair<String, int>(TTR("Constants"), class_desc->get_line_count() - 2)); + section_line.push_back(Pair<String, int>(TTR("Constants"), class_desc->get_paragraph_count() - 2)); class_desc->push_color(title_color); class_desc->push_font(doc_title_font); class_desc->add_text(TTR("Constants")); @@ -1155,7 +1155,7 @@ void EditorHelp::_update_doc() { class_desc->add_newline(); for (int i = 0; i < constants.size(); i++) { - constant_line[constants[i].name] = class_desc->get_line_count() - 2; + constant_line[constants[i].name] = class_desc->get_paragraph_count() - 2; class_desc->push_font(doc_code_font); if (constants[i].value.begins_with("Color(") && constants[i].value.ends_with(")")) { @@ -1205,7 +1205,7 @@ void EditorHelp::_update_doc() { // Property descriptions if (property_descr) { - section_line.push_back(Pair<String, int>(TTR("Property Descriptions"), class_desc->get_line_count() - 2)); + section_line.push_back(Pair<String, int>(TTR("Property Descriptions"), class_desc->get_paragraph_count() - 2)); class_desc->push_color(title_color); class_desc->push_font(doc_title_font); class_desc->add_text(TTR("Property Descriptions")); @@ -1220,7 +1220,7 @@ void EditorHelp::_update_doc() { continue; } - property_line[cd.properties[i].name] = class_desc->get_line_count() - 2; + property_line[cd.properties[i].name] = class_desc->get_paragraph_count() - 2; class_desc->push_table(2); class_desc->set_table_column_expand(1, true); @@ -1371,7 +1371,7 @@ void EditorHelp::_update_doc() { // Constructor descriptions if (constructor_descriptions) { - section_line.push_back(Pair<String, int>(TTR("Constructor Descriptions"), class_desc->get_line_count() - 2)); + section_line.push_back(Pair<String, int>(TTR("Constructor Descriptions"), class_desc->get_paragraph_count() - 2)); class_desc->push_color(title_color); class_desc->push_font(doc_title_font); class_desc->add_text(TTR("Constructor Descriptions")); @@ -1380,7 +1380,7 @@ void EditorHelp::_update_doc() { // Method descriptions if (method_descriptions) { - section_line.push_back(Pair<String, int>(TTR("Method Descriptions"), class_desc->get_line_count() - 2)); + section_line.push_back(Pair<String, int>(TTR("Method Descriptions"), class_desc->get_paragraph_count() - 2)); class_desc->push_color(title_color); class_desc->push_font(doc_title_font); class_desc->add_text(TTR("Method Descriptions")); @@ -1389,7 +1389,7 @@ void EditorHelp::_update_doc() { // Operator descriptions if (operator_descriptions) { - section_line.push_back(Pair<String, int>(TTR("Operator Descriptions"), class_desc->get_line_count() - 2)); + section_line.push_back(Pair<String, int>(TTR("Operator Descriptions"), class_desc->get_paragraph_count() - 2)); class_desc->push_color(title_color); class_desc->push_font(doc_title_font); class_desc->add_text(TTR("Operator Descriptions")); @@ -1868,6 +1868,7 @@ EditorHelp::EditorHelp() { class_desc = memnew(RichTextLabel); add_child(class_desc); + class_desc->set_threaded(true); class_desc->set_v_size_flags(SIZE_EXPAND_FILL); class_desc->add_theme_color_override("selection_color", get_theme_color(SNAME("accent_color"), SNAME("Editor")) * Color(1, 1, 1, 0.4)); diff --git a/editor/editor_help_search.cpp b/editor/editor_help_search.cpp index d6ed2297c7..b85147fddf 100644 --- a/editor/editor_help_search.cpp +++ b/editor/editor_help_search.cpp @@ -323,10 +323,11 @@ bool EditorHelpSearch::Runner::_phase_match_classes_init() { bool EditorHelpSearch::Runner::_phase_match_classes() { DocData::ClassDoc &class_doc = iterator_doc->value; + if (class_doc.name.is_empty()) { + return false; + } if (!_is_class_disabled_by_feature_profile(class_doc.name)) { - matches[class_doc.name] = ClassMatch(); - ClassMatch &match = matches[class_doc.name]; - + ClassMatch match; match.doc = &class_doc; // Match class name. @@ -400,6 +401,7 @@ bool EditorHelpSearch::Runner::_phase_match_classes() { } } } + matches[class_doc.name] = match; } matches[class_doc.name] = match; } @@ -419,6 +421,9 @@ bool EditorHelpSearch::Runner::_phase_class_items_init() { } bool EditorHelpSearch::Runner::_phase_class_items() { + if (!iterator_match) { + return false; + } ClassMatch &match = iterator_match->value; if (search_flags & SEARCH_SHOW_HIERARCHY) { @@ -444,6 +449,13 @@ bool EditorHelpSearch::Runner::_phase_member_items_init() { bool EditorHelpSearch::Runner::_phase_member_items() { ClassMatch &match = iterator_match->value; + if (!match.doc) { + return false; + } + if (match.doc->name.is_empty()) { + return false; + } + TreeItem *parent = (search_flags & SEARCH_SHOW_HIERARCHY) ? class_items[match.doc->name] : root_item; bool constructor_created = false; for (int i = 0; i < match.methods.size(); i++) { @@ -511,6 +523,9 @@ void EditorHelpSearch::Runner::_match_item(TreeItem *p_item, const String &p_tex } TreeItem *EditorHelpSearch::Runner::_create_class_hierarchy(const ClassMatch &p_match) { + if (p_match.doc->name.is_empty()) { + return nullptr; + } if (class_items.has(p_match.doc->name)) { return class_items[p_match.doc->name]; } @@ -522,7 +537,9 @@ TreeItem *EditorHelpSearch::Runner::_create_class_hierarchy(const ClassMatch &p_ parent = class_items[p_match.doc->inherits]; } else { ClassMatch &base_match = matches[p_match.doc->inherits]; - parent = _create_class_hierarchy(base_match); + if (base_match.doc) { + parent = _create_class_hierarchy(base_match); + } } } diff --git a/editor/editor_help_search.h b/editor/editor_help_search.h index 7b7235145a..3f17c992ac 100644 --- a/editor/editor_help_search.h +++ b/editor/editor_help_search.h @@ -99,7 +99,7 @@ class EditorHelpSearch::Runner : public RefCounted { int phase = 0; struct ClassMatch { - DocData::ClassDoc *doc; + DocData::ClassDoc *doc = nullptr; bool name = false; Vector<DocData::MethodDoc *> constructors; Vector<DocData::MethodDoc *> methods; diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index 0b96900053..f2baaf8b5c 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -231,8 +231,8 @@ void EditorNode::disambiguate_filenames(const Vector<String> p_full_paths, Vecto RBSet<int> iset = index_sets[i]; while (iset.size() > 1) { // Append the parent folder to each scene name. - for (RBSet<int>::Element *E = iset.front(); E; E = E->next()) { - int set_idx = E->get(); + for (const int &E : iset) { + int set_idx = E; String scene_name = r_filenames[set_idx]; String full_path = p_full_paths[set_idx]; @@ -270,11 +270,11 @@ void EditorNode::disambiguate_filenames(const Vector<String> p_full_paths, Vecto while (E) { String scene_name = r_filenames[E->get()]; bool duplicate_found = false; - for (RBSet<int>::Element *F = iset.front(); F; F = F->next()) { - if (E->get() == F->get()) { + for (const int &F : iset) { + if (E->get() == F) { continue; } - String other_scene_name = r_filenames[F->get()]; + String other_scene_name = r_filenames[F]; if (other_scene_name == scene_name) { duplicate_found = true; break; @@ -907,12 +907,12 @@ void EditorNode::_resources_changed(const Vector<String> &p_resources) { } void EditorNode::_fs_changed() { - for (RBSet<FileDialog *>::Element *E = file_dialogs.front(); E; E = E->next()) { - E->get()->invalidate(); + for (FileDialog *E : file_dialogs) { + E->invalidate(); } - for (RBSet<EditorFileDialog *>::Element *E = editor_file_dialogs.front(); E; E = E->next()) { - E->get()->invalidate(); + for (EditorFileDialog *E : editor_file_dialogs) { + E->invalidate(); } _mark_unsaved_scenes(); @@ -1185,8 +1185,8 @@ Error EditorNode::load_resource(const String &p_resource, bool p_ignore_broken_d if (!p_ignore_broken_deps && dependency_errors.has(p_resource)) { Vector<String> errors; - for (RBSet<String>::Element *E = dependency_errors[p_resource].front(); E; E = E->next()) { - errors.push_back(E->get()); + for (const String &E : dependency_errors[p_resource]) { + errors.push_back(E); } dependency_error->show(DependencyErrorDialog::MODE_RESOURCE, p_resource, errors); dependency_errors.erase(p_resource); @@ -1677,8 +1677,8 @@ int EditorNode::_save_external_resources() { // Clear later, because user may have put the same subresource in two different resources, // which will be shared until the next reload. - for (RBSet<Ref<Resource>>::Element *E = edited_subresources.front(); E; E = E->next()) { - Ref<Resource> res = E->get(); + for (const Ref<Resource> &E : edited_subresources) { + Ref<Resource> res = E; res->set_edited(false); } @@ -3663,8 +3663,8 @@ Error EditorNode::load_scene(const String &p_scene, bool p_ignore_broken_deps, b if (!p_ignore_broken_deps && dependency_errors.has(lpath)) { current_menu_option = -1; Vector<String> errors; - for (RBSet<String>::Element *E = dependency_errors[lpath].front(); E; E = E->next()) { - errors.push_back(E->get()); + for (const String &E : dependency_errors[lpath]) { + errors.push_back(E); } dependency_error->show(DependencyErrorDialog::MODE_SCENE, lpath, errors); opening_prev = false; @@ -3680,8 +3680,8 @@ Error EditorNode::load_scene(const String &p_scene, bool p_ignore_broken_deps, b for (KeyValue<String, RBSet<String>> &E : dependency_errors) { String txt = vformat(TTR("Scene '%s' has broken dependencies:"), E.key) + "\n"; - for (RBSet<String>::Element *F = E.value.front(); F; F = F->next()) { - txt += "\t" + F->get() + "\n"; + for (const String &F : E.value) { + txt += "\t" + F + "\n"; } add_io_error(txt); } diff --git a/editor/editor_resource_picker.cpp b/editor/editor_resource_picker.cpp index 41d769ad1f..cb3000ee88 100644 --- a/editor/editor_resource_picker.cpp +++ b/editor/editor_resource_picker.cpp @@ -253,8 +253,8 @@ void EditorResourcePicker::_edit_menu_cbk(int p_which) { } file_dialog->clear_filters(); - for (RBSet<String>::Element *E = valid_extensions.front(); E; E = E->next()) { - file_dialog->add_filter("*." + E->get() + " ; " + E->get().to_upper()); + for (const String &E : valid_extensions) { + file_dialog->add_filter("*." + E + " ; " + E.to_upper()); } file_dialog->popup_file_dialog(); @@ -417,8 +417,8 @@ void EditorResourcePicker::set_create_options(Object *p_menu_node) { custom_resources = EditorNode::get_editor_data().get_custom_types()["Resource"]; } - for (RBSet<String>::Element *E = allowed_types.front(); E; E = E->next()) { - const String &t = E->get(); + for (const String &E : allowed_types) { + const String &t = E; bool is_custom_resource = false; Ref<Texture2D> icon; @@ -599,8 +599,8 @@ bool EditorResourcePicker::_is_drop_valid(const Dictionary &p_drag_data) const { } bool EditorResourcePicker::_is_type_valid(const String p_type_name, RBSet<String> p_allowed_types) const { - for (RBSet<String>::Element *E = p_allowed_types.front(); E; E = E->next()) { - String at = E->get().strip_edges(); + for (const String &E : p_allowed_types) { + String at = E.strip_edges(); if (p_type_name == at || ClassDB::is_parent_class(p_type_name, at) || EditorNode::get_editor_data().script_class_is_parent(p_type_name, at)) { return true; } @@ -651,8 +651,8 @@ void EditorResourcePicker::drop_data_fw(const Point2 &p_point, const Variant &p_ // If the accepted dropped resource is from the extended list, it requires conversion. if (!_is_type_valid(dropped_resource->get_class(), allowed_types)) { - for (RBSet<String>::Element *E = allowed_types.front(); E; E = E->next()) { - String at = E->get().strip_edges(); + for (const String &E : allowed_types) { + String at = E.strip_edges(); if (at == "BaseMaterial3D" && Ref<Texture2D>(dropped_resource).is_valid()) { // Use existing resource if possible and only replace its data. diff --git a/editor/editor_settings.cpp b/editor/editor_settings.cpp index e251a66610..5160492e51 100644 --- a/editor/editor_settings.cpp +++ b/editor/editor_settings.cpp @@ -268,25 +268,25 @@ void EditorSettings::_get_property_list(List<PropertyInfo> *p_list) const { vclist.insert(vc); } - for (RBSet<_EVCSort>::Element *E = vclist.front(); E; E = E->next()) { + for (const _EVCSort &E : vclist) { uint32_t pusage = PROPERTY_USAGE_NONE; - if (E->get().save || !optimize_save) { + if (E.save || !optimize_save) { pusage |= PROPERTY_USAGE_STORAGE; } - if (!E->get().name.begins_with("_") && !E->get().name.begins_with("projects/")) { + if (!E.name.begins_with("_") && !E.name.begins_with("projects/")) { pusage |= PROPERTY_USAGE_EDITOR; } else { pusage |= PROPERTY_USAGE_STORAGE; //hiddens must always be saved } - PropertyInfo pi(E->get().type, E->get().name); + PropertyInfo pi(E.type, E.name); pi.usage = pusage; - if (hints.has(E->get().name)) { - pi = hints[E->get().name]; + if (hints.has(E.name)) { + pi = hints[E.name]; } - if (E->get().restart_if_changed) { + if (E.restart_if_changed) { pi.usage |= PROPERTY_USAGE_RESTART_IF_CHANGED; } diff --git a/editor/editor_translation_parser.cpp b/editor/editor_translation_parser.cpp index 13dff08c14..ddb084e19b 100644 --- a/editor/editor_translation_parser.cpp +++ b/editor/editor_translation_parser.cpp @@ -96,8 +96,8 @@ void EditorTranslationParser::get_recognized_extensions(List<String> *r_extensio for (int i = 0; i < temp.size(); i++) { extensions.insert(temp[i]); } - for (RBSet<String>::Element *E = extensions.front(); E; E = E->next()) { - r_extensions->push_back(E->get()); + for (const String &E : extensions) { + r_extensions->push_back(E); } } diff --git a/editor/import/editor_import_collada.cpp b/editor/import/editor_import_collada.cpp index 8ee47cb6f4..03fda0a1c3 100644 --- a/editor/import/editor_import_collada.cpp +++ b/editor/import/editor_import_collada.cpp @@ -875,8 +875,8 @@ Error ColladaImport::_create_mesh_surfaces(bool p_optimize, Ref<ImporterMesh> &p Vector<Collada::Vertex> vertex_array; //there we go, vertex array vertex_array.resize(vertex_set.size()); - for (RBSet<Collada::Vertex>::Element *F = vertex_set.front(); F; F = F->next()) { - vertex_array.write[F->get().idx] = F->get(); + for (Collada::Vertex &F : vertex_set) { + vertex_array.write[F.idx] = F; } if (has_weights) { @@ -1507,14 +1507,14 @@ void ColladaImport::create_animation(int p_clip, bool p_import_value_tracks) { bool tracks_found = false; - for (RBSet<String>::Element *E = valid_animated_nodes.front(); E; E = E->next()) { + for (const String &E : valid_animated_nodes) { // take snapshots - if (!collada.state.scene_map.has(E->get())) { + if (!collada.state.scene_map.has(E)) { continue; } - NodeMap &nm = node_map[E->get()]; + NodeMap &nm = node_map[E]; String path = scene->get_path_to(nm.node); if (nm.bone >= 0) { @@ -1525,7 +1525,7 @@ void ColladaImport::create_animation(int p_clip, bool p_import_value_tracks) { bool found_anim = false; - Collada::Node *cn = collada.state.scene_map[E->get()]; + Collada::Node *cn = collada.state.scene_map[E]; if (cn->ignore_anim) { continue; } @@ -1665,7 +1665,7 @@ void ColladaImport::create_animation(int p_clip, bool p_import_value_tracks) { if (nm.bone >= 0) { if (found_anim) { - bones_with_animation[E->get()] = true; + bones_with_animation[E] = true; } } diff --git a/editor/import/resource_importer_scene.cpp b/editor/import/resource_importer_scene.cpp index 647eb1344b..4f666730d5 100644 --- a/editor/import/resource_importer_scene.cpp +++ b/editor/import/resource_importer_scene.cpp @@ -466,7 +466,7 @@ Node *ResourceImporterScene::_pre_fix_node(Node *p_node, Node *p_root, HashMap<R static const char *loop_strings[loop_string_count] = { "loop_mode", "loop", "cycle" }; for (int i = 0; i < loop_string_count; i++) { if (_teststr(animname, loop_strings[i])) { - anim->set_loop_mode(Animation::LoopMode::LOOP_LINEAR); + anim->set_loop_mode(Animation::LOOP_LINEAR); animname = _fixstr(animname, loop_strings[i]); Ref<AnimationLibrary> library = ap->get_animation_library(ap->find_animation_library(anim)); diff --git a/editor/plugins/animation_blend_tree_editor_plugin.cpp b/editor/plugins/animation_blend_tree_editor_plugin.cpp index 08df704f44..715b1725e0 100644 --- a/editor/plugins/animation_blend_tree_editor_plugin.cpp +++ b/editor/plugins/animation_blend_tree_editor_plugin.cpp @@ -603,8 +603,8 @@ bool AnimationNodeBlendTreeEditor::_update_filters(const Ref<AnimationNode> &ano HashMap<String, TreeItem *> parenthood; - for (RBSet<String>::Element *E = paths.front(); E; E = E->next()) { - NodePath path = E->get(); + for (const String &E : paths) { + NodePath path = E; TreeItem *ti = nullptr; String accum; for (int i = 0; i < path.get_name_count(); i++) { diff --git a/editor/plugins/animation_player_editor_plugin.cpp b/editor/plugins/animation_player_editor_plugin.cpp index 581dab84b4..57cf13d298 100644 --- a/editor/plugins/animation_player_editor_plugin.cpp +++ b/editor/plugins/animation_player_editor_plugin.cpp @@ -1338,7 +1338,7 @@ void AnimationPlayerEditor::_prepare_onion_layers_2() { float pos = cpos + step_off * anim->get_step(); - bool valid = anim->get_loop_mode() != Animation::LoopMode::LOOP_NONE || (pos >= 0 && pos <= anim->get_length()); + bool valid = anim->get_loop_mode() != Animation::LOOP_NONE || (pos >= 0 && pos <= anim->get_length()); onion.captures_valid.write[cidx] = valid; if (valid) { player->seek(pos, true); diff --git a/editor/plugins/node_3d_editor_plugin.cpp b/editor/plugins/node_3d_editor_plugin.cpp index 1d85e80331..10c63afa02 100644 --- a/editor/plugins/node_3d_editor_plugin.cpp +++ b/editor/plugins/node_3d_editor_plugin.cpp @@ -6710,8 +6710,8 @@ RBSet<RID> _get_physics_bodies_rid(Node *node) { rids.insert(pb->get_rid()); } RBSet<PhysicsBody3D *> child_nodes = _get_child_nodes<PhysicsBody3D>(node); - for (RBSet<PhysicsBody3D *>::Element *I = child_nodes.front(); I; I = I->next()) { - rids.insert(I->get()->get_rid()); + for (const PhysicsBody3D *I : child_nodes) { + rids.insert(I->get_rid()); } return rids; @@ -6755,8 +6755,8 @@ void Node3DEditor::snap_selected_nodes_to_floor() { } if (!found_valid_shape && vi.size()) { AABB aabb = vi.front()->get()->get_transformed_aabb(); - for (RBSet<VisualInstance3D *>::Element *I = vi.front(); I; I = I->next()) { - aabb.merge_with(I->get()->get_transformed_aabb()); + for (const VisualInstance3D *I : vi) { + aabb.merge_with(I->get_transformed_aabb()); } Vector3 size = aabb.size * Vector3(0.5, 0.0, 0.5); from = aabb.position + size; diff --git a/editor/plugins/root_motion_editor_plugin.cpp b/editor/plugins/root_motion_editor_plugin.cpp index b632b0d641..bebc0e9d54 100644 --- a/editor/plugins/root_motion_editor_plugin.cpp +++ b/editor/plugins/root_motion_editor_plugin.cpp @@ -83,8 +83,8 @@ void EditorPropertyRootMotion::_node_assign() { HashMap<String, TreeItem *> parenthood; - for (RBSet<String>::Element *E = paths.front(); E; E = E->next()) { - NodePath path = E->get(); + for (const String &E : paths) { + NodePath path = E; TreeItem *ti = nullptr; String accum; for (int i = 0; i < path.get_name_count(); i++) { diff --git a/editor/plugins/script_text_editor.cpp b/editor/plugins/script_text_editor.cpp index e7b4aa6b68..f666ac0649 100644 --- a/editor/plugins/script_text_editor.cpp +++ b/editor/plugins/script_text_editor.cpp @@ -693,8 +693,8 @@ void ScriptEditor::_update_modified_scripts_for_external_editor(Ref<Script> p_fo _find_changed_scripts_for_external_editor(base, base, scripts); } - for (RBSet<Ref<Script>>::Element *E = scripts.front(); E; E = E->next()) { - Ref<Script> script = E->get(); + for (const Ref<Script> &E : scripts) { + Ref<Script> script = E; if (p_for_script.is_valid() && p_for_script != script) { continue; @@ -1568,7 +1568,12 @@ void ScriptTextEditor::drop_data_fw(const Point2 &p_point, const Variant &p_data continue; } - String path = sn->get_path_to(node); + String path; + if (node->is_unique_name_in_owner()) { + path = "%" + node->get_name(); + } else { + path = sn->get_path_to(node); + } for (const String &segment : path.split("/")) { if (!segment.is_valid_identifier()) { path = path.c_escape().quote(quote_style); @@ -1586,7 +1591,7 @@ void ScriptTextEditor::drop_data_fw(const Point2 &p_point, const Variant &p_data } else { for (int i = 0; i < nodes.size(); i++) { if (i > 0) { - text_to_drop += ","; + text_to_drop += ", "; } NodePath np = nodes[i]; @@ -1595,8 +1600,19 @@ void ScriptTextEditor::drop_data_fw(const Point2 &p_point, const Variant &p_data continue; } - String path = sn->get_path_to(node); - text_to_drop += path.c_escape().quote(quote_style); + String path; + if (node->is_unique_name_in_owner()) { + path = "%" + node->get_name(); + } else { + path = sn->get_path_to(node); + } + for (const String &segment : path.split("/")) { + if (!segment.is_valid_identifier()) { + path = path.c_escape().quote(quote_style); + break; + } + } + text_to_drop += "$" + path; } } diff --git a/editor/plugins/sprite_frames_editor_plugin.cpp b/editor/plugins/sprite_frames_editor_plugin.cpp index cb8d59dfe4..8a40ffbe38 100644 --- a/editor/plugins/sprite_frames_editor_plugin.cpp +++ b/editor/plugins/sprite_frames_editor_plugin.cpp @@ -125,8 +125,8 @@ void SpriteFramesEditor::_sheet_preview_draw() { Color accent = get_theme_color("accent_color", "Editor"); - for (RBSet<int>::Element *E = frames_selected.front(); E; E = E->next()) { - const int idx = E->get(); + for (const int &E : frames_selected) { + const int idx = E; const int x = idx % frame_count.x; const int y = idx / frame_count.x; const Point2 pos = draw_offset + Point2(x, y) * (draw_frame_size + draw_sep); @@ -248,8 +248,8 @@ void SpriteFramesEditor::_sheet_add_frames() { int fc = frames->get_frame_count(edited_anim); - for (RBSet<int>::Element *E = frames_selected.front(); E; E = E->next()) { - int idx = E->get(); + for (const int &E : frames_selected) { + int idx = E; const Point2 frame_coords(idx % frame_count.x, idx / frame_count.x); Ref<AtlasTexture> at; diff --git a/editor/plugins/tiles/tile_data_editors.cpp b/editor/plugins/tiles/tile_data_editors.cpp index eda05b1005..244c718ebe 100644 --- a/editor/plugins/tiles/tile_data_editors.cpp +++ b/editor/plugins/tiles/tile_data_editors.cpp @@ -897,8 +897,8 @@ void TileDataDefaultEditor::forward_draw_over_atlas(TileAtlasView *p_tile_atlas_ } } - for (RBSet<TileMapCell>::Element *E = edited.front(); E; E = E->next()) { - Vector2i coords = E->get().get_atlas_coords(); + for (const TileMapCell &E : edited) { + Vector2i coords = E.get_atlas_coords(); p_canvas_item->draw_rect(p_tile_set_atlas_source->get_tile_texture_region(coords), selection_color, false); } p_canvas_item->draw_set_transform_matrix(Transform2D()); @@ -1755,8 +1755,8 @@ void TileDataTerrainsEditor::forward_draw_over_atlas(TileAtlasView *p_tile_atlas } } - for (RBSet<TileMapCell>::Element *E = edited.front(); E; E = E->next()) { - Vector2i coords = E->get().get_atlas_coords(); + for (const TileMapCell &E : edited) { + Vector2i coords = E.get_atlas_coords(); p_canvas_item->draw_rect(p_tile_set_atlas_source->get_tile_texture_region(coords), selection_color, false); } p_canvas_item->draw_set_transform_matrix(Transform2D()); @@ -1800,8 +1800,8 @@ void TileDataTerrainsEditor::forward_draw_over_atlas(TileAtlasView *p_tile_atlas p_canvas_item->draw_set_transform_matrix(p_transform); - for (RBSet<TileMapCell>::Element *E = edited.front(); E; E = E->next()) { - Vector2i coords = E->get().get_atlas_coords(); + for (const TileMapCell &E : edited) { + Vector2i coords = E.get_atlas_coords(); Rect2i texture_region = p_tile_set_atlas_source->get_tile_texture_region(coords); Vector2i position = texture_region.get_center() + p_tile_set_atlas_source->get_tile_effective_texture_offset(coords, 0); @@ -2133,15 +2133,15 @@ void TileDataTerrainsEditor::forward_painting_atlas_gui_input(TileAtlasView *p_t } } undo_redo->create_action(TTR("Painting Terrain Set")); - for (RBSet<TileMapCell>::Element *E = edited.front(); E; E = E->next()) { - Vector2i coords = E->get().get_atlas_coords(); + for (const TileMapCell &E : edited) { + Vector2i coords = E.get_atlas_coords(); TileData *tile_data = p_tile_set_atlas_source->get_tile_data(coords, 0); - undo_redo->add_undo_property(p_tile_set_atlas_source, vformat("%d:%d/%d/terrain_set", coords.x, coords.y, E->get().alternative_tile), tile_data->get_terrain_set()); - undo_redo->add_do_property(p_tile_set_atlas_source, vformat("%d:%d/%d/terrain_set", coords.x, coords.y, E->get().alternative_tile), drag_painted_value); + undo_redo->add_undo_property(p_tile_set_atlas_source, vformat("%d:%d/%d/terrain_set", coords.x, coords.y, E.alternative_tile), tile_data->get_terrain_set()); + undo_redo->add_do_property(p_tile_set_atlas_source, vformat("%d:%d/%d/terrain_set", coords.x, coords.y, E.alternative_tile), drag_painted_value); for (int i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) { TileSet::CellNeighbor bit = TileSet::CellNeighbor(i); if (tile_data->is_valid_peering_bit_terrain(bit)) { - undo_redo->add_undo_property(p_tile_set_atlas_source, vformat("%d:%d/%d/terrains_peering_bit/" + String(TileSet::CELL_NEIGHBOR_ENUM_TO_TEXT[i]), coords.x, coords.y, E->get().alternative_tile), tile_data->get_peering_bit_terrain(bit)); + undo_redo->add_undo_property(p_tile_set_atlas_source, vformat("%d:%d/%d/terrains_peering_bit/" + String(TileSet::CELL_NEIGHBOR_ENUM_TO_TEXT[i]), coords.x, coords.y, E.alternative_tile), tile_data->get_peering_bit_terrain(bit)); } } } @@ -2220,8 +2220,8 @@ void TileDataTerrainsEditor::forward_painting_atlas_gui_input(TileAtlasView *p_t mouse_pos_rect_polygon.push_back(Vector2(drag_start_pos.x, mb->get_position().y)); undo_redo->create_action(TTR("Painting Terrain")); - for (RBSet<TileMapCell>::Element *E = edited.front(); E; E = E->next()) { - Vector2i coords = E->get().get_atlas_coords(); + for (const TileMapCell &E : edited) { + Vector2i coords = E.get_atlas_coords(); TileData *tile_data = p_tile_set_atlas_source->get_tile_data(coords, 0); for (int i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) { @@ -2236,8 +2236,8 @@ void TileDataTerrainsEditor::forward_painting_atlas_gui_input(TileAtlasView *p_t } if (!Geometry2D::intersect_polygons(polygon, mouse_pos_rect_polygon).is_empty()) { // Draw bit. - undo_redo->add_do_property(p_tile_set_atlas_source, vformat("%d:%d/%d/terrains_peering_bit/" + String(TileSet::CELL_NEIGHBOR_ENUM_TO_TEXT[i]), coords.x, coords.y, E->get().alternative_tile), terrain); - undo_redo->add_undo_property(p_tile_set_atlas_source, vformat("%d:%d/%d/terrains_peering_bit/" + String(TileSet::CELL_NEIGHBOR_ENUM_TO_TEXT[i]), coords.x, coords.y, E->get().alternative_tile), tile_data->get_peering_bit_terrain(bit)); + undo_redo->add_do_property(p_tile_set_atlas_source, vformat("%d:%d/%d/terrains_peering_bit/" + String(TileSet::CELL_NEIGHBOR_ENUM_TO_TEXT[i]), coords.x, coords.y, E.alternative_tile), terrain); + undo_redo->add_undo_property(p_tile_set_atlas_source, vformat("%d:%d/%d/terrains_peering_bit/" + String(TileSet::CELL_NEIGHBOR_ENUM_TO_TEXT[i]), coords.x, coords.y, E.alternative_tile), tile_data->get_peering_bit_terrain(bit)); } } } diff --git a/editor/plugins/tiles/tile_map_editor.cpp b/editor/plugins/tiles/tile_map_editor.cpp index 12e1f10750..6c39244f80 100644 --- a/editor/plugins/tiles/tile_map_editor.cpp +++ b/editor/plugins/tiles/tile_map_editor.cpp @@ -501,8 +501,8 @@ bool TileMapEditorTilesPlugin::forward_canvas_gui_input(const Ref<InputEvent> &p if (!tile_map_selection.is_empty()) { tile_map_clipboard.instantiate(); TypedArray<Vector2i> coords_array; - for (RBSet<Vector2i>::Element *E = tile_map_selection.front(); E; E = E->next()) { - coords_array.push_back(E->get()); + for (const Vector2i &E : tile_map_selection) { + coords_array.push_back(E); } tile_map_clipboard = tile_map->get_pattern(tile_map_layer, coords_array); } @@ -511,9 +511,9 @@ bool TileMapEditorTilesPlugin::forward_canvas_gui_input(const Ref<InputEvent> &p // Delete selected tiles. if (!tile_map_selection.is_empty()) { undo_redo->create_action(TTR("Delete tiles")); - for (RBSet<Vector2i>::Element *E = tile_map_selection.front(); E; E = E->next()) { - undo_redo->add_do_method(tile_map, "set_cell", tile_map_layer, E->get(), TileSet::INVALID_SOURCE, TileSetSource::INVALID_ATLAS_COORDS, TileSetSource::INVALID_TILE_ALTERNATIVE); - undo_redo->add_undo_method(tile_map, "set_cell", tile_map_layer, E->get(), tile_map->get_cell_source_id(tile_map_layer, E->get()), tile_map->get_cell_atlas_coords(tile_map_layer, E->get()), tile_map->get_cell_alternative_tile(tile_map_layer, E->get())); + for (const Vector2i &E : tile_map_selection) { + undo_redo->add_do_method(tile_map, "set_cell", tile_map_layer, E, TileSet::INVALID_SOURCE, TileSetSource::INVALID_ATLAS_COORDS, TileSetSource::INVALID_TILE_ALTERNATIVE); + undo_redo->add_undo_method(tile_map, "set_cell", tile_map_layer, E, tile_map->get_cell_source_id(tile_map_layer, E), tile_map->get_cell_atlas_coords(tile_map_layer, E), tile_map->get_cell_alternative_tile(tile_map_layer, E)); } undo_redo->add_undo_method(this, "_set_tile_map_selection", _get_tile_map_selection()); tile_map_selection.clear(); @@ -542,9 +542,9 @@ bool TileMapEditorTilesPlugin::forward_canvas_gui_input(const Ref<InputEvent> &p // Delete selected tiles. if (!tile_map_selection.is_empty()) { undo_redo->create_action(TTR("Delete tiles")); - for (RBSet<Vector2i>::Element *E = tile_map_selection.front(); E; E = E->next()) { - undo_redo->add_do_method(tile_map, "set_cell", tile_map_layer, E->get(), TileSet::INVALID_SOURCE, TileSetSource::INVALID_ATLAS_COORDS, TileSetSource::INVALID_TILE_ALTERNATIVE); - undo_redo->add_undo_method(tile_map, "set_cell", tile_map_layer, E->get(), tile_map->get_cell_source_id(tile_map_layer, E->get()), tile_map->get_cell_atlas_coords(tile_map_layer, E->get()), tile_map->get_cell_alternative_tile(tile_map_layer, E->get())); + for (const Vector2i &E : tile_map_selection) { + undo_redo->add_do_method(tile_map, "set_cell", tile_map_layer, E, TileSet::INVALID_SOURCE, TileSetSource::INVALID_ATLAS_COORDS, TileSetSource::INVALID_TILE_ALTERNATIVE); + undo_redo->add_undo_method(tile_map, "set_cell", tile_map_layer, E, tile_map->get_cell_source_id(tile_map_layer, E), tile_map->get_cell_atlas_coords(tile_map_layer, E), tile_map->get_cell_alternative_tile(tile_map_layer, E)); } undo_redo->add_undo_method(this, "_set_tile_map_selection", _get_tile_map_selection()); tile_map_selection.clear(); @@ -628,8 +628,8 @@ bool TileMapEditorTilesPlugin::forward_canvas_gui_input(const Ref<InputEvent> &p _update_selection_pattern_from_tilemap_selection(); // Make sure the pattern is up to date before moving. drag_type = DRAG_TYPE_MOVE; drag_modified.clear(); - for (RBSet<Vector2i>::Element *E = tile_map_selection.front(); E; E = E->next()) { - Vector2i coords = E->get(); + for (const Vector2i &E : tile_map_selection) { + Vector2i coords = E; drag_modified.insert(coords, tile_map->get_cell(tile_map_layer, coords)); tile_map->set_cell(tile_map_layer, coords, TileSet::INVALID_SOURCE, TileSetSource::INVALID_ATLAS_COORDS, TileSetSource::INVALID_TILE_ALTERNATIVE); } @@ -785,8 +785,8 @@ void TileMapEditorTilesPlugin::forward_canvas_draw_over_viewport(Control *p_over if (!tile_map_selection.is_empty()) { top_left = tile_map_selection.front()->get(); } - for (RBSet<Vector2i>::Element *E = tile_map_selection.front(); E; E = E->next()) { - top_left = top_left.min(E->get()); + for (const Vector2i &E : tile_map_selection) { + top_left = top_left.min(E); } Vector2i offset = drag_start_mouse_pos - tile_map->map_to_world(top_left); offset = tile_map->world_to_map(drag_last_mouse_pos - offset) - tile_map->world_to_map(drag_start_mouse_pos - offset); @@ -1278,8 +1278,8 @@ void TileMapEditorTilesPlugin::_stop_dragging() { if (!tile_map_selection.is_empty()) { top_left = tile_map_selection.front()->get(); } - for (RBSet<Vector2i>::Element *E = tile_map_selection.front(); E; E = E->next()) { - top_left = top_left.min(E->get()); + for (const Vector2i &E : tile_map_selection) { + top_left = top_left.min(E); } // Get the offset from the mouse. @@ -1534,8 +1534,8 @@ void TileMapEditorTilesPlugin::_update_selection_pattern_from_tilemap_selection( selection_pattern.instantiate(); TypedArray<Vector2i> coords_array; - for (RBSet<Vector2i>::Element *E = tile_map_selection.front(); E; E = E->next()) { - coords_array.push_back(E->get()); + for (const Vector2i &E : tile_map_selection) { + coords_array.push_back(E); } selection_pattern = tile_map->get_pattern(tile_map_layer, coords_array); } @@ -1559,8 +1559,8 @@ void TileMapEditorTilesPlugin::_update_selection_pattern_from_tileset_tiles_sele // Group per source. HashMap<int, List<const TileMapCell *>> per_source; - for (RBSet<TileMapCell>::Element *E = tile_set_selection.front(); E; E = E->next()) { - per_source[E->get().source_id].push_back(&(E->get())); + for (const TileMapCell &E : tile_set_selection) { + per_source[E.source_id].push_back(&(E)); } int vertical_offset = 0; @@ -1680,14 +1680,14 @@ void TileMapEditorTilesPlugin::_tile_atlas_control_draw() { // Draw the selection. Color grid_color = EditorSettings::get_singleton()->get("editors/tiles_editor/grid_color"); Color selection_color = Color().from_hsv(Math::fposmod(grid_color.get_h() + 0.5, 1.0), grid_color.get_s(), grid_color.get_v(), 1.0); - for (RBSet<TileMapCell>::Element *E = tile_set_selection.front(); E; E = E->next()) { - if (E->get().source_id == source_id && E->get().alternative_tile == 0) { - for (int frame = 0; frame < atlas->get_tile_animation_frames_count(E->get().get_atlas_coords()); frame++) { + for (const TileMapCell &E : tile_set_selection) { + if (E.source_id == source_id && E.alternative_tile == 0) { + for (int frame = 0; frame < atlas->get_tile_animation_frames_count(E.get_atlas_coords()); frame++) { Color color = selection_color; if (frame > 0) { color.a *= 0.3; } - tile_atlas_control->draw_rect(atlas->get_tile_texture_region(E->get().get_atlas_coords(), frame), color, false); + tile_atlas_control->draw_rect(atlas->get_tile_texture_region(E.get_atlas_coords(), frame), color, false); } } } @@ -1721,8 +1721,8 @@ void TileMapEditorTilesPlugin::_tile_atlas_control_draw() { } } Color selection_rect_color = selection_color.lightened(0.2); - for (RBSet<Vector2i>::Element *E = to_draw.front(); E; E = E->next()) { - tile_atlas_control->draw_rect(atlas->get_tile_texture_region(E->get()), selection_rect_color, false); + for (const Vector2i &E : to_draw) { + tile_atlas_control->draw_rect(atlas->get_tile_texture_region(E), selection_rect_color, false); } } } @@ -1868,9 +1868,9 @@ void TileMapEditorTilesPlugin::_tile_alternatives_control_draw() { } // Draw the selection. - for (RBSet<TileMapCell>::Element *E = tile_set_selection.front(); E; E = E->next()) { - if (E->get().source_id == source_id && E->get().get_atlas_coords() != TileSetSource::INVALID_ATLAS_COORDS && E->get().alternative_tile > 0) { - Rect2i rect = tile_atlas_view->get_alternative_tile_rect(E->get().get_atlas_coords(), E->get().alternative_tile); + for (const TileMapCell &E : tile_set_selection) { + if (E.source_id == source_id && E.get_atlas_coords() != TileSetSource::INVALID_ATLAS_COORDS && E.alternative_tile > 0) { + Rect2i rect = tile_atlas_view->get_alternative_tile_rect(E.get_atlas_coords(), E.alternative_tile); if (rect != Rect2i()) { alternative_tiles_control->draw_rect(rect, Color(0.2, 0.2, 1.0), false); } @@ -1972,8 +1972,8 @@ void TileMapEditorTilesPlugin::_set_tile_map_selection(const TypedArray<Vector2i TypedArray<Vector2i> TileMapEditorTilesPlugin::_get_tile_map_selection() const { TypedArray<Vector2i> output; - for (RBSet<Vector2i>::Element *E = tile_map_selection.front(); E; E = E->next()) { - output.push_back(E->get()); + for (const Vector2i &E : tile_map_selection) { + output.push_back(E); } return output; } @@ -2341,8 +2341,8 @@ HashMap<Vector2i, TileMapCell> TileMapEditorTerrainsPlugin::_draw_terrains(const TileSet::TerrainsPattern terrains_pattern = E_to_paint.value; RBSet<TileMap::TerrainConstraint> cell_constraints = tile_map->get_terrain_constraints_from_added_tile(coords, p_terrain_set, terrains_pattern); - for (RBSet<TileMap::TerrainConstraint>::Element *E = cell_constraints.front(); E; E = E->next()) { - added_tiles_constraints_set.insert(E->get()); + for (const TileMap::TerrainConstraint &E : cell_constraints) { + added_tiles_constraints_set.insert(E); } } @@ -2377,18 +2377,18 @@ HashMap<Vector2i, TileMapCell> TileMapEditorTerrainsPlugin::_draw_terrains(const // Filter the sources to make sure they are in the potential_to_replace. RBMap<TileMap::TerrainConstraint, RBSet<Vector2i>> per_constraint_tiles; - for (RBSet<TileMap::TerrainConstraint>::Element *E = removed_cells_constraints_set.front(); E; E = E->next()) { - HashMap<Vector2i, TileSet::CellNeighbor> sources_of_constraint = E->get().get_overlapping_coords_and_peering_bits(); + for (const TileMap::TerrainConstraint &E : removed_cells_constraints_set) { + HashMap<Vector2i, TileSet::CellNeighbor> sources_of_constraint = E.get_overlapping_coords_and_peering_bits(); for (const KeyValue<Vector2i, TileSet::CellNeighbor> &E_source_tile_of_constraint : sources_of_constraint) { if (potential_to_replace.has(E_source_tile_of_constraint.key)) { - per_constraint_tiles[E->get()].insert(E_source_tile_of_constraint.key); + per_constraint_tiles[E].insert(E_source_tile_of_constraint.key); } } } to_replace_modified = false; - for (RBSet<TileMap::TerrainConstraint>::Element *E = added_tiles_constraints_set.front(); E; E = E->next()) { - TileMap::TerrainConstraint c = E->get(); + for (const TileMap::TerrainConstraint &E : added_tiles_constraints_set) { + TileMap::TerrainConstraint c = E; // Check if we have a conflict in constraints. if (removed_cells_constraints_set.has(c) && removed_cells_constraints_set.find(c)->get().get_terrain() != c.get_terrain()) { // If we do, we search for a neighbor to remove. @@ -2409,8 +2409,8 @@ HashMap<Vector2i, TileMapCell> TileMapEditorTerrainsPlugin::_draw_terrains(const // Combine all constraints together. RBSet<TileMap::TerrainConstraint> constraints = removed_cells_constraints_set; - for (RBSet<TileMap::TerrainConstraint>::Element *E = added_tiles_constraints_set.front(); E; E = E->next()) { - constraints.insert(E->get()); + for (const TileMap::TerrainConstraint &E : added_tiles_constraints_set) { + constraints.insert(E); } // Remove the central tiles from the ones to replace. @@ -3194,22 +3194,22 @@ void TileMapEditorTerrainsPlugin::_update_tiles_list() { // Sort the items in a map by the number of corresponding terrains. RBMap<int, RBSet<TileSet::TerrainsPattern>> sorted; - for (RBSet<TileSet::TerrainsPattern>::Element *E = per_terrain_terrains_patterns[selected_terrain_set][selected_terrain_id].front(); E; E = E->next()) { + for (const TileSet::TerrainsPattern &E : per_terrain_terrains_patterns[selected_terrain_set][selected_terrain_id]) { // Count the number of matching sides/terrains. int count = 0; for (int i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) { TileSet::CellNeighbor bit = TileSet::CellNeighbor(i); - if (tile_set->is_valid_peering_bit_terrain(selected_terrain_set, bit) && E->get().get_terrain(bit) == selected_terrain_id) { + if (tile_set->is_valid_peering_bit_terrain(selected_terrain_set, bit) && E.get_terrain(bit) == selected_terrain_id) { count++; } } - sorted[count].insert(E->get()); + sorted[count].insert(E); } for (RBMap<int, RBSet<TileSet::TerrainsPattern>>::Element *E_set = sorted.back(); E_set; E_set = E_set->prev()) { - for (RBSet<TileSet::TerrainsPattern>::Element *E = E_set->get().front(); E; E = E->next()) { - TileSet::TerrainsPattern terrains_pattern = E->get(); + for (const TileSet::TerrainsPattern &E : E_set->get()) { + TileSet::TerrainsPattern terrains_pattern = E; // Get the icon. Ref<Texture2D> icon; diff --git a/editor/plugins/tiles/tile_set_atlas_source_editor.cpp b/editor/plugins/tiles/tile_set_atlas_source_editor.cpp index dc3fa87565..b87aedcf60 100644 --- a/editor/plugins/tiles/tile_set_atlas_source_editor.cpp +++ b/editor/plugins/tiles/tile_set_atlas_source_editor.cpp @@ -270,9 +270,9 @@ bool TileSetAtlasSourceEditor::AtlasTileProxyObject::_set(const StringName &p_na // Other properties. bool any_valid = false; - for (RBSet<TileSelection>::Element *E = tiles.front(); E; E = E->next()) { - const Vector2i &coords = E->get().tile; - const int &alternative = E->get().alternative; + for (const TileSelection &E : tiles) { + const Vector2i &coords = E.tile; + const int &alternative = E.alternative; bool valid = false; TileData *tile_data = tile_set_atlas_source->get_tile_data(coords, alternative); @@ -354,11 +354,11 @@ bool TileSetAtlasSourceEditor::AtlasTileProxyObject::_get(const StringName &p_na } } - for (RBSet<TileSelection>::Element *E = tiles.front(); E; E = E->next()) { + for (const TileSelection &E : tiles) { // Return the first tile with a property matching the name. // Note: It's a little bit annoying, but the behavior is the same the one in MultiNodeEdit. - const Vector2i &coords = E->get().tile; - const int &alternative = E->get().alternative; + const Vector2i &coords = E.tile; + const int &alternative = E.alternative; TileData *tile_data = tile_set_atlas_source->get_tile_data(coords, alternative); ERR_FAIL_COND_V(!tile_data, false); @@ -429,9 +429,9 @@ void TileSetAtlasSourceEditor::AtlasTileProxyObject::_get_property_list(List<Pro RBMap<PropertyId, PLData> usage; List<PLData *> data_list; - for (RBSet<TileSelection>::Element *E = tiles.front(); E; E = E->next()) { - const Vector2i &coords = E->get().tile; - const int &alternative = E->get().alternative; + for (const TileSelection &E : tiles) { + const Vector2i &coords = E.tile; + const int &alternative = E.alternative; TileData *tile_data = tile_set_atlas_source->get_tile_data(coords, alternative); ERR_FAIL_COND(!tile_data); @@ -476,15 +476,15 @@ void TileSetAtlasSourceEditor::AtlasTileProxyObject::_get_property_list(List<Pro void TileSetAtlasSourceEditor::AtlasTileProxyObject::edit(TileSetAtlasSource *p_tile_set_atlas_source, RBSet<TileSelection> p_tiles) { ERR_FAIL_COND(!p_tile_set_atlas_source); ERR_FAIL_COND(p_tiles.is_empty()); - for (RBSet<TileSelection>::Element *E = p_tiles.front(); E; E = E->next()) { - ERR_FAIL_COND(E->get().tile == TileSetSource::INVALID_ATLAS_COORDS); - ERR_FAIL_COND(E->get().alternative < 0); + for (const TileSelection &E : p_tiles) { + ERR_FAIL_COND(E.tile == TileSetSource::INVALID_ATLAS_COORDS); + ERR_FAIL_COND(E.alternative < 0); } // Disconnect to changes. - for (RBSet<TileSelection>::Element *E = tiles.front(); E; E = E->next()) { - const Vector2i &coords = E->get().tile; - const int &alternative = E->get().alternative; + for (const TileSelection &E : tiles) { + const Vector2i &coords = E.tile; + const int &alternative = E.alternative; if (tile_set_atlas_source && tile_set_atlas_source->has_tile(coords) && tile_set_atlas_source->has_alternative_tile(coords, alternative)) { TileData *tile_data = tile_set_atlas_source->get_tile_data(coords, alternative); @@ -498,9 +498,9 @@ void TileSetAtlasSourceEditor::AtlasTileProxyObject::edit(TileSetAtlasSource *p_ tiles = RBSet<TileSelection>(p_tiles); // Connect to changes. - for (RBSet<TileSelection>::Element *E = p_tiles.front(); E; E = E->next()) { - const Vector2i &coords = E->get().tile; - const int &alternative = E->get().alternative; + for (const TileSelection &E : p_tiles) { + const Vector2i &coords = E.tile; + const int &alternative = E.alternative; if (tile_set_atlas_source->has_tile(coords) && tile_set_atlas_source->has_alternative_tile(coords, alternative)) { TileData *tile_data = tile_set_atlas_source->get_tile_data(coords, alternative); @@ -1313,9 +1313,9 @@ void TileSetAtlasSourceEditor::_end_dragging() { switch (drag_type) { case DRAG_TYPE_CREATE_TILES: undo_redo->create_action(TTR("Create tiles")); - for (RBSet<Vector2i>::Element *E = drag_modified_tiles.front(); E; E = E->next()) { - undo_redo->add_do_method(tile_set_atlas_source, "create_tile", E->get()); - undo_redo->add_undo_method(tile_set_atlas_source, "remove_tile", E->get()); + for (const Vector2i &E : drag_modified_tiles) { + undo_redo->add_do_method(tile_set_atlas_source, "create_tile", E); + undo_redo->add_undo_method(tile_set_atlas_source, "remove_tile", E); } undo_redo->commit_action(false); break; @@ -1330,8 +1330,8 @@ void TileSetAtlasSourceEditor::_end_dragging() { tile_set_atlas_source->get_property_list(&list); HashMap<Vector2i, List<const PropertyInfo *>> per_tile = _group_properties_per_tiles(list, tile_set_atlas_source); undo_redo->create_action(TTR("Remove tiles")); - for (RBSet<Vector2i>::Element *E = drag_modified_tiles.front(); E; E = E->next()) { - Vector2i coords = E->get(); + for (const Vector2i &E : drag_modified_tiles) { + Vector2i coords = E; undo_redo->add_do_method(tile_set_atlas_source, "remove_tile", coords); undo_redo->add_undo_method(tile_set_atlas_source, "create_tile", coords); if (per_tile.has(coords)) { @@ -1384,8 +1384,8 @@ void TileSetAtlasSourceEditor::_end_dragging() { undo_redo->create_action(TTR("Remove tiles")); undo_redo->add_do_method(this, "_set_selection_from_array", Array()); - for (RBSet<Vector2i>::Element *E = to_delete.front(); E; E = E->next()) { - Vector2i coords = E->get(); + for (const Vector2i &E : to_delete) { + Vector2i coords = E; undo_redo->add_do_method(tile_set_atlas_source, "remove_tile", coords); undo_redo->add_undo_method(tile_set_atlas_source, "create_tile", coords); if (per_tile.has(coords)) { @@ -1549,8 +1549,8 @@ void TileSetAtlasSourceEditor::_menu_option(int p_option) { // Remove tiles RBSet<Vector2i> removed; - for (RBSet<TileSelection>::Element *E = selection.front(); E; E = E->next()) { - TileSelection selected = E->get(); + for (const TileSelection &E : selection) { + TileSelection selected = E; if (selected.alternative == 0) { // Remove a tile. undo_redo->add_do_method(tile_set_atlas_source, "remove_tile", selected.tile); @@ -1569,8 +1569,8 @@ void TileSetAtlasSourceEditor::_menu_option(int p_option) { } // Remove alternatives - for (RBSet<TileSelection>::Element *E = selection.front(); E; E = E->next()) { - TileSelection selected = E->get(); + for (const TileSelection &E : selection) { + TileSelection selected = E; if (selected.alternative > 0 && !removed.has(selected.tile)) { // Remove an alternative tile. undo_redo->add_do_method(tile_set_atlas_source, "remove_alternative_tile", selected.tile, selected.alternative); @@ -1608,13 +1608,13 @@ void TileSetAtlasSourceEditor::_menu_option(int p_option) { case TILE_CREATE_ALTERNATIVE: { undo_redo->create_action(TTR("Create tile alternatives")); Array array; - for (RBSet<TileSelection>::Element *E = selection.front(); E; E = E->next()) { - if (E->get().alternative == 0) { - int next_id = tile_set_atlas_source->get_next_alternative_tile_id(E->get().tile); - undo_redo->add_do_method(tile_set_atlas_source, "create_alternative_tile", E->get().tile, next_id); - array.push_back(E->get().tile); + for (const TileSelection &E : selection) { + if (E.alternative == 0) { + int next_id = tile_set_atlas_source->get_next_alternative_tile_id(E.tile); + undo_redo->add_do_method(tile_set_atlas_source, "create_alternative_tile", E.tile, next_id); + array.push_back(E.tile); array.push_back(next_id); - undo_redo->add_undo_method(tile_set_atlas_source, "remove_alternative_tile", E->get().tile, next_id); + undo_redo->add_undo_method(tile_set_atlas_source, "remove_alternative_tile", E.tile, next_id); } } undo_redo->add_do_method(this, "_set_selection_from_array", array); @@ -1658,9 +1658,9 @@ void TileSetAtlasSourceEditor::_set_selection_from_array(Array p_selection) { Array TileSetAtlasSourceEditor::_get_selection_as_array() { Array output; - for (RBSet<TileSelection>::Element *E = selection.front(); E; E = E->next()) { - output.push_back(E->get().tile); - output.push_back(E->get().alternative); + for (const TileSelection &E : selection) { + output.push_back(E.tile); + output.push_back(E.alternative); } return output; } @@ -1672,8 +1672,8 @@ void TileSetAtlasSourceEditor::_tile_atlas_control_draw() { // Draw the selected tile. if (tools_button_group->get_pressed_button() == tool_select_button) { - for (RBSet<TileSelection>::Element *E = selection.front(); E; E = E->next()) { - TileSelection selected = E->get(); + for (const TileSelection &E : selection) { + TileSelection selected = E; if (selected.alternative == 0) { // Draw the rect. for (int frame = 0; frame < tile_set_atlas_source->get_tile_animation_frames_count(selected.tile); frame++) { @@ -1722,9 +1722,9 @@ void TileSetAtlasSourceEditor::_tile_atlas_control_draw() { if (drag_type == DRAG_TYPE_REMOVE_TILES) { // Draw the tiles to be removed. - for (RBSet<Vector2i>::Element *E = drag_modified_tiles.front(); E; E = E->next()) { - for (int frame = 0; frame < tile_set_atlas_source->get_tile_animation_frames_count(E->get()); frame++) { - tile_atlas_control->draw_rect(tile_set_atlas_source->get_tile_texture_region(E->get(), frame), Color(0.0, 0.0, 0.0), false); + for (const Vector2i &E : drag_modified_tiles) { + for (int frame = 0; frame < tile_set_atlas_source->get_tile_animation_frames_count(E); frame++) { + tile_atlas_control->draw_rect(tile_set_atlas_source->get_tile_texture_region(E, frame), Color(0.0, 0.0, 0.0), false); } } } else if (drag_type == DRAG_TYPE_RECT_SELECT || drag_type == DRAG_TYPE_REMOVE_TILES_USING_RECT) { @@ -1749,8 +1749,8 @@ void TileSetAtlasSourceEditor::_tile_atlas_control_draw() { } } - for (RBSet<Vector2i>::Element *E = to_paint.front(); E; E = E->next()) { - Vector2i coords = E->get(); + for (const Vector2i &E : to_paint) { + Vector2i coords = E; tile_atlas_control->draw_rect(tile_set_atlas_source->get_tile_texture_region(coords), color, false); } } else if (drag_type == DRAG_TYPE_CREATE_TILES_USING_RECT) { @@ -1837,19 +1837,19 @@ void TileSetAtlasSourceEditor::_tile_atlas_control_unscaled_draw() { // Draw the selection on top of other. if (tools_button_group->get_pressed_button() == tool_select_button) { - for (RBSet<TileSelection>::Element *E = selection.front(); E; E = E->next()) { - if (E->get().alternative != 0) { + for (const TileSelection &E : selection) { + if (E.alternative != 0) { continue; } - Rect2i texture_region = tile_set_atlas_source->get_tile_texture_region(E->get().tile); - Vector2i position = texture_region.get_center() + tile_set_atlas_source->get_tile_effective_texture_offset(E->get().tile, 0); + Rect2i texture_region = tile_set_atlas_source->get_tile_texture_region(E.tile); + Vector2i position = texture_region.get_center() + tile_set_atlas_source->get_tile_effective_texture_offset(E.tile, 0); Transform2D xform = tile_atlas_control->get_parent_control()->get_transform(); xform.translate(position); TileMapCell cell; cell.source_id = tile_set_atlas_source_id; - cell.set_atlas_coords(E->get().tile); + cell.set_atlas_coords(E.tile); cell.alternative_tile = 0; current_tile_data_editor->draw_over_tile(tile_atlas_control_unscaled, xform, cell, true); } @@ -1962,8 +1962,8 @@ void TileSetAtlasSourceEditor::_tile_alternatives_control_draw() { } // Draw selected tile. - for (RBSet<TileSelection>::Element *E = selection.front(); E; E = E->next()) { - TileSelection selected = E->get(); + for (const TileSelection &E : selection) { + TileSelection selected = E; if (selected.alternative >= 1) { Rect2i rect = tile_atlas_view->get_alternative_tile_rect(selected.tile, selected.alternative); if (rect != Rect2i()) { @@ -2005,11 +2005,11 @@ void TileSetAtlasSourceEditor::_tile_alternatives_control_unscaled_draw() { // Draw the selection on top of other. if (tools_button_group->get_pressed_button() == tool_select_button) { - for (RBSet<TileSelection>::Element *E = selection.front(); E; E = E->next()) { - if (E->get().alternative == 0) { + for (const TileSelection &E : selection) { + if (E.alternative == 0) { continue; } - Rect2i rect = tile_atlas_view->get_alternative_tile_rect(E->get().tile, E->get().alternative); + Rect2i rect = tile_atlas_view->get_alternative_tile_rect(E.tile, E.alternative); Vector2 position = rect.get_center(); Transform2D xform = alternative_tiles_control->get_parent_control()->get_transform(); @@ -2017,8 +2017,8 @@ void TileSetAtlasSourceEditor::_tile_alternatives_control_unscaled_draw() { TileMapCell cell; cell.source_id = tile_set_atlas_source_id; - cell.set_atlas_coords(E->get().tile); - cell.alternative_tile = E->get().alternative; + cell.set_atlas_coords(E.tile); + cell.alternative_tile = E.alternative; current_tile_data_editor->draw_over_tile(alternative_tiles_control_unscaled, xform, cell, true); } } diff --git a/editor/plugins/visual_shader_editor_plugin.cpp b/editor/plugins/visual_shader_editor_plugin.cpp index c5669f3eda..0595357926 100644 --- a/editor/plugins/visual_shader_editor_plugin.cpp +++ b/editor/plugins/visual_shader_editor_plugin.cpp @@ -3215,8 +3215,8 @@ void VisualShaderEditor::_convert_constants_to_uniforms(bool p_vice_versa) { const RBSet<int> ¤t_set = p_vice_versa ? selected_uniforms : selected_constants; RBSet<String> deleted_names; - for (RBSet<int>::Element *E = current_set.front(); E; E = E->next()) { - int node_id = E->get(); + for (const int &E : current_set) { + int node_id = E; Ref<VisualShaderNode> node = visual_shader->get_node(type_id, node_id); bool caught = false; Variant var; diff --git a/editor/pot_generator.cpp b/editor/pot_generator.cpp index c46a4f5a86..bfc58db2ad 100644 --- a/editor/pot_generator.cpp +++ b/editor/pot_generator.cpp @@ -46,8 +46,8 @@ void POTGenerator::_print_all_translation_strings() { print_line("msgid: " + E.key()); print_line("context: " + v_md[i].ctx); print_line("msgid_plural: " + v_md[i].plural); - for (RBSet<String>::Element *F = v_md[i].locations.front(); F; F = F->next()) { - print_line("location: " + F->get()); + for (const String &F : v_md[i].locations) { + print_line("location: " + F); } } } @@ -133,8 +133,8 @@ void POTGenerator::_write_to_pot(const String &p_file) { file->store_line(""); // Write file locations. - for (RBSet<String>::Element *E = locations.front(); E; E = E->next()) { - file->store_line("#: " + E->get().trim_prefix("res://")); + for (const String &E : locations) { + file->store_line("#: " + E.trim_prefix("res://")); } // Write context. diff --git a/editor/project_manager.cpp b/editor/project_manager.cpp index d74cfe4ec0..967cb5a932 100644 --- a/editor/project_manager.cpp +++ b/editor/project_manager.cpp @@ -2099,8 +2099,8 @@ void ProjectManager::_open_selected_projects() { const RBSet<String> &selected_list = _project_list->get_selected_project_keys(); - for (const RBSet<String>::Element *E = selected_list.front(); E; E = E->next()) { - const String &selected = E->get(); + for (const String &E : selected_list) { + const String &selected = E; String path = EditorSettings::get_singleton()->get("projects/" + selected); String conf = path.plus_file("project.godot"); @@ -2327,8 +2327,8 @@ void ProjectManager::_rename_project() { return; } - for (RBSet<String>::Element *E = selected_list.front(); E; E = E->next()) { - const String &selected = E->get(); + for (const String &E : selected_list) { + const String &selected = E; String path = EditorSettings::get_singleton()->get("projects/" + selected); npdialog->set_project_path(path); npdialog->set_mode(ProjectDialog::MODE_RENAME); @@ -2412,8 +2412,8 @@ void ProjectManager::_files_dropped(PackedStringArray p_files) { } if (folders_set.size() > 0) { PackedStringArray folders; - for (RBSet<String>::Element *E = folders_set.front(); E; E = E->next()) { - folders.push_back(E->get()); + for (const String &E : folders_set) { + folders.push_back(E); } bool confirm = true; diff --git a/editor/project_settings_editor.cpp b/editor/project_settings_editor.cpp index bd0affbcc3..5367306f1a 100644 --- a/editor/project_settings_editor.cpp +++ b/editor/project_settings_editor.cpp @@ -292,8 +292,8 @@ void ProjectSettingsEditor::_add_feature_overrides() { feature_box->clear(); feature_box->add_item(TTR("(All)"), 0); // So it is always on top. int id = 1; - for (RBSet<String>::Element *E = presets.front(); E; E = E->next()) { - feature_box->add_item(E->get(), id++); + for (const String &E : presets) { + feature_box->add_item(E, id++); } } diff --git a/editor/property_editor.cpp b/editor/property_editor.cpp index 71cdcc2580..d541b26cc9 100644 --- a/editor/property_editor.cpp +++ b/editor/property_editor.cpp @@ -143,8 +143,8 @@ void CustomPropertyEditor::_menu_option(int p_which) { } file->clear_filters(); - for (RBSet<String>::Element *E = valid_extensions.front(); E; E = E->next()) { - file->add_filter("*." + E->get() + " ; " + E->get().to_upper()); + for (const String &E : valid_extensions) { + file->add_filter("*." + E + " ; " + E.to_upper()); } file->popup_file_dialog(); @@ -890,8 +890,8 @@ bool CustomPropertyEditor::edit(Object *p_owner, const String &p_name, Variant:: E = E->next(); } - for (RBSet<String>::Element *j = valid_inheritors.front(); j; j = j->next()) { - const String &t = j->get(); + for (const String &j : valid_inheritors) { + const String &t = j; bool is_custom_resource = false; Ref<Texture2D> icon; diff --git a/editor/translations/af.po b/editor/translations/af.po index 679e80af7c..0e4d1e19ff 100644 --- a/editor/translations/af.po +++ b/editor/translations/af.po @@ -81,11 +81,12 @@ msgstr "Afhanklikheid Bewerker" msgid "Screen Orientation" msgstr "Opnoemings" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "" @@ -93,7 +94,7 @@ msgstr "" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Fullscreen" msgstr "" @@ -105,7 +106,7 @@ msgstr "" msgid "Minimized" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -119,10 +120,11 @@ msgstr "" msgid "Position" msgstr "Skep Nuwe" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -602,6 +604,41 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +#, fuzzy +msgid "Display" +msgstr "Vervang Alles" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +msgid "Height" +msgstr "" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Width" +msgstr "Lineêr" + +#: core/project_settings.cpp +msgid "Test Height" +msgstr "" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1197,7 +1234,7 @@ msgstr "" msgid "Update Mode (How this property is set)" msgstr "" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "" @@ -6032,6 +6069,11 @@ msgstr "" msgid "Flat" msgstr "" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "Skep Intekening" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "" @@ -16008,40 +16050,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -#, fuzzy -msgid "Display" -msgstr "Vervang Alles" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -msgid "Height" -msgstr "" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -#, fuzzy -msgid "Test Width" -msgstr "Lineêr" - -#: main/main.cpp -msgid "Test Height" -msgstr "" - #: main/main.cpp msgid "DPI" msgstr "" @@ -20271,6 +20279,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp #, fuzzy msgid "Build Mode" @@ -21961,7 +21974,7 @@ msgstr "" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -24088,6 +24101,11 @@ msgstr "Wissel Modus" #: scene/main/node.cpp #, fuzzy +msgid "Physics Interpolation Mode" +msgstr "Opnoemings" + +#: scene/main/node.cpp +#, fuzzy msgid "Display Folded" msgstr "Vervang Alles" @@ -24119,11 +24137,6 @@ msgstr "" msgid "Process Priority" msgstr "Wissel Modus" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "Opnoemings" - #: scene/main/scene_tree.cpp scene/main/timer.cpp msgid "Time Left" msgstr "" @@ -24788,6 +24801,11 @@ msgstr "" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "Opnoemings:" + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "Hernoem AutoLaai" @@ -25571,6 +25589,10 @@ msgid "Distance Field" msgstr "Installeer" #: scene/resources/gradient.cpp +msgid "Raw Data" +msgstr "" + +#: scene/resources/gradient.cpp msgid "Offsets" msgstr "" diff --git a/editor/translations/ar.po b/editor/translations/ar.po index afb59d8ccc..19fb3809dd 100644 --- a/editor/translations/ar.po +++ b/editor/translations/ar.po @@ -139,12 +139,13 @@ msgstr "ØØ¬Ù… الخطوط:" msgid "Screen Orientation" msgstr "Ù…ÙØ´ØºÙ„ الشاشة." -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp #, fuzzy msgid "Window" msgstr "Ù†Ø§ÙØ°Ø© جديدة" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp #, fuzzy msgid "Borderless" msgstr "البكسلات المØÙŠØ·ÙŠØ© (Ø§Ù„ØØ¯ÙˆØ¯ÙŠØ©)" @@ -153,7 +154,7 @@ msgstr "البكسلات المØÙŠØ·ÙŠØ© (Ø§Ù„ØØ¯ÙˆØ¯ÙŠØ©)" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp #, fuzzy msgid "Fullscreen" msgstr "ØªÙØ¹ÙŠÙ„/إلغاء وضع الشاشة الكاملة" @@ -167,7 +168,7 @@ msgstr "" msgid "Minimized" msgstr "الشروع" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -181,10 +182,11 @@ msgstr "" msgid "Position" msgstr "مكان الرصيÙ" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -683,6 +685,43 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +#, fuzzy +msgid "Display" +msgstr "إظهار الكل" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +#, fuzzy +msgid "Height" +msgstr "ضوء" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Width" +msgstr "بالعرض يساراً" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Height" +msgstr "أختبار" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1293,7 +1332,7 @@ msgstr "تمكين/إيقا٠هذا المسار." msgid "Update Mode (How this property is set)" msgstr "وضع Ø§Ù„ØªØØ¯ÙŠØ« (كيÙية تعيين هذه الخاصية)" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "وضعية Ø§Ù„Ø£Ø³ØªÙŠÙØ§Ø¡" @@ -6174,6 +6213,11 @@ msgstr "" msgid "Flat" msgstr "Ø§Ù„Ø³Ø·Ø 0" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "وضع التصادم" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "إختيار عقدة(عقد) للإستيراد" @@ -16130,42 +16174,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -#, fuzzy -msgid "Display" -msgstr "إظهار الكل" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -#, fuzzy -msgid "Height" -msgstr "ضوء" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -#, fuzzy -msgid "Test Width" -msgstr "بالعرض يساراً" - -#: main/main.cpp -#, fuzzy -msgid "Test Height" -msgstr "أختبار" - #: main/main.cpp msgid "DPI" msgstr "" @@ -20607,6 +20615,11 @@ msgstr "" "مضلع غير صالØ. يتطلب الأمر على الأقل نقطتين ÙÙŠ نمط البناء \"المتجزئ " "Segments\"." +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp #, fuzzy msgid "Build Mode" @@ -22476,7 +22489,7 @@ msgstr "اطبخ شبكة Ù…Ù„Ø§ØØ©" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -24744,6 +24757,11 @@ msgstr "وضع Ø§Ù„Ø³ØØ¨" #: scene/main/node.cpp #, fuzzy +msgid "Physics Interpolation Mode" +msgstr "وضعية Ø§Ù„Ø£Ø³ØªÙŠÙØ§Ø¡" + +#: scene/main/node.cpp +#, fuzzy msgid "Display Folded" msgstr "عرض من غير ظلال" @@ -24777,11 +24795,6 @@ msgstr "ØªØØ¯ÙŠØ¯ التكرار:" msgid "Process Priority" msgstr "تمكين الأولوية" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "وضعية Ø§Ù„Ø£Ø³ØªÙŠÙØ§Ø¡" - #: scene/main/scene_tree.cpp scene/main/timer.cpp #, fuzzy msgid "Time Left" @@ -25488,6 +25501,11 @@ msgstr "ÙØ§ØµÙ„ Ù…ÙØ³Ù…ّى" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "Ù…ÙØ´ØºÙ‘Ù„ اللون." + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "إعادة تسمية عنصر اللون" @@ -26294,6 +26312,11 @@ msgstr "وضع خالي من الإلهاء" #: scene/resources/gradient.cpp #, fuzzy +msgid "Raw Data" +msgstr "العمق" + +#: scene/resources/gradient.cpp +#, fuzzy msgid "Offsets" msgstr "Ø§Ù„Ù…ÙØ¹Ø§Ø¯Ù„:" diff --git a/editor/translations/az.po b/editor/translations/az.po index 6f223a4f1f..f0bf91bc54 100644 --- a/editor/translations/az.po +++ b/editor/translations/az.po @@ -73,11 +73,12 @@ msgstr "" msgid "Screen Orientation" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "" @@ -85,7 +86,7 @@ msgstr "" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Fullscreen" msgstr "" @@ -97,7 +98,7 @@ msgstr "" msgid "Minimized" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -111,10 +112,11 @@ msgstr "" msgid "Position" msgstr "Animasiyanı TÉ™mizlÉ™mÉ™" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -586,6 +588,39 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +msgid "Display" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +msgid "Height" +msgstr "" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +msgid "Test Width" +msgstr "" + +#: core/project_settings.cpp +msgid "Test Height" +msgstr "" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1181,7 +1216,7 @@ msgstr "Bu izi açın / söndürün." msgid "Update Mode (How this property is set)" msgstr "YenilÉ™mÉ™ rejimi (bu xüsusiyyÉ™t necÉ™ qurulur)" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "İnterpolasiya rejimi" @@ -5855,6 +5890,10 @@ msgstr "" msgid "Flat" msgstr "" +#: editor/editor_spin_slider.cpp +msgid "Hide Slider" +msgstr "" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "" @@ -15404,38 +15443,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -msgid "Display" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -msgid "Height" -msgstr "" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -msgid "Test Width" -msgstr "" - -#: main/main.cpp -msgid "Test Height" -msgstr "" - #: main/main.cpp msgid "DPI" msgstr "" @@ -19490,6 +19497,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp msgid "Build Mode" msgstr "" @@ -21122,7 +21134,7 @@ msgstr "" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -23168,6 +23180,11 @@ msgid "Pause Mode" msgstr "" #: scene/main/node.cpp +#, fuzzy +msgid "Physics Interpolation Mode" +msgstr "İnterpolasiya rejimi" + +#: scene/main/node.cpp msgid "Display Folded" msgstr "" @@ -23197,11 +23214,6 @@ msgstr "" msgid "Process Priority" msgstr "" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "İnterpolasiya rejimi" - #: scene/main/scene_tree.cpp scene/main/timer.cpp msgid "Time Left" msgstr "" @@ -23834,6 +23846,11 @@ msgstr "" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "İzah:" + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "Funksiyalar:" @@ -24577,6 +24594,10 @@ msgid "Distance Field" msgstr "QuraÅŸdır" #: scene/resources/gradient.cpp +msgid "Raw Data" +msgstr "" + +#: scene/resources/gradient.cpp msgid "Offsets" msgstr "" diff --git a/editor/translations/bg.po b/editor/translations/bg.po index 8aa5d76c71..3275a08135 100644 --- a/editor/translations/bg.po +++ b/editor/translations/bg.po @@ -91,11 +91,12 @@ msgstr "Размер на контура:" msgid "Screen Orientation" msgstr "ОтварÑне на документациÑта" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" msgstr "Прозорец" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "Без граници" @@ -103,7 +104,7 @@ msgstr "Без граници" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Fullscreen" msgstr "ЦÑл екран" @@ -116,7 +117,7 @@ msgstr "" msgid "Minimized" msgstr "Инициализиране" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -130,10 +131,11 @@ msgstr "" msgid "Position" msgstr "Създаване на функциÑ" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -623,6 +625,41 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +#, fuzzy +msgid "Display" +msgstr "Показване на вÑичко" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +msgid "Height" +msgstr "" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +msgid "Test Width" +msgstr "" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Height" +msgstr "ТеÑтово" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1220,7 +1257,7 @@ msgstr "Включване/изключване на тази пътечка." msgid "Update Mode (How this property is set)" msgstr "Режим на обновÑване (как Ñе задава ÑтойноÑÑ‚ на това ÑвойÑтво)" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "Режим на интерполациÑ" @@ -5972,6 +6009,11 @@ msgstr "" msgid "Flat" msgstr "" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "Режим на колизии" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "" @@ -15626,40 +15668,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -#, fuzzy -msgid "Display" -msgstr "Показване на вÑичко" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -msgid "Height" -msgstr "" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -msgid "Test Width" -msgstr "" - -#: main/main.cpp -#, fuzzy -msgid "Test Height" -msgstr "ТеÑтово" - #: main/main.cpp msgid "DPI" msgstr "" @@ -19944,6 +19952,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp #, fuzzy msgid "Build Mode" @@ -21718,7 +21731,7 @@ msgstr "Изпичане на NavMesh" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -23900,6 +23913,11 @@ msgstr "Панорамен режим" #: scene/main/node.cpp #, fuzzy +msgid "Physics Interpolation Mode" +msgstr "Режим на интерполациÑ" + +#: scene/main/node.cpp +#, fuzzy msgid "Display Folded" msgstr "Показване на вÑичко" @@ -23931,11 +23949,6 @@ msgstr "" msgid "Process Priority" msgstr "Включване на приоритета" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "Режим на интерполациÑ" - #: scene/main/scene_tree.cpp scene/main/timer.cpp #, fuzzy msgid "Time Left" @@ -24625,6 +24638,11 @@ msgstr "Именуван разделител" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "Разделение:" + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "Преименуване на елемента – цвÑÑ‚" @@ -25413,6 +25431,11 @@ msgstr "ИнÑталиране" #: scene/resources/gradient.cpp #, fuzzy +msgid "Raw Data" +msgstr "Дълбочина" + +#: scene/resources/gradient.cpp +#, fuzzy msgid "Offsets" msgstr "ОтмеÑтване:" diff --git a/editor/translations/bn.po b/editor/translations/bn.po index 1180616c9e..5f0c0e8a9c 100644 --- a/editor/translations/bn.po +++ b/editor/translations/bn.po @@ -87,12 +87,13 @@ msgstr "পà§à¦°à¦¾à¦¨à§à¦¤à¦°à§‡à¦–ার আকার:" msgid "Screen Orientation" msgstr "রেফারেনà§à¦¸à§‡à¦° ডকà§à¦®à§‡à¦¨à§à¦Ÿà§‡à¦¶à¦¨à§‡ খà§à¦à¦œà§à¦¨à¥¤" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp #, fuzzy msgid "Window" msgstr "উইনà§à¦¡à§‹" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "" @@ -100,7 +101,7 @@ msgstr "" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp #, fuzzy msgid "Fullscreen" msgstr "পূরà§à¦£-পরà§à¦¦à¦¾ অদলবদল/টগল করà§à¦¨" @@ -114,7 +115,7 @@ msgstr "" msgid "Minimized" msgstr "বড় হাতের অকà§à¦·à¦°à§‡ পরিবরà§à¦¤à¦¨à§‡ করà§à¦¨" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -128,10 +129,11 @@ msgstr "" msgid "Position" msgstr "ডà§à¦• পজিশন" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -628,6 +630,43 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +#, fuzzy +msgid "Display" +msgstr "Normal পà§à¦°à¦¦à¦°à§à¦¶à¦¨" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +#, fuzzy +msgid "Height" +msgstr "ডান" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Width" +msgstr "বাম দরà§à¦¶à¦¨" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Height" +msgstr "পরীকà§à¦·à¦¾à¦®à§‚লক উৎস" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1238,7 +1277,7 @@ msgstr "à¦à¦‡ টà§à¦°à§à¦¯à¦¾à¦•টি চালৠ/ বনà§à¦§ টগল msgid "Update Mode (How this property is set)" msgstr "আপডেট মোড (কীà¦à¦¾à¦¬à§‡ à¦à¦‡ সমà§à¦ªà¦¤à§à¦¤à¦¿ সেট করা আছে)" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "ইনà§à¦Ÿà¦¾à¦°à¦ªà§‹à¦²à§‡à¦¶à¦¨ মোড" @@ -6313,6 +6352,11 @@ msgstr "" msgid "Flat" msgstr "ফà§à¦²à§à¦¯à¦¾à¦Ÿ0" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨à§‡à¦° নোড" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "ইমà§à¦ªà§‹à¦°à§à¦Ÿà§‡à¦° জনà§à¦¯ নোড(সমূহ) নিরà§à¦¬à¦¾à¦šà¦¨ করà§à¦¨" @@ -16910,42 +16954,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -#, fuzzy -msgid "Display" -msgstr "Normal পà§à¦°à¦¦à¦°à§à¦¶à¦¨" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -#, fuzzy -msgid "Height" -msgstr "ডান" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -#, fuzzy -msgid "Test Width" -msgstr "বাম দরà§à¦¶à¦¨" - -#: main/main.cpp -#, fuzzy -msgid "Test Height" -msgstr "পরীকà§à¦·à¦¾à¦®à§‚লক উৎস" - #: main/main.cpp msgid "DPI" msgstr "" @@ -21419,6 +21427,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp #, fuzzy msgid "Build Mode" @@ -23229,7 +23242,7 @@ msgstr "মেস" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -25464,6 +25477,11 @@ msgstr "পà§à¦¯à¦¾à¦¨ মোড" #: scene/main/node.cpp #, fuzzy +msgid "Physics Interpolation Mode" +msgstr "ইনà§à¦Ÿà¦¾à¦°à¦ªà§‹à¦²à§‡à¦¶à¦¨ মোড" + +#: scene/main/node.cpp +#, fuzzy msgid "Display Folded" msgstr "Shadeless পà§à¦°à¦¦à¦°à§à¦¶à¦¨" @@ -25495,11 +25513,6 @@ msgstr "" msgid "Process Priority" msgstr "নোড ফিলà§à¦Ÿà¦¾à¦°à¦¸à¦®à§‚হ সমà§à¦ªà¦¾à¦¦à¦¨ করà§à¦¨" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "ইনà§à¦Ÿà¦¾à¦°à¦ªà§‹à¦²à§‡à¦¶à¦¨ মোড" - #: scene/main/scene_tree.cpp scene/main/timer.cpp #, fuzzy msgid "Time Left" @@ -26199,6 +26212,11 @@ msgstr "বিচà§à¦›à§‡à¦¦:" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "বিচà§à¦›à§‡à¦¦:" + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "কà§à¦²à¦¾à¦¸à§‡à¦° আইটেম অপসারণ করà§à¦¨" @@ -27002,6 +27020,11 @@ msgstr "বিকà§à¦·à§‡à¦ª-হীন মোড" #: scene/resources/gradient.cpp #, fuzzy +msgid "Raw Data" +msgstr "গà¦à§€à¦°à¦¤à¦¾" + +#: scene/resources/gradient.cpp +#, fuzzy msgid "Offsets" msgstr "অফসেট/à¦à¦¾à¦°à¦¸à¦¾à¦®à§à¦¯:" diff --git a/editor/translations/br.po b/editor/translations/br.po index b14561b9f6..5764fa64e2 100644 --- a/editor/translations/br.po +++ b/editor/translations/br.po @@ -75,11 +75,12 @@ msgstr "" msgid "Screen Orientation" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "" @@ -87,7 +88,7 @@ msgstr "" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Fullscreen" msgstr "" @@ -99,7 +100,7 @@ msgstr "" msgid "Minimized" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -113,10 +114,11 @@ msgstr "" msgid "Position" msgstr "Tro Fiñvskeudenn" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -574,6 +576,39 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +msgid "Display" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +msgid "Height" +msgstr "" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +msgid "Test Width" +msgstr "" + +#: core/project_settings.cpp +msgid "Test Height" +msgstr "" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1152,7 +1187,7 @@ msgstr "Aktivañ/Diaktivañ ar roudenn-se." msgid "Update Mode (How this property is set)" msgstr "Mod Bremenadur (Penaos eo termenet ar perzh-se)" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "Mod Interpoladur" @@ -5749,6 +5784,10 @@ msgstr "" msgid "Flat" msgstr "" +#: editor/editor_spin_slider.cpp +msgid "Hide Slider" +msgstr "" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "" @@ -15248,38 +15287,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -msgid "Display" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -msgid "Height" -msgstr "" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -msgid "Test Width" -msgstr "" - -#: main/main.cpp -msgid "Test Height" -msgstr "" - #: main/main.cpp msgid "DPI" msgstr "" @@ -19289,6 +19296,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp msgid "Build Mode" msgstr "" @@ -20902,7 +20914,7 @@ msgstr "" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -22915,6 +22927,11 @@ msgid "Pause Mode" msgstr "" #: scene/main/node.cpp +#, fuzzy +msgid "Physics Interpolation Mode" +msgstr "Mod Interpoladur" + +#: scene/main/node.cpp msgid "Display Folded" msgstr "" @@ -22943,11 +22960,6 @@ msgstr "" msgid "Process Priority" msgstr "" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "Mod Interpoladur" - #: scene/main/scene_tree.cpp scene/main/timer.cpp msgid "Time Left" msgstr "" @@ -23571,6 +23583,11 @@ msgstr "" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "Tro Fiñvskeudenn" + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "Fonksionoù :" @@ -24290,6 +24307,10 @@ msgid "Distance Field" msgstr "" #: scene/resources/gradient.cpp +msgid "Raw Data" +msgstr "" + +#: scene/resources/gradient.cpp msgid "Offsets" msgstr "" diff --git a/editor/translations/ca.po b/editor/translations/ca.po index 08e8de0da5..f6bf7acf1a 100644 --- a/editor/translations/ca.po +++ b/editor/translations/ca.po @@ -85,11 +85,12 @@ msgstr "Mida Mà xima de la Finestra" msgid "Screen Orientation" msgstr "Orientació de la Pantalla" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" msgstr "Finestra" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp #, fuzzy msgid "Borderless" msgstr "Sense Vores" @@ -98,7 +99,7 @@ msgstr "Sense Vores" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Fullscreen" msgstr "Pantalla Completa" @@ -110,7 +111,7 @@ msgstr "" msgid "Minimized" msgstr "Minimitzat" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -123,10 +124,11 @@ msgstr "" msgid "Position" msgstr "Posició" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -596,6 +598,43 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +#, fuzzy +msgid "Display" +msgstr "Mostra-ho tot" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +#, fuzzy +msgid "Height" +msgstr "Llum" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Width" +msgstr "Vista Esquerra" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Height" +msgstr "Provant" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1194,7 +1233,7 @@ msgstr "Activa/Desactiva la Pista." msgid "Update Mode (How this property is set)" msgstr "Mode d'Actualització (Configuració d'aquesta propietat)" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "Mode d'Interpolació" @@ -6156,6 +6195,11 @@ msgstr "" msgid "Flat" msgstr "Flat 0" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "Mode Col·lisió" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "Selecciona Node(s) per Importar" @@ -16455,42 +16499,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -#, fuzzy -msgid "Display" -msgstr "Mostra-ho tot" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -#, fuzzy -msgid "Height" -msgstr "Llum" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -#, fuzzy -msgid "Test Width" -msgstr "Vista Esquerra" - -#: main/main.cpp -#, fuzzy -msgid "Test Height" -msgstr "Provant" - #: main/main.cpp msgid "DPI" msgstr "" @@ -20957,6 +20965,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp #, fuzzy msgid "Build Mode" @@ -22805,7 +22818,7 @@ msgstr "Malla" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -25065,6 +25078,11 @@ msgstr "Mode d'Escombratge lateral" #: scene/main/node.cpp #, fuzzy +msgid "Physics Interpolation Mode" +msgstr "Mode d'Interpolació" + +#: scene/main/node.cpp +#, fuzzy msgid "Display Folded" msgstr "Mostra sense Ombreig" @@ -25098,11 +25116,6 @@ msgstr "Estableix Múltiples:" msgid "Process Priority" msgstr "Habilitar Prioritat" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "Mode d'Interpolació" - #: scene/main/scene_tree.cpp scene/main/timer.cpp #, fuzzy msgid "Time Left" @@ -25809,6 +25822,11 @@ msgstr "Separador amb Nom" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "Operador Color." + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "Elimina Elements de Classe" @@ -26615,6 +26633,11 @@ msgstr "Mode Lliure de Distraccions" #: scene/resources/gradient.cpp #, fuzzy +msgid "Raw Data" +msgstr "Profunditat" + +#: scene/resources/gradient.cpp +#, fuzzy msgid "Offsets" msgstr "òfset:" diff --git a/editor/translations/cs.po b/editor/translations/cs.po index 7f59f12f45..6af60f7975 100644 --- a/editor/translations/cs.po +++ b/editor/translations/cs.po @@ -104,12 +104,13 @@ msgstr "Velikost obrysu:" msgid "Screen Orientation" msgstr "Operátor screen." -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp #, fuzzy msgid "Window" msgstr "Nové okno" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp #, fuzzy msgid "Borderless" msgstr "HraniÄnà pixely" @@ -118,7 +119,7 @@ msgstr "HraniÄnà pixely" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp #, fuzzy msgid "Fullscreen" msgstr "PÅ™epnout celou obrazovku" @@ -132,7 +133,7 @@ msgstr "" msgid "Minimized" msgstr "Inicializovat" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -146,10 +147,11 @@ msgstr "" msgid "Position" msgstr "Pozice doku" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -647,6 +649,43 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +#, fuzzy +msgid "Display" +msgstr "Zobrazit vÅ¡echny" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +#, fuzzy +msgid "Height" +msgstr "SvÄ›tlo" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Width" +msgstr "Vlevo po celé výšce" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Height" +msgstr "Testované" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1256,7 +1295,7 @@ msgstr "Aktivovat/Deaktivovat tuto stopu." msgid "Update Mode (How this property is set)" msgstr "Režim aktualizace (jak je tato vlastnost nastavena)" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "InterpolaÄnà režim" @@ -6160,6 +6199,11 @@ msgstr "" msgid "Flat" msgstr "Plocha 0" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "Koliznà režim" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "Vyberte uzly pro import" @@ -16145,42 +16189,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -#, fuzzy -msgid "Display" -msgstr "Zobrazit vÅ¡echny" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -#, fuzzy -msgid "Height" -msgstr "SvÄ›tlo" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -#, fuzzy -msgid "Test Width" -msgstr "Vlevo po celé výšce" - -#: main/main.cpp -#, fuzzy -msgid "Test Height" -msgstr "Testované" - #: main/main.cpp msgid "DPI" msgstr "" @@ -20577,6 +20585,11 @@ msgstr "Chybný polygon. Alespoň 3 body jsou potÅ™eba v 'Solids' build módu." msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "Chybný polygon. Alespoň 2 body jsou potÅ™eba v 'Segments' build módu." +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp #, fuzzy msgid "Build Mode" @@ -22415,7 +22428,7 @@ msgstr "Zapéct NavMesh" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -24679,6 +24692,11 @@ msgstr "Režim posouvánÃ" #: scene/main/node.cpp #, fuzzy +msgid "Physics Interpolation Mode" +msgstr "InterpolaÄnà režim" + +#: scene/main/node.cpp +#, fuzzy msgid "Display Folded" msgstr "BezestÃnový pohled" @@ -24712,11 +24730,6 @@ msgstr "Nastavit vÃce:" msgid "Process Priority" msgstr "Zapnout priority" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "InterpolaÄnà režim" - #: scene/main/scene_tree.cpp scene/main/timer.cpp #, fuzzy msgid "Time Left" @@ -25424,6 +25437,11 @@ msgstr "Nazvaný oddÄ›lovaÄ" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "Operátor barvy." + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "Odstranit položky tÅ™Ãdy" @@ -26230,6 +26248,11 @@ msgstr "NerozptylujÃcà režitm" #: scene/resources/gradient.cpp #, fuzzy +msgid "Raw Data" +msgstr "Hloubka" + +#: scene/resources/gradient.cpp +#, fuzzy msgid "Offsets" msgstr "Offset(Posun):" diff --git a/editor/translations/da.po b/editor/translations/da.po index 763b0af614..80669d616a 100644 --- a/editor/translations/da.po +++ b/editor/translations/da.po @@ -86,11 +86,12 @@ msgstr "Max. Vinduesstørrelse" msgid "Screen Orientation" msgstr "Skærmorientering" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" msgstr "Vindue" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "Rammeløs" @@ -98,7 +99,7 @@ msgstr "Rammeløs" msgid "Per Pixel Transparency Enabled" msgstr "Per Piksel Gennemsigtighed Aktiveret" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Fullscreen" msgstr "Fuld skærm" @@ -110,7 +111,7 @@ msgstr "Maksimeret" msgid "Minimized" msgstr "Minimeret" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -123,10 +124,11 @@ msgstr "" msgid "Position" msgstr "Position" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -614,6 +616,42 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +#, fuzzy +msgid "Display" +msgstr "Vis alle" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +msgid "Height" +msgstr "" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Width" +msgstr "Lineær" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Height" +msgstr "Tester" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1221,7 +1259,7 @@ msgstr "SlÃ¥ spor til/fra." msgid "Update Mode (How this property is set)" msgstr "Opdateringstilstand (Hvordan denne egenskab er sat)" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "Interpolationsmetode" @@ -6190,6 +6228,11 @@ msgstr "" msgid "Flat" msgstr "" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "Interpolationsmetode" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "Vælg Noder at Importere" @@ -16385,41 +16428,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -#, fuzzy -msgid "Display" -msgstr "Vis alle" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -msgid "Height" -msgstr "" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -#, fuzzy -msgid "Test Width" -msgstr "Lineær" - -#: main/main.cpp -#, fuzzy -msgid "Test Height" -msgstr "Tester" - #: main/main.cpp msgid "DPI" msgstr "" @@ -20761,6 +20769,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp #, fuzzy msgid "Build Mode" @@ -22513,7 +22526,7 @@ msgstr "" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -24695,6 +24708,11 @@ msgstr "Skifter Modus" #: scene/main/node.cpp #, fuzzy +msgid "Physics Interpolation Mode" +msgstr "Interpolationsmetode" + +#: scene/main/node.cpp +#, fuzzy msgid "Display Folded" msgstr "Vis alle" @@ -24726,11 +24744,6 @@ msgstr "" msgid "Process Priority" msgstr "Rediger filtre" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "Interpolationsmetode" - #: scene/main/scene_tree.cpp scene/main/timer.cpp #, fuzzy msgid "Time Left" @@ -25415,6 +25428,11 @@ msgstr "" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "Tællinger:" + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "Fjern Alt" @@ -26207,6 +26225,11 @@ msgid "Distance Field" msgstr "Distraktions Fri Modus" #: scene/resources/gradient.cpp +#, fuzzy +msgid "Raw Data" +msgstr "Dybde" + +#: scene/resources/gradient.cpp msgid "Offsets" msgstr "" diff --git a/editor/translations/de.po b/editor/translations/de.po index 15b04ff917..13e7b0eeea 100644 --- a/editor/translations/de.po +++ b/editor/translations/de.po @@ -80,13 +80,14 @@ # Andreas <self@andreasbresser.de>, 2022. # ARez <dark.gaming@fantasymail.de>, 2022. # Christian Packenius <christian@packenius.com>, 2022. +# Sajeg <jfx@posteo.de>, 2022. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2022-04-30 17:12+0000\n" -"Last-Translator: Christian Packenius <christian@packenius.com>\n" +"PO-Revision-Date: 2022-05-17 17:18+0000\n" +"Last-Translator: Sajeg <jfx@posteo.de>\n" "Language-Team: German <https://hosted.weblate.org/projects/godot-engine/" "godot/de/>\n" "Language: de\n" @@ -94,7 +95,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.12.1\n" +"X-Generator: Weblate 4.13-dev\n" #: core/bind/core_bind.cpp main/main.cpp msgid "Tablet Driver" @@ -148,11 +149,12 @@ msgstr "Maximale Fenstergröße" msgid "Screen Orientation" msgstr "Bildschirmausrichtung" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" msgstr "Fenster" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "Rahmenlos" @@ -160,7 +162,7 @@ msgstr "Rahmenlos" msgid "Per Pixel Transparency Enabled" msgstr "Pixelweise Transparenz aktiviert" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Fullscreen" msgstr "Vollbildmodus" @@ -172,7 +174,7 @@ msgstr "Maximiert" msgid "Minimized" msgstr "Minimiert" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "Verstellbar" @@ -185,10 +187,11 @@ msgstr "Verstellbar" msgid "Position" msgstr "Position" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -639,6 +642,39 @@ msgstr "Eigenes Nutzerverzeichnis verwenden" msgid "Custom User Dir Name" msgstr "Eigener Nutzerverzeichnisname" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +msgid "Display" +msgstr "Anzeige" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "Breite" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +msgid "Height" +msgstr "Höhe" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "Immer im Vordergrund" + +#: core/project_settings.cpp +msgid "Test Width" +msgstr "Testbreite" + +#: core/project_settings.cpp +msgid "Test Height" +msgstr "Testhöhe" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1216,7 +1252,7 @@ msgstr "Diese Spur an-/abschalten." msgid "Update Mode (How this property is set)" msgstr "Aktualisierungs-Modus (wie Eigenschaften gesetzt werden)" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "Interpolationsmodus" @@ -6004,6 +6040,11 @@ msgstr "" msgid "Flat" msgstr "Flach" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "Schieber" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "Selektiere Node(s) für den Import" @@ -6704,7 +6745,6 @@ msgid "Delimiter" msgstr "Trennzeichen" #: editor/import/resource_importer_layered_texture.cpp -#, fuzzy msgid "ColorCorrect" msgstr "Farbkorrektur" @@ -6995,14 +7035,12 @@ msgid "Saving..." msgstr "Speichere..." #: editor/import/resource_importer_texture.cpp -#, fuzzy msgid "2D, Detect 3D" -msgstr "3D erkennen" +msgstr "2D, 3D erkennen" #: editor/import/resource_importer_texture.cpp -#, fuzzy msgid "2D Pixel" -msgstr "Festkörper-Pixel" +msgstr "2D-Pixel" #: editor/import/resource_importer_texture.cpp scene/resources/texture.cpp msgid "Lossy Quality" @@ -8336,7 +8374,7 @@ msgstr "Testphase" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Failed to get repository configuration." -msgstr "" +msgstr "Die Repository-Konfiguration konnte nicht abgerufen werden." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Assets ZIP File" @@ -10070,8 +10108,9 @@ msgid "Sync Bones to Polygon" msgstr "Knochen mit Polygon synchronisieren" #: editor/plugins/ray_cast_2d_editor_plugin.cpp +#, fuzzy msgid "Set cast_to" -msgstr "" +msgstr "Setzte cast_to" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "ERROR: Couldn't load resource!" @@ -15017,16 +15056,16 @@ msgstr "Lokal machen" #: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp msgid "Another node already uses this unique name in the scene." msgstr "" +"Ein anderes Node nutzt schon diesen einzigartigen Namen in dieser Szene." #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Enable Scene Unique Name" -msgstr "Eindeutiger Name" +msgstr "Einzigartigen Namen der Szene aktivieren" #: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp #, fuzzy msgid "Disable Scene Unique Name" -msgstr "Eindeutiger Name" +msgstr "Szene eindeutiger Name deaktivieren" #: editor/scene_tree_dock.cpp msgid "New Scene Root" @@ -15101,8 +15140,9 @@ msgid "Sub-Resources" msgstr "Unter-Ressourcen" #: editor/scene_tree_dock.cpp +#, fuzzy msgid "Access as Scene Unique Name" -msgstr "" +msgstr "Zugrif als einzigartige Szene" #: editor/scene_tree_dock.cpp msgid "Clear Inheritance" @@ -15900,38 +15940,6 @@ msgstr "Rückfall auf GLES2" msgid "Use Nvidia Rect Flicker Workaround" msgstr "Nvidia-Rechtecksflackern-Abhilfe verwenden" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -msgid "Display" -msgstr "Anzeige" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "Breite" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -msgid "Height" -msgstr "Höhe" - -#: main/main.cpp -msgid "Always On Top" -msgstr "Immer im Vordergrund" - -#: main/main.cpp -msgid "Test Width" -msgstr "Testbreite" - -#: main/main.cpp -msgid "Test Height" -msgstr "Testhöhe" - #: main/main.cpp msgid "DPI" msgstr "DPI" @@ -20046,6 +20054,11 @@ msgstr "" "Ungültiges Polygon. Mindestens zwei Punkte werden im ‚Segment‘-Baumodus " "benötigt." +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp msgid "Build Mode" msgstr "Baumodus" @@ -21715,9 +21728,10 @@ msgid "NavMesh" msgstr "NavMesh backen" #: scene/3d/navigation_obstacle.cpp +#, fuzzy msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" "Der einzige Zweck eines NavigationObstacle ist es, Kollisionsvermeidung für " "ein Spatial-Objekt bereitzustellen." @@ -23754,6 +23768,11 @@ msgid "Pause Mode" msgstr "Pausiermodus" #: scene/main/node.cpp +#, fuzzy +msgid "Physics Interpolation Mode" +msgstr "Physikinterpolation" + +#: scene/main/node.cpp msgid "Display Folded" msgstr "Eingeklappt anzeigen" @@ -23782,10 +23801,6 @@ msgstr "Mehrspieler benutzerdefiniert" msgid "Process Priority" msgstr "Prozesspriorität" -#: scene/main/node.cpp -msgid "Physics Interpolated" -msgstr "Physikinterpoliert" - #: scene/main/scene_tree.cpp scene/main/timer.cpp msgid "Time Left" msgstr "Zeit übrig" @@ -24400,6 +24415,11 @@ msgid "Labeled Separator Right" msgstr "Benannter Trenner Rechts" #: scene/resources/default_theme/default_theme.cpp +#, fuzzy +msgid "Font Separator" +msgstr "Schriftfarbe Trenner" + +#: scene/resources/default_theme/default_theme.cpp msgid "Font Color Accel" msgstr "Schriftfarbe-Beschleunigung" @@ -25080,6 +25100,11 @@ msgid "Distance Field" msgstr "Distanzfeld" #: scene/resources/gradient.cpp +#, fuzzy +msgid "Raw Data" +msgstr "Kartendaten" + +#: scene/resources/gradient.cpp msgid "Offsets" msgstr "Versätze" diff --git a/editor/translations/editor.pot b/editor/translations/editor.pot index 607787019b..e74983e7d3 100644 --- a/editor/translations/editor.pot +++ b/editor/translations/editor.pot @@ -66,11 +66,12 @@ msgstr "" msgid "Screen Orientation" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "" @@ -78,7 +79,7 @@ msgstr "" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Fullscreen" msgstr "" @@ -90,7 +91,7 @@ msgstr "" msgid "Minimized" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -103,10 +104,11 @@ msgstr "" msgid "Position" msgstr "" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -556,6 +558,39 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +msgid "Display" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +msgid "Height" +msgstr "" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +msgid "Test Width" +msgstr "" + +#: core/project_settings.cpp +msgid "Test Height" +msgstr "" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1133,7 +1168,7 @@ msgstr "" msgid "Update Mode (How this property is set)" msgstr "" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "" @@ -5693,6 +5728,10 @@ msgstr "" msgid "Flat" msgstr "" +#: editor/editor_spin_slider.cpp +msgid "Hide Slider" +msgstr "" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "" @@ -15157,38 +15196,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -msgid "Display" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -msgid "Height" -msgstr "" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -msgid "Test Width" -msgstr "" - -#: main/main.cpp -msgid "Test Height" -msgstr "" - #: main/main.cpp msgid "DPI" msgstr "" @@ -19149,6 +19156,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp msgid "Build Mode" msgstr "" @@ -20730,7 +20742,7 @@ msgstr "" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -22677,6 +22689,10 @@ msgid "Pause Mode" msgstr "" #: scene/main/node.cpp +msgid "Physics Interpolation Mode" +msgstr "" + +#: scene/main/node.cpp msgid "Display Folded" msgstr "" @@ -22704,10 +22720,6 @@ msgstr "" msgid "Process Priority" msgstr "" -#: scene/main/node.cpp -msgid "Physics Interpolated" -msgstr "" - #: scene/main/scene_tree.cpp scene/main/timer.cpp msgid "Time Left" msgstr "" @@ -23309,6 +23321,10 @@ msgid "Labeled Separator Right" msgstr "" #: scene/resources/default_theme/default_theme.cpp +msgid "Font Separator" +msgstr "" + +#: scene/resources/default_theme/default_theme.cpp msgid "Font Color Accel" msgstr "" @@ -23989,6 +24005,10 @@ msgid "Distance Field" msgstr "" #: scene/resources/gradient.cpp +msgid "Raw Data" +msgstr "" + +#: scene/resources/gradient.cpp msgid "Offsets" msgstr "" diff --git a/editor/translations/el.po b/editor/translations/el.po index 4209bc8935..c4c3529ab4 100644 --- a/editor/translations/el.po +++ b/editor/translations/el.po @@ -6,7 +6,7 @@ # Georgios Katsanakis <geo.elgeo@gmail.com>, 2019. # Overloaded <manoschool@yahoo.gr>, 2019. # Eternal Death <eternaldeath0001@gmail.com>, 2019. -# Overloaded @ Orama Interactive http://orama-interactive.com/ <manoschool@yahoo.gr>, 2020. +# Overloaded @ Orama Interactive http://orama-interactive.com/ <manoschool@yahoo.gr>, 2020, 2022. # pandektis <pandektis@gmail.com>, 2020. # KostasMSC <kargyris@athtech.gr>, 2020. # lawfulRobot <czavantias@gmail.com>, 2020, 2021. @@ -22,8 +22,8 @@ msgstr "" "Project-Id-Version: Godot Engine editor\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2022-05-05 10:10+0000\n" -"Last-Translator: Anthony V. <batmanplayer123@gmail.com>\n" +"PO-Revision-Date: 2022-05-07 05:11+0000\n" +"Last-Translator: Overloaded @ Orama Interactive <manoschool@yahoo.gr>\n" "Language-Team: Greek <https://hosted.weblate.org/projects/godot-engine/godot/" "el/>\n" "Language: el\n" @@ -88,11 +88,12 @@ msgstr "ΜÎγιστο ΜÎγεθος ΠαÏαθÏÏου" msgid "Screen Orientation" msgstr "Î Ïοσανατολισμός οθόνης" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" msgstr "ΠαÏάθυÏο" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "XωÏίς σÏνοÏα" @@ -100,7 +101,7 @@ msgstr "XωÏίς σÏνοÏα" msgid "Per Pixel Transparency Enabled" msgstr "Διαφάνεια ανά εικονοστοιχείο ΕνεÏγοποιημÎνη" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Fullscreen" msgstr "ΠλήÏης οθόνη" @@ -112,7 +113,7 @@ msgstr "ΜεγιστοποιημÎνη" msgid "Minimized" msgstr "Ελαχιστοποίηση" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "Mεταβλητό MÎγεθος" @@ -126,10 +127,11 @@ msgstr "Mεταβλητό MÎγεθος" msgid "Position" msgstr "ΘÎση" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -596,6 +598,43 @@ msgstr "ΧÏήση Î ÏοσαÏμοσμÎνης ΔιεÏθυνση ΚαταλόΠmsgid "Custom User Dir Name" msgstr "Όνομα διεÏθυνσης Ï€ÏοσαÏμοσμÎνου χÏήστη" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +#, fuzzy +msgid "Display" +msgstr "Εμφάνιση όλων" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +#, fuzzy +msgid "Height" +msgstr "Φως" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Width" +msgstr "ΕυÏεία ΑÏιστεÏά" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Height" +msgstr "Δοκιμαστικά" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1204,7 +1243,7 @@ msgstr "Εναλλαγή ÎºÎ¿Î¼Î¼Î±Ï„Î¹Î¿Ï on/off." msgid "Update Mode (How this property is set)" msgstr "ΜÎθοδος ανανÎωσης (της ιδιότητας)" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "ΜÎθοδος παÏεμβολής" @@ -6170,6 +6209,11 @@ msgstr "" msgid "Flat" msgstr "Επίπεδο 0" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "ΛειτουÏγία ΣÏγκÏουσης" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "ΕπιλÎξτε κόμβους για εισαγωγή" @@ -14701,7 +14745,7 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "Physical Key" -msgstr "" +msgstr "Φυσικό πλήκτÏο" #: editor/project_settings_editor.cpp msgid "Key " @@ -14749,7 +14793,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..." @@ -16315,42 +16359,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -#, fuzzy -msgid "Display" -msgstr "Εμφάνιση όλων" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -#, fuzzy -msgid "Height" -msgstr "Φως" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -#, fuzzy -msgid "Test Width" -msgstr "ΕυÏεία ΑÏιστεÏά" - -#: main/main.cpp -#, fuzzy -msgid "Test Height" -msgstr "Δοκιμαστικά" - #: main/main.cpp msgid "DPI" msgstr "" @@ -20788,6 +20796,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp #, fuzzy msgid "Build Mode" @@ -22643,7 +22656,7 @@ msgstr "Ψήσιμο NavMesh" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -24911,6 +24924,11 @@ msgstr "ΛειτουÏγία Μετακίνησης ΚάμεÏας" #: scene/main/node.cpp #, fuzzy +msgid "Physics Interpolation Mode" +msgstr "ΜÎθοδος παÏεμβολής" + +#: scene/main/node.cpp +#, fuzzy msgid "Display Folded" msgstr "Εμφάνιση χωÏίς σκιÎÏ‚" @@ -24944,11 +24962,6 @@ msgstr "ΟÏισμός πολλών:" msgid "Process Priority" msgstr "ΕπεξεÏγασία Î ÏοτεÏαιότητας" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "ΜÎθοδος παÏεμβολής" - #: scene/main/scene_tree.cpp scene/main/timer.cpp #, fuzzy msgid "Time Left" @@ -25657,6 +25670,11 @@ msgstr "ΟνομασμÎνο ΔιαχωÏιστικό" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "Τελεστής χÏώματος." + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "ΑφαίÏεση στοιχείων κλάσης" @@ -26463,6 +26481,11 @@ msgstr "ΛειτουÏγία χωÏίς διάσπαση Ï€Ïοσοχής" #: scene/resources/gradient.cpp #, fuzzy +msgid "Raw Data" +msgstr "Βάθος" + +#: scene/resources/gradient.cpp +#, fuzzy msgid "Offsets" msgstr "Μετατόπιση:" diff --git a/editor/translations/en_Shaw.po b/editor/translations/en_Shaw.po index 585d053296..6ccc2bc4bc 100644 --- a/editor/translations/en_Shaw.po +++ b/editor/translations/en_Shaw.po @@ -71,11 +71,12 @@ msgstr "" msgid "Screen Orientation" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "" @@ -83,7 +84,7 @@ msgstr "" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Fullscreen" msgstr "" @@ -95,7 +96,7 @@ msgstr "" msgid "Minimized" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -109,10 +110,11 @@ msgstr "" msgid "Position" msgstr "ð‘“ð‘³ð‘™ð‘’ð‘–ð‘©ð‘¯ð‘Ÿ:" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -566,6 +568,39 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +msgid "Display" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +msgid "Height" +msgstr "" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +msgid "Test Width" +msgstr "" + +#: core/project_settings.cpp +msgid "Test Height" +msgstr "" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1144,7 +1179,7 @@ msgstr "ð‘‘ð‘ªð‘œð‘©ð‘¤ ð‘žð‘¦ð‘• ð‘‘ð‘®ð‘¨ð‘’ ð‘ªð‘¯/ð‘ªð‘“." msgid "Update Mode (How this property is set)" msgstr "ð‘³ð‘ð‘›ð‘±ð‘‘ ð‘¥ð‘´ð‘› (ð‘£ð‘¬ ð‘žð‘¦ð‘• ð‘ð‘®ð‘ªð‘ð‘¼ð‘‘𑦠ð‘¦ð‘Ÿ ð‘•ð‘§ð‘‘)" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "ð‘¦ð‘¯ð‘‘ð‘»ð‘ð‘©ð‘¤ð‘±ð‘–ð‘©ð‘¯ ð‘¥ð‘´ð‘›" @@ -5712,6 +5747,10 @@ msgstr "" msgid "Flat" msgstr "" +#: editor/editor_spin_slider.cpp +msgid "Hide Slider" +msgstr "" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "" @@ -15197,38 +15236,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -msgid "Display" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -msgid "Height" -msgstr "" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -msgid "Test Width" -msgstr "" - -#: main/main.cpp -msgid "Test Height" -msgstr "" - #: main/main.cpp msgid "DPI" msgstr "" @@ -19218,6 +19225,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp msgid "Build Mode" msgstr "" @@ -20821,7 +20833,7 @@ msgstr "" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -22823,6 +22835,11 @@ msgid "Pause Mode" msgstr "" #: scene/main/node.cpp +#, fuzzy +msgid "Physics Interpolation Mode" +msgstr "ð‘¦ð‘¯ð‘‘ð‘»ð‘ð‘©ð‘¤ð‘±ð‘–ð‘©ð‘¯ ð‘¥ð‘´ð‘›" + +#: scene/main/node.cpp msgid "Display Folded" msgstr "" @@ -22851,11 +22868,6 @@ msgstr "" msgid "Process Priority" msgstr "" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "ð‘¦ð‘¯ð‘‘ð‘»ð‘ð‘©ð‘¤ð‘±ð‘–ð‘©ð‘¯ ð‘¥ð‘´ð‘›" - #: scene/main/scene_tree.cpp scene/main/timer.cpp msgid "Time Left" msgstr "" @@ -23475,6 +23487,11 @@ msgstr "" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "ð‘¦ð‘¯ð‘‘ð‘»ð‘ð‘©ð‘¤ð‘±ð‘–ð‘©ð‘¯ ð‘¥ð‘´ð‘›" + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "ð‘“ð‘³ð‘™ð‘’ð‘–ð‘©ð‘¯ð‘Ÿ:" @@ -24189,6 +24206,10 @@ msgid "Distance Field" msgstr "" #: scene/resources/gradient.cpp +msgid "Raw Data" +msgstr "" + +#: scene/resources/gradient.cpp msgid "Offsets" msgstr "" diff --git a/editor/translations/eo.po b/editor/translations/eo.po index c9f39f29fd..a183ba025a 100644 --- a/editor/translations/eo.po +++ b/editor/translations/eo.po @@ -87,12 +87,13 @@ msgstr "Grando de konturo:" msgid "Screen Orientation" msgstr "Malfermi dokumentaron" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp #, fuzzy msgid "Window" msgstr "Nova Fenestro" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp #, fuzzy msgid "Borderless" msgstr "Rastumeroj de bordero" @@ -101,7 +102,7 @@ msgstr "Rastumeroj de bordero" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp #, fuzzy msgid "Fullscreen" msgstr "Baskuli plenekranon" @@ -115,7 +116,7 @@ msgstr "" msgid "Minimized" msgstr "Kapitaligi" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -129,10 +130,11 @@ msgstr "" msgid "Position" msgstr "Pozicio de doko" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -623,6 +625,42 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +#, fuzzy +msgid "Display" +msgstr "Vidigi tutan" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +msgid "Height" +msgstr "" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Width" +msgstr "Maldekstre vaste" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Height" +msgstr "Testada" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1232,7 +1270,7 @@ msgstr "Åœalti/malÅalti ĉi tiun trakon." msgid "Update Mode (How this property is set)" msgstr "Aktualigi Modon (Kiel tio ĉi atributo estas determinigis)" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "Interpolado Modo" @@ -6126,6 +6164,11 @@ msgstr "" msgid "Flat" msgstr "Konstanta 0" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "Videblaj koliziaj formoj" + #: editor/editor_sub_scene.cpp #, fuzzy msgid "Select Node(s) to Import" @@ -16040,41 +16083,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -#, fuzzy -msgid "Display" -msgstr "Vidigi tutan" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -msgid "Height" -msgstr "" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -#, fuzzy -msgid "Test Width" -msgstr "Maldekstre vaste" - -#: main/main.cpp -#, fuzzy -msgid "Test Height" -msgstr "Testada" - #: main/main.cpp msgid "DPI" msgstr "" @@ -20398,6 +20406,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp #, fuzzy msgid "Build Mode" @@ -22136,7 +22149,7 @@ msgstr "MaÅo" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -24338,6 +24351,11 @@ msgstr "Panoramada reÄimo" #: scene/main/node.cpp #, fuzzy +msgid "Physics Interpolation Mode" +msgstr "Interpolado Modo" + +#: scene/main/node.cpp +#, fuzzy msgid "Display Folded" msgstr "Vidigi tutan" @@ -24371,11 +24389,6 @@ msgstr "Agordi pluroblan:" msgid "Process Priority" msgstr "Movada reÄimo" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "Interpolado Modo" - #: scene/main/scene_tree.cpp scene/main/timer.cpp #, fuzzy msgid "Time Left" @@ -25067,6 +25080,11 @@ msgstr "" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "Versio:" + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "Renomi nodon" @@ -25867,6 +25885,11 @@ msgstr "Sendistra reÄimo" #: scene/resources/gradient.cpp #, fuzzy +msgid "Raw Data" +msgstr "Profundo" + +#: scene/resources/gradient.cpp +#, fuzzy msgid "Offsets" msgstr "Krada deÅovo:" diff --git a/editor/translations/es.po b/editor/translations/es.po index de846418b6..529cc6351b 100644 --- a/editor/translations/es.po +++ b/editor/translations/es.po @@ -83,7 +83,7 @@ msgstr "" "Project-Id-Version: Godot Engine editor\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2022-05-03 07:13+0000\n" +"PO-Revision-Date: 2022-05-17 21:38+0000\n" "Last-Translator: Javier Ocampos <xavier.ocampos@gmail.com>\n" "Language-Team: Spanish <https://hosted.weblate.org/projects/godot-engine/" "godot/es/>\n" @@ -92,7 +92,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.12.1\n" +"X-Generator: Weblate 4.13-dev\n" #: core/bind/core_bind.cpp main/main.cpp msgid "Tablet Driver" @@ -146,11 +146,12 @@ msgstr "Tamaño Máximo de la Ventana" msgid "Screen Orientation" msgstr "Orientación de la Pantalla" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" msgstr "Ventana" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "Sin bordes" @@ -158,7 +159,7 @@ msgstr "Sin bordes" msgid "Per Pixel Transparency Enabled" msgstr "Transparencia Por PÃxel Activada" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Fullscreen" msgstr "Pantalla Completa" @@ -170,7 +171,7 @@ msgstr "Maximizada" msgid "Minimized" msgstr "Minimizada" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "Redimensionable" @@ -183,10 +184,11 @@ msgstr "Redimensionable" msgid "Position" msgstr "Posición" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -639,6 +641,43 @@ msgstr "Utilizar Directorio de Usuario Personalizado" msgid "Custom User Dir Name" msgstr "Nombre de Directorio de Usuario Personalizado" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +#, fuzzy +msgid "Display" +msgstr "Mostrar Todos" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +#, fuzzy +msgid "Height" +msgstr "Luz" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Width" +msgstr "Ancho Izquierda" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Height" +msgstr "Prueba" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1216,7 +1255,7 @@ msgstr "Act./Desact. esta pista." msgid "Update Mode (How this property is set)" msgstr "Modo de actualización (Cómo se establece)" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "Modo de Interpolación" @@ -2748,7 +2787,7 @@ msgstr "ETC2" #: editor/editor_export.cpp #, fuzzy msgid "No BPTC Fallbacks" -msgstr "Forzar Shader Fallbacks" +msgstr "No hay retroceso de BPTC" #: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp @@ -4199,7 +4238,7 @@ msgstr "Desactivar Plegado" #: editor/editor_node.cpp msgid "Auto Unfold Foreign Scenes" -msgstr "" +msgstr "Despliegue Automático de Escenas Externas" #: editor/editor_node.cpp msgid "Horizontal Vector2 Editing" @@ -4207,7 +4246,7 @@ msgstr "Edición Horizontal De Vector2" #: editor/editor_node.cpp msgid "Horizontal Vector Types Editing" -msgstr "" +msgstr "Edición de Tipos de Vectores Horizontales" #: editor/editor_node.cpp msgid "Open Resources In Current Inspector" @@ -5331,7 +5370,7 @@ msgstr "Ancho del Minimapa" #: editor/editor_settings.cpp msgid "Mouse Extra Buttons Navigate History" -msgstr "" +msgstr "Botones Extra del Ratón Navegar por el Historial" #: editor/editor_settings.cpp msgid "Appearance" @@ -6027,6 +6066,11 @@ msgstr "" msgid "Flat" msgstr "Plano 0" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "Modo de Colisión" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "Selecciona nodo(s) a importar" @@ -16008,42 +16052,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -#, fuzzy -msgid "Display" -msgstr "Mostrar Todos" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -#, fuzzy -msgid "Height" -msgstr "Luz" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -#, fuzzy -msgid "Test Width" -msgstr "Ancho Izquierda" - -#: main/main.cpp -#, fuzzy -msgid "Test Height" -msgstr "Prueba" - #: main/main.cpp msgid "DPI" msgstr "" @@ -20449,6 +20457,11 @@ msgstr "" "PolÃgono inválido. Se necesitan al menos 2 puntos en modo de construcción " "'Segments'." +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp #, fuzzy msgid "Build Mode" @@ -22273,9 +22286,10 @@ msgid "NavMesh" msgstr "Calcular NavMesh" #: scene/3d/navigation_obstacle.cpp +#, fuzzy msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" "El NavigationObstacle sólo sirve para evitar la colisión de un objeto " "spatial." @@ -24521,6 +24535,11 @@ msgstr "Modo desplazamiento lateral" #: scene/main/node.cpp #, fuzzy +msgid "Physics Interpolation Mode" +msgstr "Modo de Interpolación" + +#: scene/main/node.cpp +#, fuzzy msgid "Display Folded" msgstr "Mostrar Sin Sombreado" @@ -24552,11 +24571,6 @@ msgstr "Multijugador Personalizado" msgid "Process Priority" msgstr "Activar Prioridad" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "Modo de Interpolación" - #: scene/main/scene_tree.cpp scene/main/timer.cpp #, fuzzy msgid "Time Left" @@ -25267,6 +25281,11 @@ msgstr "Separador con nombre" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "Separador de Color de Fuentes" + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "Color Hueso 1" @@ -26061,6 +26080,11 @@ msgstr "Modo Sin Distracciones" #: scene/resources/gradient.cpp #, fuzzy +msgid "Raw Data" +msgstr "Profundidad" + +#: scene/resources/gradient.cpp +#, fuzzy msgid "Offsets" msgstr "Offset:" diff --git a/editor/translations/es_AR.po b/editor/translations/es_AR.po index 622041b7bf..c7beccaa06 100644 --- a/editor/translations/es_AR.po +++ b/editor/translations/es_AR.po @@ -95,12 +95,13 @@ msgstr "Tamaño de Outline:" msgid "Screen Orientation" msgstr "Operador Screen(trama)." -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp #, fuzzy msgid "Window" msgstr "Nueva Ventana" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp #, fuzzy msgid "Borderless" msgstr "PÃxeles del Borde" @@ -109,7 +110,7 @@ msgstr "PÃxeles del Borde" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp #, fuzzy msgid "Fullscreen" msgstr "Act./Desact. Pantalla Completa" @@ -123,7 +124,7 @@ msgstr "" msgid "Minimized" msgstr "Inicializar" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -137,10 +138,11 @@ msgstr "" msgid "Position" msgstr "Posición del Panel" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -640,6 +642,43 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +#, fuzzy +msgid "Display" +msgstr "Mostrar Todo" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +#, fuzzy +msgid "Height" +msgstr "Luz" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Width" +msgstr "Izquierda Ancha" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Height" +msgstr "Prueba" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1249,7 +1288,7 @@ msgstr "Act./Desact. esta pista." msgid "Update Mode (How this property is set)" msgstr "Modo de Actualización (Como esta configurada esta propiedad)" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "Modo de Interpolación" @@ -6188,6 +6227,11 @@ msgstr "" msgid "Flat" msgstr "Flat 0" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "Modo Colisión" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "Seleccionar Nodo(s) para Importar" @@ -16183,42 +16227,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -#, fuzzy -msgid "Display" -msgstr "Mostrar Todo" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -#, fuzzy -msgid "Height" -msgstr "Luz" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -#, fuzzy -msgid "Test Width" -msgstr "Izquierda Ancha" - -#: main/main.cpp -#, fuzzy -msgid "Test Height" -msgstr "Prueba" - #: main/main.cpp msgid "DPI" msgstr "" @@ -20650,6 +20658,11 @@ msgstr "" "PolÃgono inválido. Se necesitan al menos 2 puntos en modo de construcción " "\"Segmentos\"." +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp #, fuzzy msgid "Build Mode" @@ -22505,7 +22518,7 @@ msgstr "Bake NavMesh" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -24797,6 +24810,11 @@ msgstr "Modo Paneo" #: scene/main/node.cpp #, fuzzy +msgid "Physics Interpolation Mode" +msgstr "Modo de Interpolación" + +#: scene/main/node.cpp +#, fuzzy msgid "Display Folded" msgstr "Mostrar Sin Sombreado" @@ -24830,11 +24848,6 @@ msgstr "Asignar Múltiples:" msgid "Process Priority" msgstr "Activar Prioridad" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "Modo de Interpolación" - #: scene/main/scene_tree.cpp scene/main/timer.cpp #, fuzzy msgid "Time Left" @@ -25548,6 +25561,11 @@ msgstr "Separador Nomenclado" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "Operador Color." + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "Cambiar Nombre del Elemento Color" @@ -26354,6 +26372,11 @@ msgstr "Modo Sin Distracciones" #: scene/resources/gradient.cpp #, fuzzy +msgid "Raw Data" +msgstr "Profundidad" + +#: scene/resources/gradient.cpp +#, fuzzy msgid "Offsets" msgstr "Offset:" diff --git a/editor/translations/et.po b/editor/translations/et.po index 327bceafe3..90a691dac9 100644 --- a/editor/translations/et.po +++ b/editor/translations/et.po @@ -79,12 +79,13 @@ msgstr "Suurus: " msgid "Screen Orientation" msgstr "Ava dokumentatsioon" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp #, fuzzy msgid "Window" msgstr "Uus aken" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "" @@ -92,7 +93,7 @@ msgstr "" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Fullscreen" msgstr "" @@ -104,7 +105,7 @@ msgstr "" msgid "Minimized" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -118,10 +119,11 @@ msgstr "" msgid "Position" msgstr "Doki asukoht" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -602,6 +604,41 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +#, fuzzy +msgid "Display" +msgstr "Kuva kõik" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +msgid "Height" +msgstr "" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +msgid "Test Width" +msgstr "" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Height" +msgstr "Testimine" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1197,7 +1234,7 @@ msgstr "Lülita see rada sisse/välja." msgid "Update Mode (How this property is set)" msgstr "Uuendusrežiim (kuidas see omadus on seatud)" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "Interpolatsiooni režiim" @@ -5935,6 +5972,10 @@ msgstr "" msgid "Flat" msgstr "" +#: editor/editor_spin_slider.cpp +msgid "Hide Slider" +msgstr "" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "" @@ -15604,40 +15645,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -#, fuzzy -msgid "Display" -msgstr "Kuva kõik" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -msgid "Height" -msgstr "" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -msgid "Test Width" -msgstr "" - -#: main/main.cpp -#, fuzzy -msgid "Test Height" -msgstr "Testimine" - #: main/main.cpp msgid "DPI" msgstr "" @@ -19868,6 +19875,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp #, fuzzy msgid "Build Mode" @@ -21564,7 +21576,7 @@ msgstr "" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -23697,6 +23709,11 @@ msgstr "Skaleerimisrežiim" #: scene/main/node.cpp #, fuzzy +msgid "Physics Interpolation Mode" +msgstr "Interpolatsiooni režiim" + +#: scene/main/node.cpp +#, fuzzy msgid "Display Folded" msgstr "Kuva varjutamata" @@ -23729,11 +23746,6 @@ msgstr "Sea mitu:" msgid "Process Priority" msgstr "Liigutamisrežiim" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "Interpolatsiooni režiim" - #: scene/main/scene_tree.cpp scene/main/timer.cpp #, fuzzy msgid "Time Left" @@ -24397,6 +24409,11 @@ msgstr "" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "Versioon:" + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "Funktsioonid" @@ -25178,6 +25195,10 @@ msgid "Distance Field" msgstr "Paigalda" #: scene/resources/gradient.cpp +msgid "Raw Data" +msgstr "" + +#: scene/resources/gradient.cpp msgid "Offsets" msgstr "" diff --git a/editor/translations/eu.po b/editor/translations/eu.po index b316e1f11e..bee533c6c1 100644 --- a/editor/translations/eu.po +++ b/editor/translations/eu.po @@ -75,11 +75,12 @@ msgstr "" msgid "Screen Orientation" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "" @@ -87,7 +88,7 @@ msgstr "" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp #, fuzzy msgid "Fullscreen" msgstr "Txandakatu pantaila osoa" @@ -100,7 +101,7 @@ msgstr "" msgid "Minimized" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -114,10 +115,11 @@ msgstr "" msgid "Position" msgstr "Kargatu animazioa" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -588,6 +590,40 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +#, fuzzy +msgid "Display" +msgstr "Erakutsi guztiak" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +msgid "Height" +msgstr "" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +msgid "Test Width" +msgstr "" + +#: core/project_settings.cpp +msgid "Test Height" +msgstr "" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1173,7 +1209,7 @@ msgstr "Pista hau aktibatu/desaktibatu." msgid "Update Mode (How this property is set)" msgstr "Eguneratze mota (Nola ezartzen da)" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "Interpolazio mota" @@ -5847,6 +5883,11 @@ msgstr "" msgid "Flat" msgstr "" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "Talka formak ikusgai" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "Hautatu inportatu nahi dituzun nodoak" @@ -15483,39 +15524,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -#, fuzzy -msgid "Display" -msgstr "Erakutsi guztiak" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -msgid "Height" -msgstr "" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -msgid "Test Width" -msgstr "" - -#: main/main.cpp -msgid "Test Height" -msgstr "" - #: main/main.cpp msgid "DPI" msgstr "" @@ -19673,6 +19681,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp msgid "Build Mode" msgstr "" @@ -21346,7 +21359,7 @@ msgstr "" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -23425,6 +23438,11 @@ msgstr "Atxikitze modua:" #: scene/main/node.cpp #, fuzzy +msgid "Physics Interpolation Mode" +msgstr "Interpolazio mota" + +#: scene/main/node.cpp +#, fuzzy msgid "Display Folded" msgstr "Erakutsi guztiak" @@ -23456,11 +23474,6 @@ msgstr "" msgid "Process Priority" msgstr "Txandakatu modua" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "Interpolazio mota" - #: scene/main/scene_tree.cpp scene/main/timer.cpp msgid "Time Left" msgstr "" @@ -24116,6 +24129,11 @@ msgstr "" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "Enumerazioak" + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "Kendu elementu guztiak" @@ -24881,6 +24899,10 @@ msgid "Distance Field" msgstr "Instalatu" #: scene/resources/gradient.cpp +msgid "Raw Data" +msgstr "" + +#: scene/resources/gradient.cpp msgid "Offsets" msgstr "" diff --git a/editor/translations/extract.py b/editor/translations/extract.py index bd32fc01c7..7f3da400e7 100755 --- a/editor/translations/extract.py +++ b/editor/translations/extract.py @@ -100,6 +100,7 @@ class ExtractType(enum.IntEnum): TEXT = 1 PROPERTY_PATH = 2 GROUP = 3 + SUBGROUP = 4 # Regex "(?P<name>([^"\\]|\\.)*)" creates a group named `name` that matches a string. @@ -115,19 +116,23 @@ message_patterns = { ): ExtractType.TEXT, re.compile(r'_initial_set\("(?P<message>[^"]+?)",'): ExtractType.PROPERTY_PATH, re.compile(r'GLOBAL_DEF(_RST)?(_NOVAL)?(_BASIC)?\("(?P<message>[^"]+?)",'): ExtractType.PROPERTY_PATH, - re.compile(r'GLOBAL_DEF_BASIC\(vformat\("(?P<message>layer_names/\w+)/layer_%d"'): ExtractType.PROPERTY_PATH, re.compile(r'EDITOR_DEF(_RST)?\("(?P<message>[^"]+?)",'): ExtractType.PROPERTY_PATH, re.compile( r'EDITOR_SETTING(_USAGE)?\(Variant::[_A-Z0-9]+, [_A-Z0-9]+, "(?P<message>[^"]+?)",' ): ExtractType.PROPERTY_PATH, re.compile( - r'(ADD_PROPERTYI?|ImportOption|ExportOption)\(PropertyInfo\(Variant::[_A-Z0-9]+, "(?P<message>[^"]+?)"[,)]' + r"(ADD_PROPERTYI?|ImportOption|ExportOption)\(PropertyInfo\(" + + r"Variant::[_A-Z0-9]+" # Name + + r', "(?P<message>[^"]+)"' # Type + + r'(, [_A-Z0-9]+(, "([^"\\]|\\.)*"(, (?P<usage>[_A-Z0-9]+))?)?|\))' # [, hint[, hint string[, usage]]]. ): ExtractType.PROPERTY_PATH, - re.compile( - r"(?!#define )LIMPL_PROPERTY(_RANGE)?\(Variant::[_A-Z0-9]+, (?P<message>[^,]+?)," - ): ExtractType.PROPERTY_PATH, - re.compile(r'ADD_GROUP\("(?P<message>[^"]+?)", "(?P<prefix>[^"]*?)"\)'): ExtractType.GROUP, - re.compile(r'#define WRTC_\w+ "(?P<message>[^"]+?)"'): ExtractType.PROPERTY_PATH, + re.compile(r'ADD_ARRAY\("(?P<message>[^"]+)", '): ExtractType.PROPERTY_PATH, + re.compile(r'ADD_ARRAY_COUNT(_WITH_USAGE_FLAGS)?\("(?P<message>[^"]+)", '): ExtractType.TEXT, + re.compile(r'(ADD_GROUP|GNAME)\("(?P<message>[^"]+)", "(?P<prefix>[^"]*)"\)'): ExtractType.GROUP, + re.compile(r'ADD_GROUP_INDENT\("(?P<message>[^"]+)", "(?P<prefix>[^"]*)", '): ExtractType.GROUP, + re.compile(r'ADD_SUBGROUP\("(?P<message>[^"]+)", "(?P<prefix>[^"]*)"\)'): ExtractType.SUBGROUP, + re.compile(r'ADD_SUBGROUP_INDENT\("(?P<message>[^"]+)", "(?P<prefix>[^"]*)", '): ExtractType.GROUP, + re.compile(r'PNAME\("(?P<message>[^"]+)"\)'): ExtractType.PROPERTY_PATH, } theme_property_patterns = { re.compile(r'set_(constant|font|font_size|stylebox|color|icon)\("(?P<message>[^"]+)", '): ExtractType.PROPERTY_PATH, @@ -203,6 +208,7 @@ def process_file(f, fname): is_block_translator_comment = False translator_comment = "" current_group = "" + current_subgroup = "" patterns = message_patterns if os.path.basename(fname) == "default_theme.cpp": @@ -239,11 +245,25 @@ def process_file(f, fname): if extract_type == ExtractType.TEXT: _add_message(msg, msg_plural, msgctx, location, translator_comment) elif extract_type == ExtractType.PROPERTY_PATH: - if current_group: + if captures.get("usage") == "PROPERTY_USAGE_NO_EDITOR": + continue + + if current_subgroup: + if msg.startswith(current_subgroup): + msg = msg[len(current_subgroup) :] + elif current_subgroup.startswith(msg): + pass # Keep this as-is. See EditorInspector::update_tree(). + else: + current_subgroup = "" + elif current_group: if msg.startswith(current_group): msg = msg[len(current_group) :] + elif current_group.startswith(msg): + pass # Keep this as-is. See EditorInspector::update_tree(). else: current_group = "" + current_subgroup = "" + if "." in msg: # Strip feature tag. msg = msg.split(".", 1)[0] for part in msg.split("/"): @@ -251,6 +271,10 @@ def process_file(f, fname): elif extract_type == ExtractType.GROUP: _add_message(msg, msg_plural, msgctx, location, translator_comment) current_group = captures["prefix"] + current_subgroup = "" + elif extract_type == ExtractType.SUBGROUP: + _add_message(msg, msg_plural, msgctx, location, translator_comment) + current_subgroup = captures["prefix"] translator_comment = "" l = f.readline() diff --git a/editor/translations/fa.po b/editor/translations/fa.po index e4d1d422c5..e3ce955b19 100644 --- a/editor/translations/fa.po +++ b/editor/translations/fa.po @@ -100,12 +100,13 @@ msgstr "باز کردن Ùˆ اجرای یک اسکریپت" msgid "Screen Orientation" msgstr "شمارش ها" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp #, fuzzy msgid "Window" msgstr "چارچوب جدید" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "" @@ -113,7 +114,7 @@ msgstr "" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp #, fuzzy msgid "Fullscreen" msgstr "ØØ§Ù„ت تمام ØµÙØÙ‡" @@ -126,7 +127,7 @@ msgstr "" msgid "Minimized" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -140,10 +141,11 @@ msgstr "" msgid "Position" msgstr "برداشتن موج" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -633,6 +635,42 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +#, fuzzy +msgid "Display" +msgstr "نشان دادن همه" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +msgid "Height" +msgstr "" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Width" +msgstr "خطی" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Height" +msgstr "آزمودن" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1228,7 +1266,7 @@ msgstr "دÙÚ¯Ø±ØØ§Ù„ت٠روشن/خاموش این قطعه." msgid "Update Mode (How this property is set)" msgstr "ØØ§Ù„ت بروزرسانی (Ù†ØÙˆÙ‡ تنظیم این ویژگی)" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "ØØ§Ù„ت درون یابی(درون‌یابی روشی است برای ÛŒØ§ÙØªÙ† مقدار تابع درون یک بازه)" @@ -6014,6 +6052,11 @@ msgstr "" msgid "Flat" msgstr "تخت 1" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "گره انیمیشن" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "انتخاب گره (ها) برای وارد شدن" @@ -16225,41 +16268,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -#, fuzzy -msgid "Display" -msgstr "نشان دادن همه" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -msgid "Height" -msgstr "" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -#, fuzzy -msgid "Test Width" -msgstr "خطی" - -#: main/main.cpp -#, fuzzy -msgid "Test Height" -msgstr "آزمودن" - #: main/main.cpp msgid "DPI" msgstr "" @@ -20612,6 +20620,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp #, fuzzy msgid "Build Mode" @@ -22364,7 +22377,7 @@ msgstr "" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -24540,6 +24553,11 @@ msgstr "انتخاب ØØ§Ù„ت" #: scene/main/node.cpp #, fuzzy +msgid "Physics Interpolation Mode" +msgstr "ØØ§Ù„ت درون یابی(درون‌یابی روشی است برای ÛŒØ§ÙØªÙ† مقدار تابع درون یک بازه)" + +#: scene/main/node.cpp +#, fuzzy msgid "Display Folded" msgstr "نشان دادن همه" @@ -24573,11 +24591,6 @@ msgstr "تعیین چندگانه:" msgid "Process Priority" msgstr "ویرایش صاÙÛŒ ها" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "ØØ§Ù„ت درون یابی(درون‌یابی روشی است برای ÛŒØ§ÙØªÙ† مقدار تابع درون یک بازه)" - #: scene/main/scene_tree.cpp scene/main/timer.cpp #, fuzzy msgid "Time Left" @@ -25260,6 +25273,11 @@ msgstr "" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "شمارش ها:" + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "برداشتن انتخاب شده" @@ -26049,6 +26067,11 @@ msgid "Distance Field" msgstr "نصب کردن" #: scene/resources/gradient.cpp +#, fuzzy +msgid "Raw Data" +msgstr "صادکردن ÙØ§ÛŒÙ„ کتابخانه ای" + +#: scene/resources/gradient.cpp msgid "Offsets" msgstr "" diff --git a/editor/translations/fi.po b/editor/translations/fi.po index 00afd220af..f63f9f4cd6 100644 --- a/editor/translations/fi.po +++ b/editor/translations/fi.po @@ -88,12 +88,13 @@ msgstr "Ääriviivojen koko:" msgid "Screen Orientation" msgstr "Näyttöoperaattori." -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp #, fuzzy msgid "Window" msgstr "Uusi ikkuna" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp #, fuzzy msgid "Borderless" msgstr "Reunapikselit" @@ -102,7 +103,7 @@ msgstr "Reunapikselit" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp #, fuzzy msgid "Fullscreen" msgstr "Siirry koko näytön tilaan" @@ -116,7 +117,7 @@ msgstr "" msgid "Minimized" msgstr "Alusta" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -130,10 +131,11 @@ msgstr "" msgid "Position" msgstr "Telakan sijainti" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -632,6 +634,43 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +#, fuzzy +msgid "Display" +msgstr "Näytä kaikki" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +#, fuzzy +msgid "Height" +msgstr "Valo" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Width" +msgstr "Laaja vasemmalla" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Height" +msgstr "Testaus" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1241,7 +1280,7 @@ msgstr "Kytke tämä raita päälle/pois." msgid "Update Mode (How this property is set)" msgstr "Päivitystila (Kuinka tämä ominaisuus on asetettu)" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "Interpolaatiotila" @@ -6157,6 +6196,11 @@ msgstr "" msgid "Flat" msgstr "Tasainen 0" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "Törmäystila" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "Valitse tuotavat solmut" @@ -16120,42 +16164,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -#, fuzzy -msgid "Display" -msgstr "Näytä kaikki" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -#, fuzzy -msgid "Height" -msgstr "Valo" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -#, fuzzy -msgid "Test Width" -msgstr "Laaja vasemmalla" - -#: main/main.cpp -#, fuzzy -msgid "Test Height" -msgstr "Testaus" - #: main/main.cpp msgid "DPI" msgstr "" @@ -20581,6 +20589,11 @@ msgstr "" "Virheellinen polygoni. 'Segments' luontitilassa tarvitaan ainakin kaksi " "pistettä." +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp #, fuzzy msgid "Build Mode" @@ -22438,9 +22451,10 @@ msgid "NavMesh" msgstr "Kehitä NavMesh" #: scene/3d/navigation_obstacle.cpp +#, fuzzy msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" "NavigationObstacle on olemassa ainoastaan tarjotakseen Spatial objektille " "törmäyksen välttämistä." @@ -24734,6 +24748,11 @@ msgstr "Panorointitila" #: scene/main/node.cpp #, fuzzy +msgid "Physics Interpolation Mode" +msgstr "Interpolaatiotila" + +#: scene/main/node.cpp +#, fuzzy msgid "Display Folded" msgstr "Näytä sävyttämätön" @@ -24767,11 +24786,6 @@ msgstr "Aseta useita:" msgid "Process Priority" msgstr "Ota prioriteetti käyttöön" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "Interpolaatiotila" - #: scene/main/scene_tree.cpp scene/main/timer.cpp #, fuzzy msgid "Time Left" @@ -25485,6 +25499,11 @@ msgstr "Nimetty erotin" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "Värioperaattori." + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "Nimeä väri uudelleen" @@ -26291,6 +26310,11 @@ msgstr "Häiriötön tila" #: scene/resources/gradient.cpp #, fuzzy +msgid "Raw Data" +msgstr "Syvyys" + +#: scene/resources/gradient.cpp +#, fuzzy msgid "Offsets" msgstr "Siirtymä:" diff --git a/editor/translations/fil.po b/editor/translations/fil.po index e1ca820ec1..5966e53547 100644 --- a/editor/translations/fil.po +++ b/editor/translations/fil.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" -"PO-Revision-Date: 2022-03-17 13:58+0000\n" +"PO-Revision-Date: 2022-05-15 09:38+0000\n" "Last-Translator: Marco Santos <enum.scima@gmail.com>\n" "Language-Team: Filipino <https://hosted.weblate.org/projects/godot-engine/" "godot/fil/>\n" @@ -21,159 +21,157 @@ msgstr "" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=2; plural=n != 1 && n != 2 && n != 3 && (n % 10 == 4 " "|| n % 10 == 6 || n % 10 == 9);\n" -"X-Generator: Weblate 4.12-dev\n" +"X-Generator: Weblate 4.13-dev\n" #: core/bind/core_bind.cpp main/main.cpp msgid "Tablet Driver" -msgstr "" +msgstr "Tablet Driver" #: core/bind/core_bind.cpp msgid "Clipboard" -msgstr "" +msgstr "Clipboard" #: core/bind/core_bind.cpp -#, fuzzy msgid "Current Screen" -msgstr "Property Track" +msgstr "Kasalukuyang Screen" #: core/bind/core_bind.cpp msgid "Exit Code" -msgstr "" +msgstr "Umalis sa Code" #: core/bind/core_bind.cpp msgid "V-Sync Enabled" -msgstr "" +msgstr "Binuksan ang V-Sync" #: core/bind/core_bind.cpp main/main.cpp msgid "V-Sync Via Compositor" -msgstr "" +msgstr "V-Sync Via Compositor" #: core/bind/core_bind.cpp main/main.cpp msgid "Delta Smoothing" -msgstr "" +msgstr "Delta Smoothing" #: core/bind/core_bind.cpp msgid "Low Processor Usage Mode" -msgstr "" +msgstr "Mababang Paggamit sa Processor" #: core/bind/core_bind.cpp msgid "Low Processor Usage Mode Sleep (µsec)" -msgstr "" +msgstr "Mababang Paggamit sa Processor Tulog (µsec)" #: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp msgid "Keep Screen On" -msgstr "" +msgstr "Panatilihing Nakabukas ang Screen" #: core/bind/core_bind.cpp msgid "Min Window Size" -msgstr "" +msgstr "Min na Laki ng Window" #: core/bind/core_bind.cpp msgid "Max Window Size" -msgstr "" +msgstr "Max na Laki ng Window" #: core/bind/core_bind.cpp msgid "Screen Orientation" -msgstr "" +msgstr "Screen Orientation" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" -msgstr "" +msgstr "Window" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" -msgstr "" +msgstr "Walang border" #: core/bind/core_bind.cpp msgid "Per Pixel Transparency Enabled" -msgstr "" +msgstr "Nakabukas ang Kada Pixel na Transparency" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Fullscreen" -msgstr "" +msgstr "Fullscreen" #: core/bind/core_bind.cpp msgid "Maximized" -msgstr "" +msgstr "Naka-maximize" #: core/bind/core_bind.cpp msgid "Minimized" -msgstr "" +msgstr "Naka-minimize" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" -msgstr "" +msgstr "Nare-resize" #: core/bind/core_bind.cpp core/os/input_event.cpp scene/2d/node_2d.cpp #: scene/2d/physics_body_2d.cpp scene/2d/remote_transform_2d.cpp #: scene/3d/physics_body.cpp scene/3d/remote_transform.cpp #: scene/gui/control.cpp scene/gui/line_edit.cpp #: scene/resources/default_theme/default_theme.cpp -#, fuzzy msgid "Position" -msgstr "Pagulit ng Animation" +msgstr "Posisyon" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp #: scene/resources/visual_shader.cpp servers/visual_server.cpp msgid "Size" -msgstr "" +msgstr "Laki" #: core/bind/core_bind.cpp msgid "Endian Swap" -msgstr "" +msgstr "Endian Swap" #: core/bind/core_bind.cpp -#, fuzzy msgid "Editor Hint" -msgstr "I-edit" +msgstr "Editor Hint" #: core/bind/core_bind.cpp msgid "Print Error Messages" -msgstr "" +msgstr "I-print mga Mensahe ng Error" #: core/bind/core_bind.cpp msgid "Iterations Per Second" -msgstr "" +msgstr "Ikot Kada Segundo" #: core/bind/core_bind.cpp msgid "Target FPS" -msgstr "" +msgstr "Target na FPS" #: core/bind/core_bind.cpp msgid "Time Scale" -msgstr "" +msgstr "Iskala ng Oras" #: core/bind/core_bind.cpp main/main.cpp msgid "Physics Jitter Fix" -msgstr "" +msgstr "Ayos sa Jitter ng Pisika" #: core/bind/core_bind.cpp editor/plugins/version_control_editor_plugin.cpp msgid "Error" -msgstr "" +msgstr "Error" #: core/bind/core_bind.cpp msgid "Error String" -msgstr "" +msgstr "String ng Error" #: core/bind/core_bind.cpp -#, fuzzy msgid "Error Line" -msgstr "Salamin" +msgstr "Linya ng Error" #: core/bind/core_bind.cpp msgid "Result" -msgstr "" +msgstr "Resulta" #: core/command_queue_mt.cpp core/message_queue.cpp main/main.cpp msgid "Memory" -msgstr "" +msgstr "Memory" #: core/command_queue_mt.cpp core/message_queue.cpp #: core/register_core_types.cpp drivers/gles2/rasterizer_canvas_base_gles2.cpp @@ -184,23 +182,22 @@ msgstr "" #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h #: servers/visual_server.cpp msgid "Limits" -msgstr "" +msgstr "Mga Limit" #: core/command_queue_mt.cpp msgid "Command Queue" -msgstr "" +msgstr "Pila ng Utos" #: core/command_queue_mt.cpp msgid "Multithreading Queue Size (KB)" -msgstr "" +msgstr "Laki ng Pila sa Multithreading (KB)" #: core/func_ref.cpp modules/visual_script/visual_script_builtin_funcs.cpp #: modules/visual_script/visual_script_func_nodes.cpp #: modules/visual_script/visual_script_nodes.cpp #: scene/resources/visual_shader_nodes.cpp -#, fuzzy msgid "Function" -msgstr "Mga Functions:" +msgstr "Function" #: core/image.cpp core/packed_data_container.cpp #: modules/minimp3/audio_stream_mp3.cpp @@ -211,119 +208,114 @@ msgstr "Mga Functions:" #: scene/resources/concave_polygon_shape.cpp scene/resources/curve.cpp #: scene/resources/polygon_path_finder.cpp scene/resources/texture.cpp msgid "Data" -msgstr "" +msgstr "Data" #: core/io/file_access_network.cpp core/register_core_types.cpp #: editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h msgid "Network" -msgstr "" +msgstr "Network" #: core/io/file_access_network.cpp -#, fuzzy msgid "Remote FS" -msgstr "Alisin" +msgstr "Remote FS" #: core/io/file_access_network.cpp -#, fuzzy msgid "Page Size" -msgstr "Pahina: " +msgstr "Laki ng Pahina" #: core/io/file_access_network.cpp msgid "Page Read Ahead" -msgstr "" +msgstr "Page Read Ahead" #: core/io/http_client.cpp msgid "Blocking Mode Enabled" -msgstr "" +msgstr "Binuksan ang Pagharang" #: core/io/http_client.cpp -#, fuzzy msgid "Connection" -msgstr "Ikabit" +msgstr "Koneksyon" #: core/io/http_client.cpp msgid "Read Chunk Size" -msgstr "" +msgstr "Laki ng Read Chunk" #: core/io/marshalls.cpp msgid "Object ID" -msgstr "" +msgstr "Object ID" #: core/io/multiplayer_api.cpp core/io/packet_peer.cpp msgid "Allow Object Decoding" -msgstr "" +msgstr "Payagan ang Pag-decode sa Object" #: core/io/multiplayer_api.cpp scene/main/scene_tree.cpp msgid "Refuse New Network Connections" -msgstr "" +msgstr "Tanggihan ang mga Bagong Koneksyon sa Network" #: core/io/multiplayer_api.cpp scene/main/scene_tree.cpp msgid "Network Peer" -msgstr "" +msgstr "Network Peer" #: core/io/multiplayer_api.cpp scene/animation/animation_player.cpp msgid "Root Node" -msgstr "" +msgstr "Root Node" #: core/io/networked_multiplayer_peer.cpp -#, fuzzy msgid "Refuse New Connections" -msgstr "Ikabit" +msgstr "Tanggihan ang mga Bagong Koneksyon" #: core/io/networked_multiplayer_peer.cpp msgid "Transfer Mode" -msgstr "" +msgstr "Paglipat" #: core/io/packet_peer.cpp msgid "Encode Buffer Max Size" -msgstr "" +msgstr "Max na Laki ng Encode Buffer" #: core/io/packet_peer.cpp msgid "Input Buffer Max Size" -msgstr "" +msgstr "Max na Laki ng Input Buffer" #: core/io/packet_peer.cpp msgid "Output Buffer Max Size" -msgstr "" +msgstr "Max na Laki ng Output Buffer" #: core/io/packet_peer.cpp msgid "Stream Peer" -msgstr "" +msgstr "Stream Peer" #: core/io/stream_peer.cpp msgid "Big Endian" -msgstr "" +msgstr "Big Endian" #: core/io/stream_peer.cpp msgid "Data Array" -msgstr "" +msgstr "Data Array" #: core/io/stream_peer_ssl.cpp msgid "Blocking Handshake" -msgstr "" +msgstr "Hinaharang ang Handshake" #: core/io/udp_server.cpp msgid "Max Pending Connections" -msgstr "" +msgstr "Max na Nakabinbing Koneksyon" #: 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 "" -"Invalid na type argument para sa convert(), gamitin ang TYPE_* na constant." +"Invalid na argumento ng type sa convert(), gumamit ng mga TYPE_* constant." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp msgid "Expected a string of length 1 (a character)." -msgstr "Inaasahan ang isang string na may haba na 1 (isang karakter)." +msgstr "Inaasahan ang isang string na may habang 1 (karakter)." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: 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 "" -"Kulang ang mga byte para sa pagde-decode, o di kaya'y invalid na format." +msgstr "Kulang sa bytes para i-decode ang bytes, o invalid na format." #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" @@ -335,7 +327,7 @@ msgstr "Di magagamit ang self dahil null ang instance (di pinasa)" #: core/math/expression.cpp msgid "Invalid operands to operator %s, %s and %s." -msgstr "Mga invalid na operand sa operator na %s, %s at %s." +msgstr "Mga invalid na operand sa operator %s, %s, at %s." #: core/math/expression.cpp msgid "Invalid index of type %s for base type %s" @@ -343,11 +335,11 @@ msgstr "Invalid na index ng type na %s para sa base type na %s" #: core/math/expression.cpp msgid "Invalid named index '%s' for base type %s" -msgstr "Invalid na pinangalanang index na '%s' para sa base type na %s" +msgstr "Invalid na napangalanang index na '%s' para sa base type na %s" #: core/math/expression.cpp msgid "Invalid arguments to construct '%s'" -msgstr "Mga invalid na argument para i-construct ang '%s'" +msgstr "Mga invalid na argumento para i-construct ang '%s'" #: core/math/expression.cpp msgid "On call to '%s':" @@ -356,182 +348,177 @@ msgstr "On call sa '%s':" #: core/math/random_number_generator.cpp #: modules/opensimplex/open_simplex_noise.cpp msgid "Seed" -msgstr "" +msgstr "Seed" #: core/math/random_number_generator.cpp msgid "State" -msgstr "" +msgstr "Estado" #: core/message_queue.cpp msgid "Message Queue" -msgstr "" +msgstr "Pila ng Mensahe" #: core/message_queue.cpp msgid "Max Size (KB)" -msgstr "" +msgstr "Max na Laki (KB)" #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" -msgstr "" +msgstr "Device" #: core/os/input_event.cpp msgid "Alt" -msgstr "" +msgstr "Alt" #: core/os/input_event.cpp msgid "Shift" -msgstr "" +msgstr "Shift" #: core/os/input_event.cpp msgid "Control" -msgstr "" +msgstr "Control" #: core/os/input_event.cpp msgid "Meta" -msgstr "" +msgstr "Meta" #: core/os/input_event.cpp -#, fuzzy msgid "Command" -msgstr "Komunidad" +msgstr "Command" #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp msgid "Pressed" -msgstr "" +msgstr "Pinindot" #: core/os/input_event.cpp msgid "Scancode" -msgstr "" +msgstr "Scancode" #: core/os/input_event.cpp msgid "Physical Scancode" -msgstr "" +msgstr "Pisikal na Scancode" #: core/os/input_event.cpp msgid "Unicode" -msgstr "" +msgstr "Unicode" #: core/os/input_event.cpp msgid "Echo" -msgstr "" +msgstr "Echo" #: core/os/input_event.cpp scene/gui/base_button.cpp msgid "Button Mask" -msgstr "" +msgstr "Mask ng Button" #: core/os/input_event.cpp scene/2d/node_2d.cpp scene/gui/control.cpp -#, fuzzy msgid "Global Position" -msgstr "Pagulit ng Animation" +msgstr "Global na Posisyon" #: core/os/input_event.cpp msgid "Factor" -msgstr "" +msgstr "Factor" #: core/os/input_event.cpp msgid "Button Index" -msgstr "" +msgstr "Index ng Button" #: core/os/input_event.cpp msgid "Doubleclick" -msgstr "" +msgstr "Dobleng pindot" #: core/os/input_event.cpp msgid "Tilt" -msgstr "" +msgstr "Kiling" #: core/os/input_event.cpp msgid "Pressure" -msgstr "" +msgstr "Presyur" #: core/os/input_event.cpp msgid "Relative" -msgstr "" +msgstr "Relatibo" #: core/os/input_event.cpp scene/2d/camera_2d.cpp scene/2d/cpu_particles_2d.cpp #: scene/3d/cpu_particles.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/resources/environment.cpp #: scene/resources/particles_material.cpp msgid "Speed" -msgstr "" +msgstr "Bilis" #: core/os/input_event.cpp editor/project_settings_editor.cpp #: scene/3d/sprite_3d.cpp msgid "Axis" -msgstr "" +msgstr "Axis" #: core/os/input_event.cpp -#, fuzzy msgid "Axis Value" -msgstr "Halaga:" +msgstr "Value ng Axis" #: core/os/input_event.cpp modules/visual_script/visual_script_func_nodes.cpp msgid "Index" -msgstr "" +msgstr "Index" #: core/os/input_event.cpp editor/project_settings_editor.cpp #: modules/visual_script/visual_script_nodes.cpp #: scene/2d/touch_screen_button.cpp msgid "Action" -msgstr "" +msgstr "Gawain" #: core/os/input_event.cpp scene/resources/environment.cpp #: scene/resources/material.cpp msgid "Strength" -msgstr "" +msgstr "Lakas" #: core/os/input_event.cpp msgid "Delta" -msgstr "" +msgstr "Delta" #: core/os/input_event.cpp -#, fuzzy msgid "Channel" -msgstr "Baguhin" +msgstr "Channel" #: core/os/input_event.cpp main/main.cpp msgid "Message" -msgstr "" +msgstr "Mensahe" #: core/os/input_event.cpp msgid "Pitch" -msgstr "" +msgstr "Tinis" #: core/os/input_event.cpp scene/2d/cpu_particles_2d.cpp #: scene/2d/physics_body_2d.cpp scene/3d/cpu_particles.cpp #: scene/3d/physics_body.cpp scene/resources/particles_material.cpp msgid "Velocity" -msgstr "" +msgstr "Belosidad" #: core/os/input_event.cpp msgid "Instrument" -msgstr "" +msgstr "Instrumento" #: core/os/input_event.cpp msgid "Controller Number" -msgstr "" +msgstr "Bilang ng Controller" #: core/os/input_event.cpp msgid "Controller Value" -msgstr "" +msgstr "Value ng Controller" #: core/project_settings.cpp editor/editor_node.cpp main/main.cpp #: platform/iphone/export/export.cpp platform/osx/export/export.cpp #: platform/windows/export/export.cpp -#, fuzzy msgid "Application" -msgstr "Pagulit ng Animation" +msgstr "Application" #: core/project_settings.cpp main/main.cpp msgid "Config" -msgstr "" +msgstr "Config" #: core/project_settings.cpp msgid "Project Settings Override" -msgstr "" +msgstr "Override sa Pagsasaayos ng Proyekto" #: core/project_settings.cpp core/resource.cpp #: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp @@ -542,7 +529,7 @@ msgstr "" #: platform/osx/export/export.cpp scene/2d/area_2d.cpp scene/3d/area.cpp #: scene/main/node.cpp msgid "Name" -msgstr "" +msgstr "Pangalan" #: core/project_settings.cpp editor/editor_help.cpp #: modules/visual_script/visual_script_nodes.cpp platform/uwp/export/export.cpp @@ -554,132 +541,163 @@ msgstr "Paglalarawan" #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp #: main/main.cpp msgid "Run" -msgstr "" +msgstr "Patakbuhin" #: core/project_settings.cpp editor/editor_node.cpp #: editor/run_settings_dialog.cpp main/main.cpp msgid "Main Scene" -msgstr "" +msgstr "Pangunahing Eksena" #: core/project_settings.cpp msgid "Disable stdout" -msgstr "" +msgstr "Patayin ang stdout" #: core/project_settings.cpp msgid "Disable stderr" -msgstr "" +msgstr "Patayin ang stderr" #: core/project_settings.cpp msgid "Use Hidden Project Data Directory" -msgstr "" +msgstr "Gamitin ang Hidden Project Data Directory" #: core/project_settings.cpp msgid "Use Custom User Dir" -msgstr "" +msgstr "Gamitin ang Sariling User Dir" #: core/project_settings.cpp msgid "Custom User Dir Name" +msgstr "Pangalan ng Sariling User Dir" + +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +msgid "Display" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +msgid "Height" +msgstr "" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +msgid "Test Width" +msgstr "" + +#: core/project_settings.cpp +msgid "Test Height" msgstr "" #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" -msgstr "" +msgstr "Tunog" #: core/project_settings.cpp msgid "Default Bus Layout" -msgstr "" +msgstr "Default na Bus Layout" #: core/project_settings.cpp editor/editor_export.cpp #: editor/editor_file_system.cpp editor/editor_node.cpp #: editor/editor_settings.cpp editor/script_create_dialog.cpp #: scene/2d/camera_2d.cpp scene/3d/light.cpp scene/main/node.cpp msgid "Editor" -msgstr "" +msgstr "Editor" #: core/project_settings.cpp msgid "Main Run Args" -msgstr "" +msgstr "Pangunahing Args sa Pagtakbo" #: core/project_settings.cpp msgid "Search In File Extensions" -msgstr "" +msgstr "Maghanap sa mga File Extension" #: core/project_settings.cpp msgid "Script Templates Search Path" -msgstr "" +msgstr "Path ng mga Hahanaping Script Template" #: core/project_settings.cpp editor/editor_node.cpp #: editor/plugins/version_control_editor_plugin.cpp msgid "Version Control" -msgstr "" +msgstr "Version Control" #: core/project_settings.cpp msgid "Autoload On Startup" -msgstr "" +msgstr "Kusang i-load sa Simula" #: core/project_settings.cpp msgid "Plugin Name" -msgstr "" +msgstr "Pangalan ng Plugin" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp msgid "Input" -msgstr "" +msgstr "Input" #: core/project_settings.cpp msgid "UI Accept" -msgstr "" +msgstr "UI Tanggapin" #: core/project_settings.cpp -#, fuzzy msgid "UI Select" -msgstr "Burahin ang (mga) Napiling Key" +msgstr "UI Pagpili" #: core/project_settings.cpp msgid "UI Cancel" -msgstr "" +msgstr "UI Ikansela" #: core/project_settings.cpp msgid "UI Focus Next" -msgstr "" +msgstr "UI Ipokus sa Susunod" #: core/project_settings.cpp msgid "UI Focus Prev" -msgstr "" +msgstr "UI Ipokus sa Huli" #: core/project_settings.cpp msgid "UI Left" -msgstr "" +msgstr "UI Kaliwa" #: core/project_settings.cpp msgid "UI Right" -msgstr "" +msgstr "UI Kanan" #: core/project_settings.cpp msgid "UI Up" -msgstr "" +msgstr "UI Taas" #: core/project_settings.cpp msgid "UI Down" -msgstr "" +msgstr "UI Baba" #: core/project_settings.cpp -#, fuzzy msgid "UI Page Up" -msgstr "Pahina: " +msgstr "UI Page Up" #: core/project_settings.cpp msgid "UI Page Down" -msgstr "" +msgstr "UI Page Down" #: core/project_settings.cpp msgid "UI Home" -msgstr "" +msgstr "UI Home" #: core/project_settings.cpp msgid "UI End" -msgstr "" +msgstr "UI End" #: core/project_settings.cpp main/main.cpp modules/bullet/register_types.cpp #: modules/bullet/space_bullet.cpp scene/2d/physics_body_2d.cpp @@ -689,7 +707,7 @@ msgstr "" #: servers/physics_2d/physics_2d_server_wrap_mt.h #: servers/physics_2d/space_2d_sw.cpp msgid "Physics" -msgstr "" +msgstr "Pisika" #: core/project_settings.cpp editor/editor_settings.cpp #: editor/import/resource_importer_layered_texture.cpp @@ -699,11 +717,11 @@ msgstr "" #: scene/3d/physics_body.cpp scene/resources/world.cpp #: servers/physics/space_sw.cpp msgid "3D" -msgstr "" +msgstr "3D" #: core/project_settings.cpp msgid "Smooth Trimesh Collision" -msgstr "" +msgstr "Smooth na Banggaan ng Trimesh" #: core/project_settings.cpp drivers/gles2/rasterizer_canvas_base_gles2.cpp #: drivers/gles2/rasterizer_scene_gles2.cpp @@ -715,7 +733,7 @@ msgstr "" #: scene/main/viewport.cpp servers/visual/visual_server_scene.cpp #: servers/visual_server.cpp msgid "Rendering" -msgstr "" +msgstr "Pagre-render" #: core/project_settings.cpp drivers/gles2/rasterizer_storage_gles2.cpp #: drivers/gles3/rasterizer_scene_gles3.cpp @@ -725,17 +743,17 @@ msgstr "" #: scene/resources/multimesh.cpp servers/visual/visual_server_scene.cpp #: servers/visual_server.cpp msgid "Quality" -msgstr "" +msgstr "Kalidad" #: core/project_settings.cpp scene/animation/animation_tree.cpp #: scene/gui/file_dialog.cpp scene/main/scene_tree.cpp #: servers/visual_server.cpp msgid "Filters" -msgstr "" +msgstr "Mga Filter" #: core/project_settings.cpp scene/main/viewport.cpp msgid "Sharpen Intensity" -msgstr "" +msgstr "Tindi ng Tulis" #: core/project_settings.cpp editor/editor_export.cpp editor/editor_node.cpp #: editor/editor_settings.cpp editor/plugins/script_editor_plugin.cpp @@ -747,123 +765,122 @@ msgstr "" #: scene/main/scene_tree.cpp scene/resources/shape_2d.cpp #: servers/visual_server.cpp msgid "Debug" -msgstr "" +msgstr "Debug" #: core/project_settings.cpp main/main.cpp modules/gdscript/gdscript.cpp #: modules/visual_script/visual_script.cpp scene/resources/dynamic_font.cpp msgid "Settings" -msgstr "" +msgstr "Pagsasaayos" #: core/project_settings.cpp editor/script_editor_debugger.cpp main/main.cpp #: modules/mono/mono_gd/gd_mono.cpp msgid "Profiler" -msgstr "" +msgstr "Profiler" #: core/project_settings.cpp -#, fuzzy msgid "Max Functions" -msgstr "Mga Functions:" +msgstr "Max na Function" #: core/project_settings.cpp scene/3d/vehicle_body.cpp msgid "Compression" -msgstr "" +msgstr "Compression" #: core/project_settings.cpp msgid "Formats" -msgstr "" +msgstr "Mga Format" #: core/project_settings.cpp msgid "Zstd" -msgstr "" +msgstr "Zstd" #: core/project_settings.cpp msgid "Long Distance Matching" -msgstr "" +msgstr "Pagtugma sa Mahabang Layo" #: core/project_settings.cpp msgid "Compression Level" -msgstr "" +msgstr "Compression Level" #: core/project_settings.cpp msgid "Window Log Size" -msgstr "" +msgstr "Laki ng Log ng Window" #: core/project_settings.cpp msgid "Zlib" -msgstr "" +msgstr "Zlib" #: core/project_settings.cpp msgid "Gzip" -msgstr "" +msgstr "Gzip" #: core/project_settings.cpp platform/android/export/export.cpp msgid "Android" -msgstr "" +msgstr "Android" #: core/project_settings.cpp msgid "Modules" -msgstr "" +msgstr "Mga Module" #: core/register_core_types.cpp msgid "TCP" -msgstr "" +msgstr "TCP" #: core/register_core_types.cpp msgid "Connect Timeout Seconds" -msgstr "" +msgstr "Segundo ng Timeout sa Pagkonekta" #: core/register_core_types.cpp msgid "Packet Peer Stream" -msgstr "" +msgstr "Packet Peer Stream" #: core/register_core_types.cpp msgid "Max Buffer (Power of 2)" -msgstr "" +msgstr "Max na Buffer (Lakas ng 2)" #: core/register_core_types.cpp editor/editor_settings.cpp main/main.cpp msgid "SSL" -msgstr "" +msgstr "SSL" #: core/register_core_types.cpp main/main.cpp msgid "Certificates" -msgstr "" +msgstr "Mga Katibayan" #: core/resource.cpp editor/dependency_editor.cpp #: editor/editor_resource_picker.cpp #: modules/visual_script/visual_script_nodes.cpp msgid "Resource" -msgstr "" +msgstr "Resource" #: core/resource.cpp msgid "Local To Scene" -msgstr "" +msgstr "Lokal sa Eksena" #: core/resource.cpp editor/dependency_editor.cpp #: editor/editor_autoload_settings.cpp editor/plugins/path_editor_plugin.cpp #: editor/project_manager.cpp editor/project_settings_editor.cpp #: modules/visual_script/visual_script_nodes.cpp msgid "Path" -msgstr "" +msgstr "Daan" #: core/script_language.cpp msgid "Source Code" -msgstr "" +msgstr "Source Code" #: core/translation.cpp msgid "Messages" -msgstr "" +msgstr "Mga Mensahe" #: core/translation.cpp editor/project_settings_editor.cpp msgid "Locale" -msgstr "" +msgstr "Lokal" #: core/translation.cpp msgid "Test" -msgstr "" +msgstr "Subok" #: core/translation.cpp scene/resources/font.cpp msgid "Fallback" -msgstr "" +msgstr "Fallback" #: core/ustring.cpp scene/resources/segment_shape_2d.cpp msgid "B" @@ -899,17 +916,17 @@ msgstr "EiB" #: drivers/gles3/rasterizer_scene_gles3.cpp #: drivers/gles3/rasterizer_storage_gles3.cpp modules/gltf/gltf_state.cpp msgid "Buffers" -msgstr "" +msgstr "Mga Buffer" #: drivers/gles2/rasterizer_canvas_base_gles2.cpp #: drivers/gles3/rasterizer_canvas_base_gles3.cpp msgid "Canvas Polygon Buffer Size (KB)" -msgstr "" +msgstr "Laki ng Buffer ng Canvas Polygon (KB)" #: drivers/gles2/rasterizer_canvas_base_gles2.cpp #: drivers/gles3/rasterizer_canvas_base_gles3.cpp msgid "Canvas Polygon Index Buffer Size (KB)" -msgstr "" +msgstr "Index Buffer ng Canvas Polygon (KB)" #: drivers/gles2/rasterizer_canvas_base_gles2.cpp #: drivers/gles3/rasterizer_canvas_base_gles3.cpp editor/editor_settings.cpp @@ -920,52 +937,52 @@ msgstr "" #: servers/physics_2d/physics_2d_server_wrap_mt.h #: servers/physics_2d/space_2d_sw.cpp servers/visual_server.cpp msgid "2D" -msgstr "" +msgstr "2D" #: drivers/gles2/rasterizer_canvas_base_gles2.cpp #: drivers/gles3/rasterizer_canvas_base_gles3.cpp msgid "Snapping" -msgstr "" +msgstr "Pag-snap" #: drivers/gles2/rasterizer_canvas_base_gles2.cpp #: drivers/gles3/rasterizer_canvas_base_gles3.cpp msgid "Use GPU Pixel Snap" -msgstr "" +msgstr "Gamitin ang GPU Pixel Snap" #: drivers/gles2/rasterizer_scene_gles2.cpp #: drivers/gles3/rasterizer_scene_gles3.cpp msgid "Immediate Buffer Size (KB)" -msgstr "" +msgstr "Agad na Laki ng Buffer (KB)" #: drivers/gles2/rasterizer_storage_gles2.cpp #: drivers/gles3/rasterizer_storage_gles3.cpp msgid "Lightmapping" -msgstr "" +msgstr "Pagla-lightmap" #: drivers/gles2/rasterizer_storage_gles2.cpp #: drivers/gles3/rasterizer_storage_gles3.cpp msgid "Use Bicubic Sampling" -msgstr "" +msgstr "Gamitin ang Pag-sample na Bicubic" #: drivers/gles3/rasterizer_scene_gles3.cpp msgid "Max Renderable Elements" -msgstr "" +msgstr "Max na Mare-render na Elemento" #: drivers/gles3/rasterizer_scene_gles3.cpp msgid "Max Renderable Lights" -msgstr "" +msgstr "Max na Mare-render na Ilaw" #: drivers/gles3/rasterizer_scene_gles3.cpp msgid "Max Renderable Reflections" -msgstr "" +msgstr "Max na Mare-render na Repleksyon" #: drivers/gles3/rasterizer_scene_gles3.cpp msgid "Max Lights Per Object" -msgstr "" +msgstr "Max na Ilaw Kada Object" #: drivers/gles3/rasterizer_scene_gles3.cpp msgid "Subsurface Scattering" -msgstr "" +msgstr "Subsurface Scattering" #: drivers/gles3/rasterizer_scene_gles3.cpp #: editor/import/resource_importer_texture.cpp @@ -977,27 +994,27 @@ msgstr "" #: scene/main/canvas_layer.cpp scene/resources/environment.cpp #: scene/resources/material.cpp scene/resources/particles_material.cpp msgid "Scale" -msgstr "" +msgstr "Iskala" #: drivers/gles3/rasterizer_scene_gles3.cpp msgid "Follow Surface" -msgstr "" +msgstr "Sundan ang Surface" #: drivers/gles3/rasterizer_scene_gles3.cpp msgid "Weight Samples" -msgstr "" +msgstr "Mga Sample sa Bigat" #: drivers/gles3/rasterizer_scene_gles3.cpp msgid "Voxel Cone Tracing" -msgstr "" +msgstr "Pagte-trace sa Voxel Cone" #: drivers/gles3/rasterizer_scene_gles3.cpp scene/resources/environment.cpp msgid "High Quality" -msgstr "" +msgstr "Mataas na Kalidad" #: drivers/gles3/rasterizer_storage_gles3.cpp msgid "Blend Shape Max Buffer Size (KB)" -msgstr "" +msgstr "Max na Laki ng Buffer ng Blend Shape (KB)" #: editor/animation_bezier_editor.cpp msgid "Free" @@ -1017,7 +1034,7 @@ msgstr "Oras:" #: editor/animation_bezier_editor.cpp msgid "Value:" -msgstr "Halaga:" +msgstr "Value:" #: editor/animation_bezier_editor.cpp msgid "Insert Key Here" @@ -1041,60 +1058,60 @@ msgstr "Maglipat ng (mga) Bezier Point" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Duplicate Keys" -msgstr "I-animate ang mga Dinobleng Key" +msgstr "Anim Duplicate Keys" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Delete Keys" -msgstr "I-animate ang mga Binurang Key" +msgstr "Anim Delete Keys" #: editor/animation_track_editor.cpp msgid "Anim Change Keyframe Time" -msgstr "I-animate ang Pagbago sa Oras ng Keyframe" +msgstr "Anim Change Keyframe Time" #: editor/animation_track_editor.cpp msgid "Anim Change Transition" -msgstr "I-animate ang Pagbago sa Transition" +msgstr "Anim Change Transition" #: editor/animation_track_editor.cpp msgid "Anim Change Transform" -msgstr "I-animate ang Pagbago sa Transform" +msgstr "Anim Change Transform" #: editor/animation_track_editor.cpp msgid "Anim Change Keyframe Value" -msgstr "I-animate ang Pagbago sa Halaga ng Keyframe" +msgstr "Anim Change Keyframe Value" #: editor/animation_track_editor.cpp msgid "Anim Change Call" -msgstr "Pagbago ng Pagtawag sa Animation" +msgstr "Anim Change Call" #: editor/animation_track_editor.cpp msgid "Anim Multi Change Keyframe Time" -msgstr "Pagbago ng Time ng Maraming Keyframe ng Animation" +msgstr "Anim Multi Change Keyframe Time" #: editor/animation_track_editor.cpp msgid "Anim Multi Change Transition" -msgstr "Pagbago ng Maraming Transition ng Animation" +msgstr "Anim Multi Change Transition" #: editor/animation_track_editor.cpp msgid "Anim Multi Change Transform" -msgstr "Pagbago ng Maraming Transform ng Animation" +msgstr "Anim Multi Change Transform" #: editor/animation_track_editor.cpp msgid "Anim Multi Change Keyframe Value" -msgstr "Pagbago ng Nilalaman ng Maraming Keyframe ng Animation" +msgstr "Anim Multi Change Keyframe Value" #: editor/animation_track_editor.cpp msgid "Anim Multi Change Call" -msgstr "Pagbago ng Maraming Pagtawag ng Animation" +msgstr "Anim Multi Change Call" #: editor/animation_track_editor.cpp msgid "Change Animation Length" -msgstr "Pagbago ng Haba ng Animation" +msgstr "Baguhin ang Haba ng Animation" #: editor/animation_track_editor.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Change Animation Loop" -msgstr "Pagbago ng Animation Loop" +msgstr "Baguhin ang Animation Loop" #: editor/animation_track_editor.cpp msgid "Property Track" @@ -1106,19 +1123,19 @@ msgstr "3D Transform Track" #: editor/animation_track_editor.cpp msgid "Call Method Track" -msgstr "" +msgstr "Call Method Track" #: editor/animation_track_editor.cpp msgid "Bezier Curve Track" -msgstr "" +msgstr "Bezier Curve Track" #: editor/animation_track_editor.cpp msgid "Audio Playback Track" -msgstr "" +msgstr "Audio Playback Track" #: editor/animation_track_editor.cpp msgid "Animation Playback Track" -msgstr "" +msgstr "Animation Playback Track" #: editor/animation_track_editor.cpp msgid "Animation length (frames)" @@ -1134,40 +1151,40 @@ msgstr "Magdagdag ng Track" #: editor/animation_track_editor.cpp msgid "Animation Looping" -msgstr "Pagulit ng Animation" +msgstr "Pag-loop sa Animation" #: editor/animation_track_editor.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Functions:" -msgstr "Mga Functions:" +msgstr "Mga Function:" #: editor/animation_track_editor.cpp msgid "Audio Clips:" -msgstr "Mga clip ng tunog:" +msgstr "Mga Audio Clip:" #: editor/animation_track_editor.cpp msgid "Anim Clips:" -msgstr "Mga clip ng Anim:" +msgstr "Mga Anim Clip:" #: editor/animation_track_editor.cpp msgid "Change Track Path" -msgstr "Ibahin ang landas ng Track" +msgstr "Baguhin ang Track Path" #: editor/animation_track_editor.cpp msgid "Toggle this track on/off." -msgstr "Ilipat sa on/off ang track na ito." +msgstr "Buksan/isara ang track na ito." #: editor/animation_track_editor.cpp msgid "Update Mode (How this property is set)" -msgstr "Baguhin ang Mode (Kung paano na-set ang property)" +msgstr "Update Mode (kung paano itinatakda ang property na ito)" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" -msgstr "" +msgstr "Interpolation Mode" #: editor/animation_track_editor.cpp msgid "Loop Wrap Mode (Interpolate end with beginning on loop)" -msgstr "" +msgstr "Loop Wrap Mode (ini-interpolate ang dulo sa simula ng loop)" #: editor/animation_track_editor.cpp msgid "Remove this track." @@ -1175,11 +1192,11 @@ msgstr "Tanggalin ang track na ito." #: editor/animation_track_editor.cpp msgid "Time (s): " -msgstr "Oras (s): " +msgstr "Oras (seg): " #: editor/animation_track_editor.cpp msgid "Toggle Track Enabled" -msgstr "" +msgstr "Nakabukas ang Toggle Track" #: editor/animation_track_editor.cpp msgid "Continuous" @@ -1187,15 +1204,15 @@ msgstr "Tuloy-tuloy" #: editor/animation_track_editor.cpp msgid "Discrete" -msgstr "" +msgstr "Diskreto" #: editor/animation_track_editor.cpp msgid "Trigger" -msgstr "" +msgstr "Trigger" #: editor/animation_track_editor.cpp scene/3d/baked_lightmap.cpp msgid "Capture" -msgstr "" +msgstr "I-capture" #: editor/animation_track_editor.cpp msgid "Nearest" @@ -1205,52 +1222,52 @@ msgstr "Pinakamalapit" #: editor/property_editor.cpp scene/2d/physics_body_2d.cpp #: scene/3d/physics_body.cpp msgid "Linear" -msgstr "" +msgstr "Linear" #: editor/animation_track_editor.cpp msgid "Cubic" -msgstr "" +msgstr "Cubic" #: editor/animation_track_editor.cpp msgid "Clamp Loop Interp" -msgstr "" +msgstr "Clamp Loop Interp" #: editor/animation_track_editor.cpp msgid "Wrap Loop Interp" -msgstr "" +msgstr "Wrap Loop Interp" #: editor/animation_track_editor.cpp #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key" -msgstr "Magpasok Ang Key" +msgstr "Magpasok ng Key" #: editor/animation_track_editor.cpp msgid "Duplicate Key(s)" -msgstr "Kopyahin Ang (Mga) Key(s)" +msgstr "Doblehin ang (mga) Key" #: editor/animation_track_editor.cpp msgid "Add RESET Value(s)" -msgstr "" +msgstr "Magdagdag ng (mga) RESET value" #: editor/animation_track_editor.cpp msgid "Delete Key(s)" -msgstr "Tanggalin Ang (Mga) Key(s)" +msgstr "Burahin ang (mga) Key" #: editor/animation_track_editor.cpp msgid "Change Animation Update Mode" -msgstr "" +msgstr "Baguhin ang Animation Update Mode" #: editor/animation_track_editor.cpp msgid "Change Animation Interpolation Mode" -msgstr "" +msgstr "Baguhin ang Animation Interpolation Mode" #: editor/animation_track_editor.cpp msgid "Change Animation Loop Mode" -msgstr "" +msgstr "Baguhin ang Animation Loop Mode" #: editor/animation_track_editor.cpp msgid "Remove Anim Track" -msgstr "" +msgstr "Tanggalin ang Anim Track" #: editor/animation_track_editor.cpp editor/editor_settings.cpp #: editor/plugins/path_editor_plugin.cpp @@ -1259,9 +1276,8 @@ msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp #: editor/spatial_editor_gizmos.cpp modules/csg/csg_gizmos.cpp #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Editors" -msgstr "I-edit" +msgstr "Mga Editor" #: editor/animation_track_editor.cpp editor/editor_settings.cpp #: editor/import/resource_importer_scene.cpp @@ -1271,7 +1287,7 @@ msgstr "I-edit" #: scene/animation/animation_blend_tree.cpp #: scene/resources/particles_material.cpp msgid "Animation" -msgstr "" +msgstr "Animation" #: editor/animation_track_editor.cpp editor/editor_settings.cpp msgid "Confirm Insert Track" @@ -1413,7 +1429,7 @@ msgstr "" #: editor/animation_track_editor.cpp editor/editor_help.cpp msgid "Methods" -msgstr "" +msgstr "Mga Method" #: editor/animation_track_editor.cpp msgid "Bezier" @@ -1865,7 +1881,7 @@ msgstr "" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" -msgstr "" +msgstr "Mga Signal" #: editor/connections_dialog.cpp msgid "Filter signals" @@ -3094,7 +3110,7 @@ msgstr "" #: editor/editor_help.cpp editor/scene_tree_editor.cpp #: editor/script_create_dialog.cpp msgid "Inherits:" -msgstr "" +msgstr "Minamana ang:" #: editor/editor_help.cpp msgid "Inherited by:" @@ -3106,7 +3122,7 @@ msgstr "" #: editor/editor_help.cpp msgid "Properties" -msgstr "" +msgstr "Mga Property" #: editor/editor_help.cpp msgid "overrides %s:" @@ -3118,7 +3134,7 @@ msgstr "" #: editor/editor_help.cpp msgid "Theme Properties" -msgstr "" +msgstr "Mga Property ng Tema" #: editor/editor_help.cpp editor/plugins/theme_editor_plugin.cpp #: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp @@ -3128,7 +3144,7 @@ msgstr "" #: editor/editor_help.cpp editor/plugins/theme_editor_plugin.cpp msgid "Constants" -msgstr "" +msgstr "Mga Constant" #: editor/editor_help.cpp editor/plugins/theme_editor_plugin.cpp msgid "Fonts" @@ -3145,11 +3161,11 @@ msgstr "" #: editor/editor_help.cpp msgid "Enumerations" -msgstr "" +msgstr "Mga Enumeration" #: editor/editor_help.cpp msgid "Property Descriptions" -msgstr "" +msgstr "Mga Paglalarawan sa Property" #: editor/editor_help.cpp #, fuzzy @@ -3164,7 +3180,7 @@ msgstr "" #: editor/editor_help.cpp msgid "Method Descriptions" -msgstr "" +msgstr "Mga Paglalarawan sa Method" #: editor/editor_help.cpp msgid "" @@ -3855,7 +3871,7 @@ msgstr "" #: editor/editor_node.cpp editor/import_dock.cpp #: editor/script_create_dialog.cpp msgid "Default" -msgstr "" +msgstr "Default" #: editor/editor_node.cpp editor/editor_resource_picker.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp @@ -5760,6 +5776,10 @@ msgstr "" msgid "Flat" msgstr "" +#: editor/editor_spin_slider.cpp +msgid "Hide Slider" +msgstr "" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "" @@ -15297,38 +15317,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -msgid "Display" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -msgid "Height" -msgstr "" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -msgid "Test Width" -msgstr "" - -#: main/main.cpp -msgid "Test Height" -msgstr "" - #: main/main.cpp msgid "DPI" msgstr "" @@ -19370,6 +19358,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp msgid "Build Mode" msgstr "" @@ -20991,7 +20984,7 @@ msgstr "" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -22987,6 +22980,11 @@ msgid "Pause Mode" msgstr "" #: scene/main/node.cpp +#, fuzzy +msgid "Physics Interpolation Mode" +msgstr "Interpolation Mode" + +#: scene/main/node.cpp msgid "Display Folded" msgstr "" @@ -23015,10 +23013,6 @@ msgstr "" msgid "Process Priority" msgstr "" -#: scene/main/node.cpp -msgid "Physics Interpolated" -msgstr "" - #: scene/main/scene_tree.cpp scene/main/timer.cpp msgid "Time Left" msgstr "" @@ -23640,6 +23634,11 @@ msgstr "" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "Pagulit ng Animation" + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "Mga Functions:" @@ -24358,6 +24357,11 @@ msgid "Distance Field" msgstr "" #: scene/resources/gradient.cpp +#, fuzzy +msgid "Raw Data" +msgstr "Data" + +#: scene/resources/gradient.cpp msgid "Offsets" msgstr "" diff --git a/editor/translations/fr.po b/editor/translations/fr.po index a06fe62bc4..8a5afd2499 100644 --- a/editor/translations/fr.po +++ b/editor/translations/fr.po @@ -94,13 +94,15 @@ # Maxim Lopez <maxim.lopez.02@gmail.com>, 2022. # Simon Trahan <xxmoby@gmail.com>, 2022. # Maxime Rigout <max.rigout@gmail.com>, 2022. +# Zachary Dionne <zachary.dionne.01@gmail.com>, 2022. +# Fares Setbel <fares.setbels@gmail.com>, 2022. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2022-04-28 11:11+0000\n" -"Last-Translator: Maxime Rigout <max.rigout@gmail.com>\n" +"PO-Revision-Date: 2022-05-15 09:38+0000\n" +"Last-Translator: Fares Setbel <fares.setbels@gmail.com>\n" "Language-Team: French <https://hosted.weblate.org/projects/godot-engine/" "godot/fr/>\n" "Language: fr\n" @@ -108,11 +110,12 @@ 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.12.1-dev\n" +"X-Generator: Weblate 4.13-dev\n" #: core/bind/core_bind.cpp main/main.cpp +#, fuzzy msgid "Tablet Driver" -msgstr "Pilote Tablette" +msgstr "Pilote De Tablette" #: core/bind/core_bind.cpp msgid "Clipboard" @@ -135,12 +138,14 @@ msgid "V-Sync Via Compositor" msgstr "V-Sync via le compositeur" #: core/bind/core_bind.cpp main/main.cpp +#, fuzzy msgid "Delta Smoothing" -msgstr "Lissage Delta" +msgstr "Lissage de Delta" #: core/bind/core_bind.cpp +#, fuzzy msgid "Low Processor Usage Mode" -msgstr "Mode d'Utilisation Faible du Processeur" +msgstr "Mode d'utilisation du processeur bas en ressources" #: core/bind/core_bind.cpp msgid "Low Processor Usage Mode Sleep (µsec)" @@ -148,7 +153,7 @@ msgstr "Mode d'Utilisation Faible du Processeur (µs)" #: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp msgid "Keep Screen On" -msgstr "Garder l'Écran Allumé" +msgstr "Garder l'écran actif" #: core/bind/core_bind.cpp msgid "Min Window Size" @@ -162,11 +167,12 @@ msgstr "Taille Maximale de la Fenêtre" msgid "Screen Orientation" msgstr "Orientation de l'Écran" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" msgstr "Fenêtre" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "Sans Bordure" @@ -174,7 +180,7 @@ msgstr "Sans Bordure" msgid "Per Pixel Transparency Enabled" msgstr "Transparence Par Pixel Activé" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Fullscreen" msgstr "Plein Écran" @@ -186,7 +192,7 @@ msgstr "Maximisé" msgid "Minimized" msgstr "Minimisé" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "Redimensionnable" @@ -199,10 +205,11 @@ msgstr "Redimensionnable" msgid "Position" msgstr "Position" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -212,16 +219,15 @@ msgstr "Taille" #: core/bind/core_bind.cpp msgid "Endian Swap" -msgstr "" +msgstr "Échange d'Endians" #: core/bind/core_bind.cpp -#, fuzzy msgid "Editor Hint" -msgstr "Éditeur" +msgstr "Conseil(s) Éditeur" #: core/bind/core_bind.cpp msgid "Print Error Messages" -msgstr "Imprimer les messages d'erreur" +msgstr "Afficher les messages d'erreur" #: core/bind/core_bind.cpp msgid "Iterations Per Second" @@ -229,26 +235,24 @@ msgstr "Itérations Par Seconde" #: core/bind/core_bind.cpp msgid "Target FPS" -msgstr "FPS cible" +msgstr "Cible de FPS" #: core/bind/core_bind.cpp -#, fuzzy msgid "Time Scale" -msgstr "NÅ“ud TimeScale" +msgstr "Echelle de temps" #: core/bind/core_bind.cpp main/main.cpp #, fuzzy msgid "Physics Jitter Fix" -msgstr "Image physique %" +msgstr "Correction de la physique gigue" #: core/bind/core_bind.cpp editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "Erreur" #: core/bind/core_bind.cpp -#, fuzzy msgid "Error String" -msgstr "Erreur d'enregistrement" +msgstr "Chaîne d'erreurs" #: core/bind/core_bind.cpp msgid "Error Line" @@ -664,6 +668,43 @@ msgstr "Utiliser un Répertoire Utilisateur Personnalisé" msgid "Custom User Dir Name" msgstr "Nom du Répertoire Utilisateur Personnalisé" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +#, fuzzy +msgid "Display" +msgstr "Tout afficher" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +#, fuzzy +msgid "Height" +msgstr "Lumière" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Width" +msgstr "Étendu à Gauche" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Height" +msgstr "En période de test" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1259,7 +1300,7 @@ msgstr "Activer/désactiver cette piste." msgid "Update Mode (How this property is set)" msgstr "Mode de mise à jour (comment cette propriété est définie)" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "Mode d’interpolation" @@ -2992,7 +3033,7 @@ msgstr "Rendre actuel" #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: modules/fbx/editor_scene_importer_fbx.cpp msgid "Import" -msgstr "Importation" +msgstr "Importer" #: editor/editor_feature_profile.cpp editor/project_export.cpp #: platform/android/export/export.cpp platform/javascript/export/export.cpp @@ -6171,6 +6212,11 @@ msgstr "" msgid "Flat" msgstr "Plat" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "Mode collision" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "Sélectionner les nÅ“uds à importer" @@ -16187,42 +16233,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -#, fuzzy -msgid "Display" -msgstr "Tout afficher" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -#, fuzzy -msgid "Height" -msgstr "Lumière" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -#, fuzzy -msgid "Test Width" -msgstr "Étendu à Gauche" - -#: main/main.cpp -#, fuzzy -msgid "Test Height" -msgstr "En période de test" - #: main/main.cpp msgid "DPI" msgstr "" @@ -16310,7 +16320,7 @@ msgstr "" #: scene/gui/scroll_container.cpp scene/gui/text_edit.cpp scene/gui/tree.cpp #: scene/main/viewport.cpp scene/register_scene_types.cpp msgid "GUI" -msgstr "" +msgstr "GUI" #: main/main.cpp msgid "Drop Mouse On GUI Input Disabled" @@ -20621,6 +20631,11 @@ msgstr "" "Polygone non valide. Il doit y avoir au moins 2 points en mode de " "construction 'Segments'." +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp #, fuzzy msgid "Build Mode" @@ -22475,9 +22490,10 @@ msgid "NavMesh" msgstr "Calculer le NavMesh" #: scene/3d/navigation_obstacle.cpp +#, fuzzy msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" "Un NavigationObstacle ne peut éviter les collisions qu'avec les nÅ“uds " "Spatial." @@ -24750,6 +24766,11 @@ msgstr "Mode navigation" #: scene/main/node.cpp #, fuzzy +msgid "Physics Interpolation Mode" +msgstr "Mode d’interpolation" + +#: scene/main/node.cpp +#, fuzzy msgid "Display Folded" msgstr "Afficher sans ombrage" @@ -24781,11 +24802,6 @@ msgstr "Multijoueur Personnalisé" msgid "Process Priority" msgstr "Activer la priorité" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "Mode d’interpolation" - #: scene/main/scene_tree.cpp scene/main/timer.cpp #, fuzzy msgid "Time Left" @@ -25494,6 +25510,11 @@ msgstr "Séparateur nommé" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "Opérateur de couleur." + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "Renommer l'item de couleur" @@ -26286,6 +26307,11 @@ msgid "Distance Field" msgstr "Mode Sans Distraction" #: scene/resources/gradient.cpp +#, fuzzy +msgid "Raw Data" +msgstr "Profondeur" + +#: scene/resources/gradient.cpp msgid "Offsets" msgstr "Décalages" diff --git a/editor/translations/ga.po b/editor/translations/ga.po index 57c8cf258a..1e786ca3e4 100644 --- a/editor/translations/ga.po +++ b/editor/translations/ga.po @@ -70,11 +70,12 @@ msgstr "" msgid "Screen Orientation" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "" @@ -82,7 +83,7 @@ msgstr "" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Fullscreen" msgstr "" @@ -94,7 +95,7 @@ msgstr "" msgid "Minimized" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -108,10 +109,11 @@ msgstr "" msgid "Position" msgstr "Cruthaigh" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -572,6 +574,39 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +msgid "Display" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +msgid "Height" +msgstr "" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +msgid "Test Width" +msgstr "" + +#: core/project_settings.cpp +msgid "Test Height" +msgstr "" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1155,7 +1190,7 @@ msgstr "" msgid "Update Mode (How this property is set)" msgstr "" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "" @@ -5732,6 +5767,10 @@ msgstr "" msgid "Flat" msgstr "" +#: editor/editor_spin_slider.cpp +msgid "Hide Slider" +msgstr "" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "" @@ -15248,38 +15287,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -msgid "Display" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -msgid "Height" -msgstr "" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -msgid "Test Width" -msgstr "" - -#: main/main.cpp -msgid "Test Height" -msgstr "" - #: main/main.cpp msgid "DPI" msgstr "" @@ -19313,6 +19320,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp msgid "Build Mode" msgstr "" @@ -20938,7 +20950,7 @@ msgstr "" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -22939,6 +22951,10 @@ msgid "Pause Mode" msgstr "" #: scene/main/node.cpp +msgid "Physics Interpolation Mode" +msgstr "" + +#: scene/main/node.cpp msgid "Display Folded" msgstr "" @@ -22968,10 +22984,6 @@ msgstr "" msgid "Process Priority" msgstr "" -#: scene/main/node.cpp -msgid "Physics Interpolated" -msgstr "" - #: scene/main/scene_tree.cpp scene/main/timer.cpp msgid "Time Left" msgstr "" @@ -23602,6 +23614,11 @@ msgstr "" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "Cuntas:" + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "Cruthaigh" @@ -24339,6 +24356,10 @@ msgid "Distance Field" msgstr "" #: scene/resources/gradient.cpp +msgid "Raw Data" +msgstr "" + +#: scene/resources/gradient.cpp msgid "Offsets" msgstr "" diff --git a/editor/translations/gl.po b/editor/translations/gl.po index 66bf39e903..ff0aa989bd 100644 --- a/editor/translations/gl.po +++ b/editor/translations/gl.po @@ -79,12 +79,13 @@ msgstr "Tamaño: " msgid "Screen Orientation" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp #, fuzzy msgid "Window" msgstr "Nova Xanela" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "" @@ -92,7 +93,7 @@ msgstr "" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp #, fuzzy msgid "Fullscreen" msgstr "Act./Desact. Pantalla Completa" @@ -106,7 +107,7 @@ msgstr "" msgid "Minimized" msgstr "Inicializar" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -120,10 +121,11 @@ msgstr "" msgid "Position" msgstr "Posición do Panel" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -617,6 +619,42 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +#, fuzzy +msgid "Display" +msgstr "Amosar Todo" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +msgid "Height" +msgstr "" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Width" +msgstr "Esquerdo Alto" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Height" +msgstr "Probas" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1221,7 +1259,7 @@ msgstr "Act./Desact. esta pista." msgid "Update Mode (How this property is set)" msgstr "Modo de Actualización (cómo se establece esta propiedade)" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "Modo de Interpolación" @@ -6127,6 +6165,11 @@ msgstr "" msgid "Flat" msgstr "" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "Colisión" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "Selecciona o(s) Nodo(s) a Importar" @@ -16038,41 +16081,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -#, fuzzy -msgid "Display" -msgstr "Amosar Todo" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -msgid "Height" -msgstr "" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -#, fuzzy -msgid "Test Width" -msgstr "Esquerdo Alto" - -#: main/main.cpp -#, fuzzy -msgid "Test Height" -msgstr "Probas" - #: main/main.cpp msgid "DPI" msgstr "" @@ -20402,6 +20410,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp #, fuzzy msgid "Build Mode" @@ -22183,7 +22196,7 @@ msgstr "Malla" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -24402,6 +24415,11 @@ msgstr "Modo Escalado" #: scene/main/node.cpp #, fuzzy +msgid "Physics Interpolation Mode" +msgstr "Modo de Interpolación" + +#: scene/main/node.cpp +#, fuzzy msgid "Display Folded" msgstr "Mostrar Sen Sombreado" @@ -24435,11 +24453,6 @@ msgstr "Establecer Varios:" msgid "Process Priority" msgstr "Prioridade" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "Modo de Interpolación" - #: scene/main/scene_tree.cpp scene/main/timer.cpp #, fuzzy msgid "Time Left" @@ -25132,6 +25145,11 @@ msgstr "" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "Escalar (Razón):" + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "Renomear Nodo" @@ -25928,6 +25946,11 @@ msgstr "Modo Sen Distraccións" #: scene/resources/gradient.cpp #, fuzzy +msgid "Raw Data" +msgstr "Profundidad" + +#: scene/resources/gradient.cpp +#, fuzzy msgid "Offsets" msgstr "Offset:" diff --git a/editor/translations/he.po b/editor/translations/he.po index fb0f42e7dd..09ec6b6032 100644 --- a/editor/translations/he.po +++ b/editor/translations/he.po @@ -98,12 +98,13 @@ msgstr "מבט קדמי" msgid "Screen Orientation" msgstr "פתיחת התיעוד" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp #, fuzzy msgid "Window" msgstr "חלון חדש" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "" @@ -111,7 +112,7 @@ msgstr "" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp #, fuzzy msgid "Fullscreen" msgstr "הפעלת/ביטול מסך מל×" @@ -125,7 +126,7 @@ msgstr "" msgid "Minimized" msgstr "הגדלת ×ות ר××©×•× ×”" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -139,10 +140,11 @@ msgstr "" msgid "Position" msgstr "×ž×™×§×•× ×”×¤× ×œ" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -638,6 +640,43 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +#, fuzzy +msgid "Display" +msgstr "הצג הכל" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +#, fuzzy +msgid "Height" +msgstr "ימין" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Width" +msgstr "מבט שמ×לי" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Height" +msgstr "בבדיקה" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1242,7 +1281,7 @@ msgstr "הפעלת/כיבוי רצועה זו." msgid "Update Mode (How this property is set)" msgstr "עדכן מצב (×יך המ×פיין ×”×–×” × ×§×‘×¢)" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "מצב ××™× ×˜×¨×¤×•×œ×¦×™×”" @@ -6079,6 +6118,11 @@ msgstr "" msgid "Flat" msgstr "" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "עריכת מצולע" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "× × ×œ×‘×—×•×¨ ×ž×¤×¨×§×™× ×œ×™×™×¦×•×" @@ -16195,42 +16239,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -#, fuzzy -msgid "Display" -msgstr "הצג הכל" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -#, fuzzy -msgid "Height" -msgstr "ימין" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -#, fuzzy -msgid "Test Width" -msgstr "מבט שמ×לי" - -#: main/main.cpp -#, fuzzy -msgid "Test Height" -msgstr "בבדיקה" - #: main/main.cpp msgid "DPI" msgstr "" @@ -20593,6 +20601,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp #, fuzzy msgid "Build Mode" @@ -22393,7 +22406,7 @@ msgstr "×פיית NavMesh" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -24625,6 +24638,11 @@ msgstr "מצב ×©×™× ×•×™ ×§× ×” מידה (R)" #: scene/main/node.cpp #, fuzzy +msgid "Physics Interpolation Mode" +msgstr "מצב ××™× ×˜×¨×¤×•×œ×¦×™×”" + +#: scene/main/node.cpp +#, fuzzy msgid "Display Folded" msgstr "הצג הכל" @@ -24658,11 +24676,6 @@ msgstr "קביעה מרובה:" msgid "Process Priority" msgstr "×™×™×¦×•× ×ž×™×–×" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "מצב ××™× ×˜×¨×¤×•×œ×¦×™×”" - #: scene/main/scene_tree.cpp scene/main/timer.cpp #, fuzzy msgid "Time Left" @@ -25356,6 +25369,11 @@ msgstr "" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "×ž×•× ×™×:" + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "×©×™× ×•×™ ×©× ×ž×¤×¨×§" @@ -26154,6 +26172,11 @@ msgstr "מצב ×œ×œ× ×”×¡×—×•×ª דעת" #: scene/resources/gradient.cpp #, fuzzy +msgid "Raw Data" +msgstr "עומק" + +#: scene/resources/gradient.cpp +#, fuzzy msgid "Offsets" msgstr "היסט רשת:" diff --git a/editor/translations/hi.po b/editor/translations/hi.po index a64e5ac8b1..b90ffb435d 100644 --- a/editor/translations/hi.po +++ b/editor/translations/hi.po @@ -88,12 +88,13 @@ msgstr "आकार: " msgid "Screen Orientation" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp #, fuzzy msgid "Window" msgstr "नया विंडो" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "" @@ -101,7 +102,7 @@ msgstr "" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp #, fuzzy msgid "Fullscreen" msgstr "पूरà¥à¤£à¤¸à¥à¤•à¥à¤°à¥€à¤¨ चालू करें" @@ -114,7 +115,7 @@ msgstr "" msgid "Minimized" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -128,10 +129,11 @@ msgstr "" msgid "Position" msgstr "डॉक पोजीशन" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -611,6 +613,40 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +#, fuzzy +msgid "Display" +msgstr "सब दिखाइà¤" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +msgid "Height" +msgstr "" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +msgid "Test Width" +msgstr "" + +#: core/project_settings.cpp +msgid "Test Height" +msgstr "" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1207,7 +1243,7 @@ msgstr "इस टà¥à¤°à¥ˆà¤• को ऑन/ऑफ पर टॉगल करॠmsgid "Update Mode (How this property is set)" msgstr "अपडेट मोड (यह संपतà¥à¤¤à¤¿ कैसे सेट की जाती है)" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "इंटरपोलेशन मोड" @@ -6052,6 +6088,11 @@ msgstr "पूरà¥à¤£à¤¾à¤‚क के लिठCtrl दबाठरखें msgid "Flat" msgstr "" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "सदसà¥à¤¯à¤¤à¤¾ बनाà¤à¤‚" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "आयात करने के लिठनोड (à¤à¤¸) का चयन करें" @@ -15883,39 +15924,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -#, fuzzy -msgid "Display" -msgstr "सब दिखाइà¤" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -msgid "Height" -msgstr "" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -msgid "Test Width" -msgstr "" - -#: main/main.cpp -msgid "Test Height" -msgstr "" - #: main/main.cpp msgid "DPI" msgstr "" @@ -20164,6 +20172,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp msgid "Build Mode" msgstr "" @@ -21865,7 +21878,7 @@ msgstr "" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -24003,6 +24016,11 @@ msgstr "दृशà¥à¤¯ रोकें" #: scene/main/node.cpp #, fuzzy +msgid "Physics Interpolation Mode" +msgstr "इंटरपोलेशन मोड" + +#: scene/main/node.cpp +#, fuzzy msgid "Display Folded" msgstr "सब दिखाइà¤" @@ -24036,11 +24054,6 @@ msgstr "अनेक सेट करे:" msgid "Process Priority" msgstr "मोड टॉगल कीजिये" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "इंटरपोलेशन मोड" - #: scene/main/scene_tree.cpp scene/main/timer.cpp #, fuzzy msgid "Time Left" @@ -24713,6 +24726,11 @@ msgstr "" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "संसà¥à¤•रण:" + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "आइटम निकालें" @@ -25498,6 +25516,10 @@ msgid "Distance Field" msgstr "वà¥à¤¯à¤¾à¤•à¥à¤²à¤¤à¤¾ मà¥à¤•à¥à¤¤ मोड" #: scene/resources/gradient.cpp +msgid "Raw Data" +msgstr "" + +#: scene/resources/gradient.cpp msgid "Offsets" msgstr "" diff --git a/editor/translations/hr.po b/editor/translations/hr.po index 1efde7cc57..d9aaa4d5f9 100644 --- a/editor/translations/hr.po +++ b/editor/translations/hr.po @@ -77,11 +77,12 @@ msgstr "Glavna skripta:" msgid "Screen Orientation" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "" @@ -89,7 +90,7 @@ msgstr "" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Fullscreen" msgstr "" @@ -101,7 +102,7 @@ msgstr "" msgid "Minimized" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -115,10 +116,11 @@ msgstr "" msgid "Position" msgstr "Stvori" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -588,6 +590,40 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +msgid "Display" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +msgid "Height" +msgstr "" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Width" +msgstr "Lijevo Å iroko" + +#: core/project_settings.cpp +msgid "Test Height" +msgstr "" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1174,7 +1210,7 @@ msgstr "Upali/ugasi ovu stazu." msgid "Update Mode (How this property is set)" msgstr "NaÄin ažuriranja (kako se ovo svojstvo postavlja)" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "NaÄin Interpolacije" @@ -5851,6 +5887,11 @@ msgstr "" msgid "Flat" msgstr "" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "NaÄin Interpolacije" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "" @@ -15480,39 +15521,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -msgid "Display" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -msgid "Height" -msgstr "" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -#, fuzzy -msgid "Test Width" -msgstr "Lijevo Å iroko" - -#: main/main.cpp -msgid "Test Height" -msgstr "" - #: main/main.cpp msgid "DPI" msgstr "" @@ -19654,6 +19662,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp #, fuzzy msgid "Build Mode" @@ -21320,7 +21333,7 @@ msgstr "" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -23405,6 +23418,11 @@ msgid "Pause Mode" msgstr "NaÄin reprodukcije:" #: scene/main/node.cpp +#, fuzzy +msgid "Physics Interpolation Mode" +msgstr "NaÄin Interpolacije" + +#: scene/main/node.cpp msgid "Display Folded" msgstr "" @@ -23435,11 +23453,6 @@ msgstr "" msgid "Process Priority" msgstr "" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "NaÄin Interpolacije" - #: scene/main/scene_tree.cpp scene/main/timer.cpp msgid "Time Left" msgstr "" @@ -24096,6 +24109,11 @@ msgstr "" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "Opis:" + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "Preimenuj Autoload" @@ -24866,6 +24884,11 @@ msgid "Distance Field" msgstr "Instaliraj" #: scene/resources/gradient.cpp +#, fuzzy +msgid "Raw Data" +msgstr "Dubina" + +#: scene/resources/gradient.cpp msgid "Offsets" msgstr "" diff --git a/editor/translations/hu.po b/editor/translations/hu.po index bb69c65e4e..3718ec5db6 100644 --- a/editor/translations/hu.po +++ b/editor/translations/hu.po @@ -98,12 +98,13 @@ msgstr "Körvonal Mérete:" msgid "Screen Orientation" msgstr "Dokumentáció megnyitása" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp #, fuzzy msgid "Window" msgstr "Új ablak" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "" @@ -111,7 +112,7 @@ msgstr "" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp #, fuzzy msgid "Fullscreen" msgstr "Teljes KépernyÅ‘" @@ -125,7 +126,7 @@ msgstr "" msgid "Minimized" msgstr "Inicializálás" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -139,10 +140,11 @@ msgstr "" msgid "Position" msgstr "Dokk PozÃció" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -639,6 +641,41 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +#, fuzzy +msgid "Display" +msgstr "Az összes megjelenÃtése" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +msgid "Height" +msgstr "" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +msgid "Test Width" +msgstr "" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Height" +msgstr "Tesztelés" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1246,7 +1283,7 @@ msgstr "Jelen sáv ki/be kapcsolása." msgid "Update Mode (How this property is set)" msgstr "FrissÃtés Módja (Hogyan van ez a tulajdonság beállÃtva)" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "Interpolálás Módja" @@ -6153,6 +6190,11 @@ msgstr "" msgid "Flat" msgstr "Lapos 0" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "Ütközési mód" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "Válassza ki az importálandó Node-okat" @@ -15988,40 +16030,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -#, fuzzy -msgid "Display" -msgstr "Az összes megjelenÃtése" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -msgid "Height" -msgstr "" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -msgid "Test Width" -msgstr "" - -#: main/main.cpp -#, fuzzy -msgid "Test Height" -msgstr "Tesztelés" - #: main/main.cpp msgid "DPI" msgstr "" @@ -20351,6 +20359,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp #, fuzzy msgid "Build Mode" @@ -22105,7 +22118,7 @@ msgstr "Mesh" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -24305,6 +24318,11 @@ msgstr "Pásztázás Mód" #: scene/main/node.cpp #, fuzzy +msgid "Physics Interpolation Mode" +msgstr "Interpolálás Módja" + +#: scene/main/node.cpp +#, fuzzy msgid "Display Folded" msgstr "Az összes megjelenÃtése" @@ -24338,11 +24356,6 @@ msgstr "Többszörös beállÃtása:" msgid "Process Priority" msgstr "Prioritás Engedélyezése" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "Interpolálás Módja" - #: scene/main/scene_tree.cpp scene/main/timer.cpp #, fuzzy msgid "Time Left" @@ -25038,6 +25051,11 @@ msgstr "" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "Felsorolások:" + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "Elem eltávolÃtása" @@ -25836,6 +25854,11 @@ msgstr "Zavarmentes Mód" #: scene/resources/gradient.cpp #, fuzzy +msgid "Raw Data" +msgstr "Mélység" + +#: scene/resources/gradient.cpp +#, fuzzy msgid "Offsets" msgstr "Rács Eltolás:" diff --git a/editor/translations/id.po b/editor/translations/id.po index c9c98b1a7e..7082c3bf57 100644 --- a/editor/translations/id.po +++ b/editor/translations/id.po @@ -32,7 +32,7 @@ # Reza Almanda <rezaalmanda27@gmail.com>, 2021, 2022. # Naufal Adriansyah <naufaladrn90@gmail.com>, 2021. # undisputedgoose <diablodvorak@gmail.com>, 2021. -# Tsaqib Fadhlurrahman Soka <sokatsaqib@gmail.com>, 2021. +# Tsaqib Fadhlurrahman Soka <sokatsaqib@gmail.com>, 2021, 2022. # Hilman Hazazi <hafizd.muhammad.kren.403@gmail.com>, 2021. # Brian <brian@brianthe.dev>, 2021. # Helmi Hibatullah <helmihibatullah393@gmail.com>, 2022. @@ -44,8 +44,8 @@ msgstr "" "Project-Id-Version: Godot Engine editor\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2022-04-25 15:02+0000\n" -"Last-Translator: ProgrammerIndonesia 44 <elo.jhy@gmail.com>\n" +"PO-Revision-Date: 2022-05-15 09:38+0000\n" +"Last-Translator: Tsaqib Fadhlurrahman Soka <sokatsaqib@gmail.com>\n" "Language-Team: Indonesian <https://hosted.weblate.org/projects/godot-engine/" "godot/id/>\n" "Language: id\n" @@ -53,11 +53,11 @@ 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.12.1-dev\n" +"X-Generator: Weblate 4.13-dev\n" #: core/bind/core_bind.cpp main/main.cpp msgid "Tablet Driver" -msgstr "Driver Tablet" +msgstr "Tablet Driver" #: core/bind/core_bind.cpp msgid "Clipboard" @@ -97,7 +97,7 @@ msgstr "Biarkan Layar Menyala" #: core/bind/core_bind.cpp msgid "Min Window Size" -msgstr "Ukuran Jendela Minimum" +msgstr "Ukuran Jendela Minim" #: core/bind/core_bind.cpp msgid "Max Window Size" @@ -107,11 +107,12 @@ msgstr "Ukuran Jendela Maks" msgid "Screen Orientation" msgstr "Orientasi Layar" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" msgstr "Jendela" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "Tanpa batas" @@ -119,9 +120,9 @@ msgstr "Tanpa batas" msgid "Per Pixel Transparency Enabled" msgstr "Aktifkan Transparansi Per Piksel" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Fullscreen" -msgstr "Layar penuh" +msgstr "Fullscreen" #: core/bind/core_bind.cpp msgid "Maximized" @@ -131,7 +132,7 @@ msgstr "Dimaksimalkan" msgid "Minimized" msgstr "Diminimalkan" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "Dapat diubah ukurannya" @@ -144,10 +145,11 @@ msgstr "Dapat diubah ukurannya" msgid "Position" msgstr "Posisi" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -173,7 +175,7 @@ msgstr "Pengulangan Per Detik" #: core/bind/core_bind.cpp msgid "Target FPS" -msgstr "FPS Sasaran" +msgstr "Target FPS" #: core/bind/core_bind.cpp msgid "Time Scale" @@ -185,7 +187,7 @@ msgstr "Perbaikan Fisika Jitter" #: core/bind/core_bind.cpp editor/plugins/version_control_editor_plugin.cpp msgid "Error" -msgstr "Galat" +msgstr "Error" #: core/bind/core_bind.cpp msgid "Error String" @@ -193,7 +195,7 @@ msgstr "String Error" #: core/bind/core_bind.cpp msgid "Error Line" -msgstr "Baris Galat" +msgstr "Baris Error" #: core/bind/core_bind.cpp msgid "Result" @@ -257,7 +259,7 @@ msgstr "Ukuran Halaman" #: core/io/file_access_network.cpp msgid "Page Read Ahead" -msgstr "" +msgstr "Halaman Baca Terlebih Dahulu" #: core/io/http_client.cpp msgid "Blocking Mode Enabled" @@ -344,7 +346,7 @@ msgstr "String dengan panjang 1 (karakter) 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 cukup bita untuk mendekode bita, atau format tidak valid." +msgstr "Tidak cukup byte untuk decoding byte, atau format tidak valid." #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" @@ -365,7 +367,7 @@ msgstr "Index tidak valid dari tipe %s untuk tipe dasar %s" #: core/math/expression.cpp msgid "Invalid named index '%s' for base type %s" -msgstr "index bernama '%s' untuk tipe dasar %s tidak sah" +msgstr "Indeks bernama '%s' tidak valid untuk tipe dasar %s" #: core/math/expression.cpp msgid "Invalid arguments to construct '%s'" @@ -433,7 +435,7 @@ msgstr "Kode Pindaian Fisik" #: core/os/input_event.cpp msgid "Unicode" -msgstr "Unikode" +msgstr "Unicode" #: core/os/input_event.cpp msgid "Echo" @@ -508,7 +510,7 @@ msgstr "Delta" #: core/os/input_event.cpp msgid "Channel" -msgstr "Kanal" +msgstr "Channel" #: core/os/input_event.cpp main/main.cpp msgid "Message" @@ -548,7 +550,7 @@ msgstr "Konfigurasi" #: core/project_settings.cpp msgid "Project Settings Override" -msgstr "Penimpaan Setelan Proyek" +msgstr "Penggantian Pengaturan Proyek" #: core/project_settings.cpp core/resource.cpp #: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp @@ -595,9 +597,44 @@ msgid "Use Custom User Dir" msgstr "Gunakan Direktori Pengguna Kustom" #: core/project_settings.cpp -#, fuzzy msgid "Custom User Dir Name" -msgstr "Nama Direktori Pengguna Kustom" +msgstr "Nama Dir Pengguna Kustom" + +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +msgid "Display" +msgstr "Tampilan" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "Lebar" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +msgid "Height" +msgstr "Tinggi" + +#: core/project_settings.cpp +#, fuzzy +msgid "Always On Top" +msgstr "Selalu Di Depan" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Width" +msgstr "Kiri Lebar" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Height" +msgstr "Menguji" #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp @@ -605,9 +642,8 @@ msgid "Audio" msgstr "Suara" #: core/project_settings.cpp -#, fuzzy msgid "Default Bus Layout" -msgstr "Muat default Layout Bus." +msgstr "Tata Letak Bus Default" #: core/project_settings.cpp editor/editor_export.cpp #: editor/editor_file_system.cpp editor/editor_node.cpp @@ -617,9 +653,8 @@ msgid "Editor" msgstr "Editor" #: core/project_settings.cpp -#, fuzzy msgid "Main Run Args" -msgstr "Argumen Skena Utama:" +msgstr "Jalan Utama Argumen" #: core/project_settings.cpp msgid "Search In File Extensions" @@ -627,7 +662,7 @@ msgstr "Cari dalam Ekstensi File" #: core/project_settings.cpp msgid "Script Templates Search Path" -msgstr "" +msgstr "Jalur Pencarian Template Skrip" #: core/project_settings.cpp editor/editor_node.cpp #: editor/plugins/version_control_editor_plugin.cpp @@ -874,7 +909,7 @@ msgstr "Pesan" #: core/translation.cpp editor/project_settings_editor.cpp msgid "Locale" -msgstr "Pelokalan" +msgstr "Lokal" #: core/translation.cpp msgid "Test" @@ -1182,7 +1217,7 @@ msgstr "Alihkan track ini ke nyala/mati." msgid "Update Mode (How this property is set)" msgstr "Mode Pembaruan (Bagaimana properti ini akan di terapkan)" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "Mode Interpolasi" @@ -1440,7 +1475,7 @@ msgstr "Transformasi" #: editor/animation_track_editor.cpp editor/editor_help.cpp msgid "Methods" -msgstr "Metode" +msgstr "Method" #: editor/animation_track_editor.cpp msgid "Bezier" @@ -1535,7 +1570,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." @@ -1922,7 +1957,7 @@ msgstr "Putuskan Semuanya" #: editor/connections_dialog.cpp msgid "Edit..." -msgstr "sunting..." +msgstr "Edit..." #: editor/connections_dialog.cpp msgid "Go to Method" @@ -2399,7 +2434,7 @@ msgstr "Berkas salah, tidak layout suara bus." #: editor/editor_audio_buses.cpp msgid "Error saving file: %s" -msgstr "Galat menyimpan berkas: %s" +msgstr "Error menyimpan berkas: %s" #: editor/editor_audio_buses.cpp msgid "Add Bus" @@ -2872,7 +2907,7 @@ msgstr "" #: editor/editor_feature_profile.cpp msgid "Error saving profile to path: '%s'." -msgstr "Galat saat menyimpan profil ke: '%s'." +msgstr "Error saat menyimpan profil ke: '%s'." #: editor/editor_feature_profile.cpp msgid "Reset to Default" @@ -3221,7 +3256,7 @@ msgstr "Warna" #: editor/editor_help.cpp editor/plugins/theme_editor_plugin.cpp msgid "Constants" -msgstr "Konstanta" +msgstr "konstan" #: editor/editor_help.cpp editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -3539,7 +3574,7 @@ msgstr "Oke" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" -msgstr "Galat saat menyimpan resource!" +msgstr "Error saat menyimpan resource!" #: editor/editor_node.cpp msgid "" @@ -3575,7 +3610,7 @@ msgstr "Kesalahan saat melakukan parsing '%s'." #: editor/editor_node.cpp msgid "Unexpected end of file '%s'." -msgstr "akhir dari berkas tak terduga '%s'." +msgstr "Akhir file '%s' yang tidak terduga." #: editor/editor_node.cpp msgid "Missing '%s' or its dependencies." @@ -4074,7 +4109,7 @@ msgstr "" #: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp msgid "Scene" -msgstr "Skena" +msgstr "Scene" #: editor/editor_node.cpp msgid "Scene Naming" @@ -4708,7 +4743,7 @@ msgstr "Turunan Baru" #: editor/editor_node.cpp msgid "Load Errors" -msgstr "Muat Galat" +msgstr "Muat Error" #: editor/editor_node.cpp editor/plugins/tile_map_editor_plugin.cpp #: modules/visual_script/visual_script_nodes.cpp @@ -4733,7 +4768,7 @@ msgstr "Buka Editor Skrip" #: editor/editor_node.cpp editor/project_manager.cpp msgid "Open Asset Library" -msgstr "Buka Pustaka Aset" +msgstr "Buka Aset Library" #: editor/editor_node.cpp msgid "Open the next Editor" @@ -6069,6 +6104,11 @@ msgstr "" msgid "Flat" msgstr "Flat 0" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "Penabrak" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "Pilih node untuk diimpor" @@ -6088,7 +6128,7 @@ msgstr "Impor dari Node:" #. TRANSLATORS: %s refers to the name of a version control system (e.g. "Git"). #: editor/editor_vcs_interface.cpp msgid "%s Error" -msgstr "%s Galat" +msgstr "%s Error" #: editor/export_template_manager.cpp msgid "Open the folder containing these templates." @@ -6112,7 +6152,7 @@ msgstr "Memulai pengunduhan..." #: editor/export_template_manager.cpp msgid "Error requesting URL:" -msgstr "Galat saat meminta URL:" +msgstr "Error saat meminta URL:" #: editor/export_template_manager.cpp msgid "Connecting to the mirror..." @@ -6161,7 +6201,7 @@ msgstr "" #: editor/export_template_manager.cpp msgid "Error getting the list of mirrors." -msgstr "Galat dalam mendapatkan daftar mirror." +msgstr "Error dalam mendapatkan daftar mirror." #: editor/export_template_manager.cpp msgid "Error parsing JSON with the list of mirrors. Please report this issue!" @@ -6391,11 +6431,11 @@ msgstr "Tidak dapat memindahkan folder ke dalam dirinya sendiri." #: editor/filesystem_dock.cpp msgid "Error moving:" -msgstr "Galat saat memindahkan:" +msgstr "Error saat memindahkan:" #: editor/filesystem_dock.cpp msgid "Error duplicating:" -msgstr "Galat saat menggandakan berkas:" +msgstr "Error saat menggandakan berkas:" #: editor/filesystem_dock.cpp msgid "Unable to update dependencies:" @@ -6439,11 +6479,11 @@ msgid "" "\n" "Do you wish to overwrite them?" msgstr "" -"file dan/atau berkas-berkas berikut mempunyai konflik di '%s':\n" +"File atau folder berikut ini bentrok dengan item di lokasi target '%s':\n" "\n" "%s\n" "\n" -"Apakah Anda ingin melanjutkan (overwrite)?" +"Apakah Anda ingin menimpanya?" #: editor/filesystem_dock.cpp msgid "Renaming file:" @@ -6811,7 +6851,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp msgid "sRGB" -msgstr "" +msgstr "sRGB" #: editor/import/resource_importer_layered_texture.cpp #, fuzzy @@ -8255,7 +8295,7 @@ msgstr "Tidak dapat menyimpan respons ke:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Write error." -msgstr "Galat saat menyimpan ke dalam berkas." +msgstr "Error saat menyimpan ke dalam berkas." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, too many redirects" @@ -10267,7 +10307,7 @@ msgstr "Tutup dan simpan perubahan?" #: editor/plugins/script_editor_plugin.cpp msgid "Error writing TextFile:" -msgstr "Galat saat menulis TextFile:" +msgstr "Error saat menulis TextFile:" #: editor/plugins/script_editor_plugin.cpp msgid "Could not load file at:" @@ -10275,23 +10315,23 @@ msgstr "Tidak dapat memuat berkas di:" #: editor/plugins/script_editor_plugin.cpp msgid "Error saving file!" -msgstr "Galat saat menyimpan berkas!" +msgstr "Error saat menyimpan berkas!" #: editor/plugins/script_editor_plugin.cpp msgid "Error while saving theme." -msgstr "Galat saat menyimpan tema." +msgstr "Error saat menyimpan tema." #: editor/plugins/script_editor_plugin.cpp msgid "Error Saving" -msgstr "Galat Menyimpan" +msgstr "Error Menyimpan" #: editor/plugins/script_editor_plugin.cpp msgid "Error importing theme." -msgstr "Galat saat mengimpor tema." +msgstr "Error saat mengimpor tema." #: editor/plugins/script_editor_plugin.cpp msgid "Error Importing" -msgstr "Galat saat mengimpor" +msgstr "Error saat mengimpor" #: editor/plugins/script_editor_plugin.cpp msgid "New Text File..." @@ -10827,7 +10867,7 @@ msgstr "Mainkan IK" #: editor/plugins/spatial_editor_plugin.cpp msgid "Orthogonal" -msgstr "Ortogonal" +msgstr "Orthogonal" #: editor/plugins/spatial_editor_plugin.cpp modules/gltf/gltf_camera.cpp msgid "Perspective" @@ -12330,7 +12370,7 @@ msgstr "Cat Persegi Panjang" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Bucket Fill" -msgstr "Ember Isian" +msgstr "Bucket Fill" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Erase TileMap" @@ -12883,9 +12923,8 @@ msgid "Select SSH private key path" msgstr "Pilih jalur kunci pribadi SSH" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "SSH Passphrase" -msgstr "Frasa Sandi SSH" +msgstr "SSH Passphrase" #: editor/plugins/version_control_editor_plugin.cpp msgid "Detect new changes" @@ -14099,7 +14138,7 @@ msgstr "Lokasi yang ditentukan tidak ada." #: editor/project_manager.cpp msgid "Error opening package file (it's not in ZIP format)." -msgstr "Galat saat membuka berkas paket (tidak dalam format ZIP)." +msgstr "Error saat membuka berkas paket (tidak dalam format ZIP)." #: editor/project_manager.cpp msgid "" @@ -14267,7 +14306,7 @@ msgstr "Proyek hilang" #: editor/project_manager.cpp msgid "Error: Project is missing on the filesystem." -msgstr "Galat: Proyek ini tidak ditemukan dalam berkas sistem." +msgstr "Error: Proyek ini tidak ditemukan dalam berkas sistem." #: editor/project_manager.cpp msgid "Can't open project at '%s'." @@ -14390,9 +14429,8 @@ msgid "Project Manager" msgstr "Manajer Proyek" #: editor/project_manager.cpp -#, fuzzy msgid "Local Projects" -msgstr "Proyek" +msgstr "Proyek Lokal" #: editor/project_manager.cpp msgid "Loading, please wait..." @@ -14427,7 +14465,7 @@ msgstr "Pilih Berkas untuk Dipindai" #: editor/project_manager.cpp msgid "New Project" -msgstr "Projek Baru" +msgstr "Proyek Baru" #: editor/project_manager.cpp #, fuzzy @@ -14448,9 +14486,8 @@ msgid "About" msgstr "Tentang" #: editor/project_manager.cpp -#, fuzzy msgid "Asset Library Projects" -msgstr "Pustaka Aset" +msgstr "Proyek Perpustakaan Aset" #: editor/project_manager.cpp msgid "Restart Now" @@ -14473,13 +14510,12 @@ msgid "" "You currently don't have any projects.\n" "Would you like to explore official example projects in the Asset Library?" msgstr "" -"Saat ini Anda tidak memiliki proyek.\n" -"Apakah Anda ingin menjelajahi contoh proyek resmi di Pustaka Aset?" +"Saat ini Anda tidak memiliki proyek apa pun.\n" +"Apakah Anda ingin menjelajahi contoh proyek resmi di Perpustakaan Aset?" #: editor/project_manager.cpp -#, fuzzy msgid "Filter projects" -msgstr "Filter properti" +msgstr "Filter proyek" #: editor/project_manager.cpp #, fuzzy @@ -14669,7 +14705,7 @@ msgstr "Tampah Aksi Input" #: editor/project_settings_editor.cpp msgid "Error saving settings." -msgstr "Galat saat menyimpan pengaturan." +msgstr "Error saat menyimpan pengaturan." #: editor/project_settings_editor.cpp msgid "Settings saved OK." @@ -14848,7 +14884,7 @@ msgstr "Pilih Node" #: editor/property_editor.cpp msgid "Error loading file: Not a resource!" -msgstr "Galat saat memuat berkas: Bukan resource!" +msgstr "Error saat memuat berkas: Bukan resource!" #: editor/property_editor.cpp msgid "Pick a Node" @@ -15039,7 +15075,7 @@ msgstr "Tidak ada parent untuk menginstansi skena disana." #: editor/scene_tree_dock.cpp msgid "Error loading scene from %s" -msgstr "Galat saat memuat skena dari %s" +msgstr "Error saat memuat skena dari %s" #: editor/scene_tree_dock.cpp msgid "" @@ -15289,11 +15325,11 @@ msgstr "" #: editor/scene_tree_dock.cpp msgid "Error saving scene." -msgstr "Galat menyimpan skena." +msgstr "Error menyimpan skena." #: editor/scene_tree_dock.cpp msgid "Error duplicating scene to save it." -msgstr "Galat menduplikasi skena untuk menyimpannya." +msgstr "Error menduplikasi skena untuk menyimpannya." #: editor/scene_tree_dock.cpp msgid "Sub-Resources" @@ -15554,15 +15590,15 @@ msgstr "Ekstensi salah dipilih." #: editor/script_create_dialog.cpp msgid "Error loading template '%s'" -msgstr "Galat saat memuat templat '%s'" +msgstr "Error saat memuat templat '%s'" #: editor/script_create_dialog.cpp msgid "Error - Could not create script in filesystem." -msgstr "Galat - Tidak dapat membuat skrip di berkas sistem." +msgstr "Error - Tidak dapat membuat skrip di berkas sistem." #: editor/script_create_dialog.cpp msgid "Error loading script from %s" -msgstr "Galat saat memuat skrip dari %s" +msgstr "Error saat memuat skrip dari %s" #: editor/script_create_dialog.cpp msgid "Overrides" @@ -15666,15 +15702,15 @@ msgstr "Peringatan:" #: editor/script_editor_debugger.cpp msgid "Error:" -msgstr "Galat:" +msgstr "Error:" #: editor/script_editor_debugger.cpp msgid "C++ Error" -msgstr "Galat C++" +msgstr "Error C++" #: editor/script_editor_debugger.cpp msgid "C++ Error:" -msgstr "Galat C++ :" +msgstr "Error C++ :" #: editor/script_editor_debugger.cpp msgid "C++ Source" @@ -15694,7 +15730,7 @@ msgstr "Jejak Tumpukan" #: editor/script_editor_debugger.cpp msgid "Errors" -msgstr "Galat" +msgstr "Error" #: editor/script_editor_debugger.cpp msgid "Child process connected." @@ -15702,7 +15738,7 @@ msgstr "Proses anak terhubung." #: editor/script_editor_debugger.cpp msgid "Copy Error" -msgstr "Salin Galat" +msgstr "Salin Error" #: editor/script_editor_debugger.cpp msgid "Open C++ Source on GitHub" @@ -16071,7 +16107,7 @@ msgstr "Maksimal Pesan Per Bingkai" #: main/main.cpp msgid "Max Errors Per Second" -msgstr "Maksimal Galat Per Detik" +msgstr "Maksimal Error Per Detik" #: main/main.cpp msgid "Max Warnings Per Second" @@ -16120,41 +16156,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -msgid "Display" -msgstr "Tampilan" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "Lebar" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -msgid "Height" -msgstr "Tinggi" - -#: main/main.cpp -#, fuzzy -msgid "Always On Top" -msgstr "Selalu Di Depan" - -#: main/main.cpp -#, fuzzy -msgid "Test Width" -msgstr "Kiri Lebar" - -#: main/main.cpp -#, fuzzy -msgid "Test Height" -msgstr "Menguji" - #: main/main.cpp msgid "DPI" msgstr "DPI" @@ -16350,7 +16351,7 @@ msgstr "Warna Latar Belakang" #: main/main.cpp msgid "macOS Native Icon" -msgstr "Ikon macOS" +msgstr "Ikon Asli macOS" #: main/main.cpp msgid "Windows Native Icon" @@ -16788,7 +16789,7 @@ msgstr "" #: modules/gdscript/gdscript.cpp msgid "Treat Warnings As Errors" -msgstr "Perlakukan Peringatan Sebagai Galat" +msgstr "Perlakukan Peringatan Sebagai Error" #: modules/gdscript/gdscript.cpp msgid "Exclude Addons" @@ -17988,7 +17989,7 @@ msgstr "if (kondisi) adalah:" #: modules/visual_script/visual_script_flow_control.cpp msgid "While" -msgstr "" +msgstr "Ketika" #: modules/visual_script/visual_script_flow_control.cpp msgid "while (cond):" @@ -20478,6 +20479,11 @@ msgstr "" "Poligon tidak valid. Minimal 2 titik dibutuhkan untuk mode pembangunan " "'Segmen\"." +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp #, fuzzy msgid "Build Mode" @@ -21900,7 +21906,7 @@ msgstr "Proyeksi" #: scene/3d/camera.cpp msgid "FOV" -msgstr "Bidang Pandang" +msgstr "FOV" #: scene/3d/camera.cpp #, fuzzy @@ -22242,10 +22248,13 @@ msgid "NavMesh" msgstr "Panggang NavMesh" #: scene/3d/navigation_obstacle.cpp +#, fuzzy msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" +"NavigationObstacle2D hanya berfungsi untuk memberikan penghindaran tabrakan " +"ke objek Node2D." #: scene/3d/occluder.cpp msgid "No shape is set." @@ -24516,6 +24525,11 @@ msgstr "Mode Geser Pandangan" #: scene/main/node.cpp #, fuzzy +msgid "Physics Interpolation Mode" +msgstr "Mode Interpolasi" + +#: scene/main/node.cpp +#, fuzzy msgid "Display Folded" msgstr "Tampilan Tak Berbayang" @@ -24549,11 +24563,6 @@ msgstr "Terapkan Bersamaan:" msgid "Process Priority" msgstr "Aktifkan Prioritas" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "Mode Interpolasi" - #: scene/main/scene_tree.cpp scene/main/timer.cpp #, fuzzy msgid "Time Left" @@ -25262,6 +25271,11 @@ msgstr "Pemisah yang diberi nama" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "Operator warna." + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "Warna Tulang 1" @@ -25520,9 +25534,8 @@ msgid "Large" msgstr "Sasaran" #: scene/resources/default_theme/default_theme.cpp -#, fuzzy msgid "Folder" -msgstr "Direktori:" +msgstr "Folder" #: scene/resources/default_theme/default_theme.cpp #, fuzzy @@ -26071,6 +26084,11 @@ msgstr "Mode Tanpa Gangguan" #: scene/resources/gradient.cpp #, fuzzy +msgid "Raw Data" +msgstr "Kedalaman" + +#: scene/resources/gradient.cpp +#, fuzzy msgid "Offsets" msgstr "Pengimbangan:" @@ -26468,9 +26486,8 @@ msgid "Visible Instance Count" msgstr "" #: scene/resources/multimesh.cpp -#, fuzzy msgid "Transform Array" -msgstr "Transformasi Dibatalkan." +msgstr "Transformasi Array" #: scene/resources/multimesh.cpp #, fuzzy @@ -26493,9 +26510,8 @@ msgid "Sample Partition Type" msgstr "Atur Jenis variabel" #: scene/resources/navigation_mesh.cpp -#, fuzzy msgid "Parsed Geometry Type" -msgstr "Mengurai Geometri..." +msgstr "Jenis Geometri yang Diuraikan" #: scene/resources/navigation_mesh.cpp msgid "Source Geometry Mode" @@ -26537,9 +26553,8 @@ msgid "Verts Per Poly" msgstr "" #: scene/resources/navigation_mesh.cpp -#, fuzzy msgid "Sample Distance" -msgstr "Pilih Jarak:" +msgstr "Jarak sampel" #: scene/resources/navigation_mesh.cpp #, fuzzy @@ -26599,14 +26614,12 @@ msgid "Color Modifier" msgstr "Pengubah Lambat Tampilan Bebas" #: scene/resources/particles_material.cpp -#, fuzzy msgid "Point Texture" -msgstr "Titik Emisi:" +msgstr "Tekstur Titik" #: scene/resources/particles_material.cpp -#, fuzzy msgid "Normal Texture" -msgstr "Sumber Emisi: " +msgstr "Texture Normal" #: scene/resources/particles_material.cpp #, fuzzy @@ -26619,9 +26632,8 @@ msgid "Point Count" msgstr "Tambah Port Masukan" #: scene/resources/particles_material.cpp -#, fuzzy msgid "Scale Random" -msgstr "Rasio Skala:" +msgstr "Skala Acak" #: scene/resources/particles_material.cpp #, fuzzy @@ -26637,9 +26649,8 @@ msgid "Absorbent" msgstr "" #: scene/resources/plane_shape.cpp -#, fuzzy msgid "Plane" -msgstr "Dataran:" +msgstr "Plane" #: scene/resources/primitive_meshes.cpp #, fuzzy @@ -26663,19 +26674,16 @@ msgid "Subdivide Depth" msgstr "" #: scene/resources/primitive_meshes.cpp -#, fuzzy msgid "Top Radius" -msgstr "Radius:" +msgstr "Radius Atas" #: scene/resources/primitive_meshes.cpp -#, fuzzy msgid "Bottom Radius" -msgstr "Kanan Bawah" +msgstr "Radius Bawah" #: scene/resources/primitive_meshes.cpp -#, fuzzy msgid "Left To Right" -msgstr "Kanan Atas" +msgstr "Kiri Ke Kanan" #: scene/resources/primitive_meshes.cpp msgid "Is Hemisphere" @@ -26699,9 +26707,8 @@ msgid "Custom Solver Bias" msgstr "" #: scene/resources/sky.cpp -#, fuzzy msgid "Radiance Size" -msgstr "Ukuran Garis Tepi:" +msgstr "Ukuran Pancaran" #: scene/resources/sky.cpp msgid "Panorama" @@ -26713,9 +26720,8 @@ msgid "Top Color" msgstr "Floor Selanjutnya" #: scene/resources/sky.cpp -#, fuzzy msgid "Horizon Color" -msgstr "Menyimpan File:" +msgstr "Warna Horizon" #: scene/resources/sky.cpp #, fuzzy @@ -26799,9 +26805,8 @@ msgid "Base Texture" msgstr "Hapus Tekstur" #: scene/resources/texture.cpp -#, fuzzy msgid "Image Size" -msgstr "Halaman: " +msgstr "Ukuran Gambar" #: scene/resources/texture.cpp #, fuzzy @@ -26814,14 +26819,12 @@ msgid "Lossy Storage Quality" msgstr "Tangkap" #: scene/resources/texture.cpp -#, fuzzy msgid "Fill From" -msgstr "Mode Putar:" +msgstr "Isi Dari" #: scene/resources/texture.cpp -#, fuzzy msgid "Fill To" -msgstr "Mode Putar:" +msgstr "Isi Ke" #: scene/resources/texture.cpp #, fuzzy @@ -26975,9 +26978,8 @@ msgid "Audio Stream" msgstr "Item Radio" #: servers/audio/audio_stream.cpp -#, fuzzy msgid "Random Pitch" -msgstr "Kemiringan Acak:" +msgstr "Pitch Acak" #: servers/audio/effects/audio_effect_capture.cpp #: servers/audio/effects/audio_effect_spectrum_analyzer.cpp @@ -27027,9 +27029,8 @@ msgstr "" #: servers/audio/effects/audio_effect_chorus.cpp #: servers/audio/effects/audio_effect_delay.cpp #: servers/audio/effects/audio_effect_panner.cpp -#, fuzzy msgid "Pan" -msgstr "Dataran:" +msgstr "Pan" #: servers/audio/effects/audio_effect_compressor.cpp #: servers/audio/effects/audio_effect_filter.cpp @@ -27125,9 +27126,8 @@ msgstr "" #: servers/audio/effects/audio_effect_pitch_shift.cpp #: servers/audio/effects/audio_effect_spectrum_analyzer.cpp -#, fuzzy msgid "FFT Size" -msgstr "Ukuran:" +msgstr "Ukuran FFT" #: servers/audio/effects/audio_effect_reverb.cpp msgid "Predelay" @@ -27223,9 +27223,8 @@ msgid "Time Before Sleep" msgstr "" #: servers/physics_2d/physics_2d_server_sw.cpp -#, fuzzy msgid "BP Hash Table Size" -msgstr "Ukuran:" +msgstr "Ukuran Tabel Hash BP" #: servers/physics_2d/physics_2d_server_sw.cpp msgid "Large Object Surface Threshold In Cells" @@ -27291,33 +27290,28 @@ msgid "Collision Normal" msgstr "Mode Tabrakan" #: servers/physics_2d_server.cpp servers/physics_server.cpp -#, fuzzy msgid "Collision Depth" -msgstr "Mode Tabrakan" +msgstr "Kedalaman Collision" #: servers/physics_2d_server.cpp servers/physics_server.cpp -#, fuzzy msgid "Collision Safe Fraction" -msgstr "Mode Tabrakan" +msgstr "Fraksi Aman Collision" #: servers/physics_2d_server.cpp servers/physics_server.cpp -#, fuzzy msgid "Collision Unsafe Fraction" -msgstr "Mode Tabrakan" +msgstr "Fraksi Tidak Aman Collision" #: servers/physics_server.cpp -#, fuzzy msgid "Center Of Mass" -msgstr "Kiri Tengah" +msgstr "Pusat Massa" #: servers/physics_server.cpp msgid "Principal Inertia Axes" msgstr "" #: servers/visual/shader_language.cpp -#, fuzzy msgid "Varying may not be assigned in the '%s' function." -msgstr "Variasi hanya bisa ditetapkan dalam fungsi vertex." +msgstr "Memvariasikan mungkin tidak ditetapkan dalam fungsi '%s'." #: servers/visual/shader_language.cpp msgid "" @@ -27344,53 +27338,44 @@ msgid "Constants cannot be modified." msgstr "Konstanta tidak dapat dimodifikasi." #: servers/visual/visual_server_scene.cpp -#, fuzzy msgid "Spatial Partitioning" -msgstr "Mempartisi..." +msgstr "Partisi Spatial" #: servers/visual_server.cpp -#, fuzzy msgid "Render Loop Enabled" -msgstr "Filter sinyal" +msgstr "Render Loop Diaktifkan" #: servers/visual_server.cpp -#, fuzzy msgid "VRAM Compression" -msgstr "Tetapkan ekspresi" +msgstr "Kompresi VRAM" #: servers/visual_server.cpp -#, fuzzy msgid "Import BPTC" -msgstr "Impor" +msgstr "Impor BPTC" #: servers/visual_server.cpp -#, fuzzy msgid "Import S3TC" -msgstr "Impor" +msgstr "Impor S3TC" #: servers/visual_server.cpp -#, fuzzy msgid "Import ETC" -msgstr "Impor" +msgstr "Impor ETC" #: servers/visual_server.cpp -#, fuzzy msgid "Import ETC2" -msgstr "Impor" +msgstr "Impor ETC2" #: servers/visual_server.cpp -#, fuzzy msgid "Import PVRTC" -msgstr "Impor Tema" +msgstr "Impor PVRTC" #: servers/visual_server.cpp msgid "Lossless Compression" msgstr "" #: servers/visual_server.cpp -#, fuzzy msgid "Force PNG" -msgstr "Sumber Mesh:" +msgstr "Paksa PNG" #: servers/visual_server.cpp msgid "WebP Compression Level" @@ -27401,9 +27386,8 @@ msgid "Time Rollover Secs" msgstr "" #: servers/visual_server.cpp -#, fuzzy msgid "Cubemap Size" -msgstr "Ubah Ukuran Kamera" +msgstr "Ukuran Cubemap" #: servers/visual_server.cpp msgid "Quadrant 0 Subdiv" @@ -27422,19 +27406,16 @@ msgid "Quadrant 3 Subdiv" msgstr "" #: servers/visual_server.cpp -#, fuzzy msgid "Shadows" -msgstr "Shader" +msgstr "Bayangan" #: servers/visual_server.cpp -#, fuzzy msgid "Filter Mode" -msgstr "Filter node" +msgstr "Mode Filter" #: servers/visual_server.cpp -#, fuzzy msgid "Texture Array Reflections" -msgstr "Seleksi Tengah" +msgstr "Refleksi Tekstur Array" #: servers/visual_server.cpp msgid "High Quality GGX" @@ -27445,9 +27426,8 @@ msgid "Irradiance Max Size" msgstr "" #: servers/visual_server.cpp -#, fuzzy msgid "Shading" -msgstr "Lapisan" +msgstr "Shading" #: servers/visual_server.cpp msgid "Force Vertex Shading" @@ -27466,9 +27446,8 @@ msgid "Mesh Storage" msgstr "" #: servers/visual_server.cpp -#, fuzzy msgid "Split Stream" -msgstr "Pisahkan Kurva" +msgstr "Stream Terpisah" #: servers/visual_server.cpp msgid "Use Physical Light Attenuation" @@ -27507,23 +27486,20 @@ msgid "Use Software Skinning" msgstr "" #: servers/visual_server.cpp -#, fuzzy msgid "Ninepatch Mode" -msgstr "Mode Interpolasi" +msgstr "Mode Ninepatch" #: servers/visual_server.cpp -#, fuzzy msgid "OpenGL" -msgstr "Buka" +msgstr "OpenGL" #: servers/visual_server.cpp msgid "Batching Send Null" msgstr "" #: servers/visual_server.cpp -#, fuzzy msgid "Batching Stream" -msgstr "Ubah Nama Massal" +msgstr "Batching Stream" #: servers/visual_server.cpp msgid "Legacy Orphan Buffers" @@ -27534,18 +27510,16 @@ msgid "Legacy Stream" msgstr "" #: servers/visual_server.cpp -#, fuzzy msgid "Batching" -msgstr "Mencari..." +msgstr "Batching" #: servers/visual_server.cpp msgid "Use Batching" -msgstr "" +msgstr "Gunakan Batching" #: servers/visual_server.cpp -#, fuzzy msgid "Use Batching In Editor" -msgstr "Memperbarui editor" +msgstr "Gunakan Batching Di Editor" #: servers/visual_server.cpp msgid "Single Rect Fallback" @@ -27564,9 +27538,8 @@ msgid "Scissor Area Threshold" msgstr "" #: servers/visual_server.cpp -#, fuzzy msgid "Max Join Items" -msgstr "Kelola Templat Ekspor…" +msgstr "Item Gabung Maks" #: servers/visual_server.cpp msgid "Batch Buffer Size" @@ -27581,13 +27554,12 @@ msgid "Flash Batching" msgstr "" #: servers/visual_server.cpp -#, fuzzy msgid "Diagnose Frame" -msgstr "Rekat Frame" +msgstr "Diagnosis Frame" #: servers/visual_server.cpp msgid "GLES2" -msgstr "" +msgstr "GLES2" #: servers/visual_server.cpp msgid "Compatibility" @@ -27598,14 +27570,12 @@ msgid "Disable Half Float" msgstr "" #: servers/visual_server.cpp -#, fuzzy msgid "Enable High Float" -msgstr "Aktifkan Prioritas" +msgstr "Aktifkan Float Tinggi" #: servers/visual_server.cpp -#, fuzzy msgid "Precision" -msgstr "Tetapkan ekspresi" +msgstr "Presisi" #: servers/visual_server.cpp msgid "UV Contract" @@ -27616,47 +27586,40 @@ msgid "UV Contract Amount" msgstr "" #: servers/visual_server.cpp -#, fuzzy msgid "Use Simple PVS" -msgstr "Gunakan Pengancingan Skala" +msgstr "Gunakan PVS Sederhana" #: servers/visual_server.cpp msgid "PVS Logging" msgstr "" #: servers/visual_server.cpp -#, fuzzy msgid "Use Signals" -msgstr "Sinyal" +msgstr "Gunakan Sinyal" #: servers/visual_server.cpp -#, fuzzy msgid "Remove Danglers" -msgstr "Hapus Tile" +msgstr "Hapus Danglers" #: servers/visual_server.cpp -#, fuzzy msgid "Flip Imported Portals" -msgstr "Balikkan Portal" +msgstr "Balik Portal Impor" #: servers/visual_server.cpp -#, fuzzy msgid "Occlusion Culling" -msgstr "Pengaturan Viewport" +msgstr "Pemusnahan Oklusi" #: servers/visual_server.cpp msgid "Max Active Spheres" -msgstr "" +msgstr "Bola Aktif Maks" #: servers/visual_server.cpp -#, fuzzy msgid "Max Active Polygons" -msgstr "Geser Poligon" +msgstr "Poligon Aktif Maks" #: servers/visual_server.cpp -#, fuzzy msgid "Shader Compilation Mode" -msgstr "Mode Interpolasi" +msgstr "Mode Kompilasi Shader" #: servers/visual_server.cpp msgid "Max Simultaneous Compiles" @@ -27667,6 +27630,5 @@ msgid "Log Active Async Compiles Count" msgstr "" #: servers/visual_server.cpp -#, fuzzy msgid "Shader Cache Size (MB)" -msgstr "Ubah Ukuran Kamera" +msgstr "Ukuran Cache Shader (MB)" diff --git a/editor/translations/is.po b/editor/translations/is.po index cc705e3310..f32c97384b 100644 --- a/editor/translations/is.po +++ b/editor/translations/is.po @@ -74,11 +74,12 @@ msgstr "" msgid "Screen Orientation" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "" @@ -86,7 +87,7 @@ msgstr "" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Fullscreen" msgstr "" @@ -98,7 +99,7 @@ msgstr "" msgid "Minimized" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -112,10 +113,11 @@ msgstr "" msgid "Position" msgstr "Val á kvarða" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -583,6 +585,39 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +msgid "Display" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +msgid "Height" +msgstr "" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +msgid "Test Width" +msgstr "" + +#: core/project_settings.cpp +msgid "Test Height" +msgstr "" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1178,7 +1213,7 @@ msgstr "" msgid "Update Mode (How this property is set)" msgstr "" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "" @@ -5824,6 +5859,11 @@ msgstr "" msgid "Flat" msgstr "" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "Breyta Viðbót" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "" @@ -15464,38 +15504,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -msgid "Display" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -msgid "Height" -msgstr "" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -msgid "Test Width" -msgstr "" - -#: main/main.cpp -msgid "Test Height" -msgstr "" - #: main/main.cpp msgid "DPI" msgstr "" @@ -19575,6 +19583,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp msgid "Build Mode" msgstr "" @@ -21229,7 +21242,7 @@ msgstr "" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -23254,6 +23267,11 @@ msgid "Pause Mode" msgstr "" #: scene/main/node.cpp +#, fuzzy +msgid "Physics Interpolation Mode" +msgstr "Breytingar á Anim track" + +#: scene/main/node.cpp msgid "Display Folded" msgstr "" @@ -23283,10 +23301,6 @@ msgstr "" msgid "Process Priority" msgstr "" -#: scene/main/node.cpp -msgid "Physics Interpolated" -msgstr "" - #: scene/main/scene_tree.cpp scene/main/timer.cpp msgid "Time Left" msgstr "" @@ -23928,6 +23942,11 @@ msgstr "" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "Stillið breyting á:" + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "Val á kvarða" @@ -24685,6 +24704,10 @@ msgid "Distance Field" msgstr "" #: scene/resources/gradient.cpp +msgid "Raw Data" +msgstr "" + +#: scene/resources/gradient.cpp msgid "Offsets" msgstr "" diff --git a/editor/translations/it.po b/editor/translations/it.po index 0ed67618f4..16a47de770 100644 --- a/editor/translations/it.po +++ b/editor/translations/it.po @@ -73,7 +73,7 @@ msgstr "" "Project-Id-Version: Godot Engine editor\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2022-04-30 23:27+0000\n" +"PO-Revision-Date: 2022-05-15 20:00+0000\n" "Last-Translator: Alessandro Casalino <alessandro.casalino93@gmail.com>\n" "Language-Team: Italian <https://hosted.weblate.org/projects/godot-engine/" "godot/it/>\n" @@ -82,7 +82,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.12.1\n" +"X-Generator: Weblate 4.13-dev\n" #: core/bind/core_bind.cpp main/main.cpp msgid "Tablet Driver" @@ -136,11 +136,12 @@ msgstr "Dimensione Massima Finestra" msgid "Screen Orientation" msgstr "Orientazione Schermo" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" msgstr "Finestra" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "Senza contorno" @@ -148,7 +149,7 @@ msgstr "Senza contorno" msgid "Per Pixel Transparency Enabled" msgstr "Trasparenza A Livello Di Pixel Abilitata" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Fullscreen" msgstr "Schermo intero" @@ -160,7 +161,7 @@ msgstr "Massimizzata" msgid "Minimized" msgstr "Minimizzata" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "Ridimensionabile" @@ -173,10 +174,11 @@ msgstr "Ridimensionabile" msgid "Position" msgstr "Posizione" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -626,6 +628,41 @@ msgstr "Utilizza Percorso Utente Personalizzato" msgid "Custom User Dir Name" msgstr "Nome Personalizzato del Percorso Utente" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +msgid "Display" +msgstr "Display" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "Larghezza" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +msgid "Height" +msgstr "Altezza" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "Sempre In Primo Piano" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Width" +msgstr "Larghezza Test" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Height" +msgstr "Altezza Test" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1203,7 +1240,7 @@ msgstr "Abilita/Disabilita questa traccia." msgid "Update Mode (How this property is set)" msgstr "Modalità di aggiornamento (come viene impostata questa proprietà )" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "Modalità d'interpolazione" @@ -4349,7 +4386,7 @@ msgstr "Explorer di risorse orfane…" #: editor/editor_node.cpp msgid "Reload Current Project" -msgstr "Rinomina il progetto corrente" +msgstr "Ricarica il Progetto Corrente" #: editor/editor_node.cpp msgid "Quit to Project List" @@ -5996,6 +6033,11 @@ msgstr "" msgid "Flat" msgstr "Flat" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "Modalità Collisioni" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "Scegli Nodo(i) da Importare" @@ -6992,14 +7034,12 @@ msgid "Saving..." msgstr "Salvataggio..." #: editor/import/resource_importer_texture.cpp -#, fuzzy msgid "2D, Detect 3D" -msgstr "Rileva 3D" +msgstr "2D, Rileva 3D" #: editor/import/resource_importer_texture.cpp -#, fuzzy msgid "2D Pixel" -msgstr "Pixel Solidi" +msgstr "Pixel 2D" #: editor/import/resource_importer_texture.cpp scene/resources/texture.cpp msgid "Lossy Quality" @@ -7769,9 +7809,8 @@ msgid "New" msgstr "Nuovo" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Paste As Reference" -msgstr "%s Riferimento di classe" +msgstr "Incolla Come Reference" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Edit Transitions..." @@ -8334,7 +8373,7 @@ msgstr "Testing" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Failed to get repository configuration." -msgstr "" +msgstr "Impossibile recuperare la configurazione del repository." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Assets ZIP File" @@ -9435,7 +9474,7 @@ msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy msgid "Create Simplified Convex Collision Sibling" -msgstr "Crea Singolo Fratello di Collisione Convessa" +msgstr "Crea Fratello di Collisione Convessa Semplificato" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "" @@ -9466,17 +9505,16 @@ msgid "Create Outline Mesh..." msgstr "Crea Mesh di Outline..." #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "" "Creates a static outline mesh. The outline mesh will have its normals " "flipped automatically.\n" "This can be used instead of the SpatialMaterial Grow property when using " "that property isn't possible." msgstr "" -"Crea intorno una mesh statica. Questa mesh avrà le suoe normali invertite " +"Crea una mesh di contorno statica. Questa mesh avrà le sue normali invertite " "automaticamente.\n" -"Questo puó essere usato come sostitutivo per la proprietà Grow (ingrandisci) " -"delle SpatialMaterial quando questa non é disponibile." +"Può essere utilizzata al posto della proprietà Grow (ingrandisci) delle " +"SpatialMaterial quando questa non è disponibile." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" @@ -10075,7 +10113,7 @@ msgstr "Sincronizza Ossa a Poligono" #: editor/plugins/ray_cast_2d_editor_plugin.cpp msgid "Set cast_to" -msgstr "" +msgstr "Imposta cast_to" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "ERROR: Couldn't load resource!" @@ -10128,9 +10166,8 @@ msgid "ResourcePreloader" msgstr "ResourcePreloader" #: editor/plugins/room_manager_editor_plugin.cpp -#, fuzzy msgid "Flip Portals" -msgstr "Ribalta orizzontalmente" +msgstr "Ribalta Portali" #: editor/plugins/room_manager_editor_plugin.cpp msgid "Room Generate Points" @@ -10141,14 +10178,13 @@ msgid "Generate Points" msgstr "Genera punti" #: editor/plugins/room_manager_editor_plugin.cpp -#, fuzzy msgid "Flip Portal" -msgstr "Ribalta orizzontalmente" +msgstr "Ribalta Portale" #: editor/plugins/room_manager_editor_plugin.cpp #, fuzzy msgid "Occluder Set Transform" -msgstr "Azzera la trasformazione" +msgstr "Trasformazione dell'Insieme dell'Occlusore" #: editor/plugins/room_manager_editor_plugin.cpp msgid "Center Node" @@ -10337,7 +10373,7 @@ msgstr "Importa tema..." #: editor/plugins/script_editor_plugin.cpp msgid "Reload Theme" -msgstr "Ricarica tema" +msgstr "Ricarica Tema" #: editor/plugins/script_editor_plugin.cpp msgid "Save Theme" @@ -10438,9 +10474,8 @@ msgid "Exec Path" msgstr "Percorso di Esecuzione" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Script Temperature Enabled" -msgstr "Seleziona File Modello" +msgstr "Temperatura dello Script Abilitata" #: editor/plugins/script_editor_plugin.cpp msgid "Highlight Current Script" @@ -10448,7 +10483,7 @@ msgstr "Evidenzia Script Attuale" #: editor/plugins/script_editor_plugin.cpp msgid "Script Temperature History Size" -msgstr "" +msgstr "Dimensione Storico della Temperatura dello Script" #: editor/plugins/script_editor_plugin.cpp msgid "Current Script Background Color" @@ -10705,9 +10740,8 @@ msgid "Reset to Rest Pose" msgstr "Ripristina a Posizione di Riposo" #: editor/plugins/skeleton_2d_editor_plugin.cpp -#, fuzzy msgid "Overwrite Rest Pose" -msgstr "Sovrascrivi Scena esistente" +msgstr "Sovrascrivi Posa a Riposo" #: editor/plugins/skeleton_editor_plugin.cpp msgid "Create physical bones" @@ -10790,7 +10824,6 @@ msgstr " [auto]" #. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid " [portals active]" msgstr " [portali attivi]" @@ -10887,7 +10920,6 @@ msgid "Vertices:" msgstr "Vertici:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "FPS: %d (%s ms)" msgstr "FPS: %d (%s ms)" @@ -11095,8 +11127,9 @@ msgid "Use Snap" msgstr "Usa Scatto" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy msgid "Converts rooms for portal culling." -msgstr "" +msgstr "Converte stanze per culling del portale." #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" @@ -11294,12 +11327,14 @@ msgid "Post" msgstr "Post" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy msgid "Manipulator Gizmo Size" -msgstr "" +msgstr "Dimensione Gizmo Di Controllo" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy msgid "Manipulator Gizmo Opacity" -msgstr "" +msgstr "Opacità Gizmo Di Controllo" #: editor/plugins/spatial_editor_plugin.cpp msgid "Show Viewport Rotation Gizmo" @@ -11754,15 +11789,17 @@ msgid "" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove Type" -msgstr "Rimuovi Tile" +msgstr "Rimuovi Tipo" #: 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 "" +"Seleziona un tipo di tema dalla lista per editare i suoi elementi.\n" +"Puoi aggiungere un tipo personalizzato o importare un tipo con i suoi " +"elementi da un altro tema." #: editor/plugins/theme_editor_plugin.cpp msgid "Remove All Color Items" @@ -11797,14 +11834,12 @@ msgstr "" "Aggiungici più elementi manualmente o importando da un altro tema." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Theme Type" -msgstr "Aggiungi Tipo Elemento" +msgstr "Aggiungi Tipo Di Tema" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove Theme Type" -msgstr "Rimuovi da Remoto" +msgstr "Rimuovi Tipo Di Tema" #: editor/plugins/theme_editor_plugin.cpp msgid "Add Color Item" @@ -12002,12 +12037,15 @@ msgstr "Sovrascrivi tutti gli elementi predefiniti." #: editor/plugins/theme_editor_plugin.cpp msgid "Select the variation base type from a list of available types." msgstr "" +"Seleziona la variazione del tipo base da una lista di tipi disponibili." #: editor/plugins/theme_editor_plugin.cpp msgid "" "A type associated with a built-in class cannot be marked as a variation of " "another type." msgstr "" +"Un tipo associato ad una classe integrata non può essere indicato come " +"variazione di un altro tipo." #: editor/plugins/theme_editor_plugin.cpp msgid "Theme:" @@ -12034,10 +12072,13 @@ msgid "Select UI Scene:" msgstr "Seleziona Scena UI:" #: editor/plugins/theme_editor_preview.cpp +#, fuzzy msgid "" "Toggle the control picker, allowing to visually select control types for " "edit." msgstr "" +"Alterna il picker di controllo, permettendo di selezionare visualmente i " +"tipi di controllo per la modifica." #: editor/plugins/theme_editor_preview.cpp msgid "Toggle Button" @@ -15014,14 +15055,12 @@ msgid "Another node already uses this unique name in the scene." msgstr "" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Enable Scene Unique Name" -msgstr "Nome del Nodo:" +msgstr "Abilita Nome Unico Scena" #: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -#, fuzzy msgid "Disable Scene Unique Name" -msgstr "Nome del Nodo:" +msgstr "Disabilita Nome Unico Scena" #: editor/scene_tree_dock.cpp msgid "New Scene Root" @@ -15097,7 +15136,7 @@ msgstr "Sotto-Risorse" #: editor/scene_tree_dock.cpp msgid "Access as Scene Unique Name" -msgstr "" +msgstr "Accedi come Nome Unico Scena" #: editor/scene_tree_dock.cpp msgid "Clear Inheritance" @@ -15204,8 +15243,9 @@ msgid "Show Scene Tree Root Selection" msgstr "Mostra Selezione del Tree Root di Scena" #: editor/scene_tree_dock.cpp +#, fuzzy msgid "Derive Script Globals By Name" -msgstr "" +msgstr "Ricava Script Globali Dal Nome" #: editor/scene_tree_dock.cpp msgid "Use Favorites Root Selection" @@ -15237,6 +15277,9 @@ msgid "" "with the '%s' prefix in a node path.\n" "Click to disable this." msgstr "" +"Si può accedere a questo nodo da qualcunque punto della scena facendolo " +"precedere dal prefisso '%s' in un percorso di nodo.\n" +"Clicca per disabilitarlo." #: editor/scene_tree_editor.cpp msgid "" @@ -15752,17 +15795,16 @@ msgid "Set Room Point Position" msgstr "Imposta Posizione Punto Stanza" #: editor/spatial_editor_gizmos.cpp scene/3d/portal.cpp -#, fuzzy msgid "Portal Margin" msgstr "Margine del Portale" #: editor/spatial_editor_gizmos.cpp msgid "Portal Edge" -msgstr "" +msgstr "Confine del Portale" #: editor/spatial_editor_gizmos.cpp msgid "Portal Arrow" -msgstr "" +msgstr "Freccia del Portale" #: editor/spatial_editor_gizmos.cpp msgid "Set Portal Point Position" @@ -15899,43 +15941,9 @@ msgstr "Ripiega Su GLES2" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -msgid "Display" -msgstr "Display" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "Larghezza" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -msgid "Height" -msgstr "Altezza" - -#: main/main.cpp -msgid "Always On Top" -msgstr "Sempre In Primo Piano" - -#: main/main.cpp -#, fuzzy -msgid "Test Width" -msgstr "Larghezza Test" - -#: main/main.cpp -#, fuzzy -msgid "Test Height" -msgstr "Altezza Test" - #: main/main.cpp msgid "DPI" -msgstr "" +msgstr "DPI" #: main/main.cpp msgid "Allow hiDPI" @@ -16035,9 +16043,8 @@ msgid "Physics Interpolation" msgstr "Modalità d'interpolazione" #: main/main.cpp -#, fuzzy msgid "Enable Warnings" -msgstr "Abilita filtraggio" +msgstr "Abilita Avvertimenti" #: main/main.cpp msgid "Frame Delay Msec" @@ -16057,7 +16064,7 @@ msgstr "" #: main/main.cpp msgid "Hide Home Indicator" -msgstr "" +msgstr "Nascondi Indicatore Home" #: main/main.cpp msgid "Input Devices" @@ -16092,12 +16099,13 @@ msgid "Environment" msgstr "Ambiente" #: main/main.cpp +#, fuzzy msgid "Default Clear Color" -msgstr "" +msgstr "Colore Di Cancellamento Di Default" #: main/main.cpp msgid "Boot Splash" -msgstr "" +msgstr "Sfondo Di Avvio" #: main/main.cpp msgid "Show Image" @@ -16156,9 +16164,8 @@ msgid "Custom Image Hotspot" msgstr "" #: main/main.cpp -#, fuzzy msgid "Tooltip Position Offset" -msgstr "Scostamento della rotazione:" +msgstr "Suggerimento Scostamento Posizione" #: main/main.cpp modules/mono/mono_gd/gd_mono.cpp msgid "Debugger Agent" @@ -16328,7 +16335,6 @@ msgid "Polygon" msgstr "Poligono" #: modules/csg/csg_shape.cpp -#, fuzzy msgid "Spin Degrees" msgstr "Gradi di Rotazione" @@ -16337,9 +16343,8 @@ msgid "Spin Sides" msgstr "" #: modules/csg/csg_shape.cpp -#, fuzzy msgid "Path Node" -msgstr "Incolla nodi" +msgstr "Percorso Nodo" #: modules/csg/csg_shape.cpp #, fuzzy @@ -16518,16 +16523,15 @@ msgstr "GDScript" #: modules/gdscript/editor/gdscript_highlighter.cpp msgid "Function Definition Color" -msgstr "" +msgstr "Colore Definizione Funzione" #: modules/gdscript/editor/gdscript_highlighter.cpp -#, fuzzy msgid "Node Path Color" -msgstr "Copia percorso del nodo" +msgstr "Colore Percorso Nodo" #: modules/gdscript/gdscript.cpp modules/visual_script/visual_script.cpp msgid "Max Call Stack" -msgstr "" +msgstr "Max Chiamate In Coda" #: modules/gdscript/gdscript.cpp msgid "Treat Warnings As Errors" @@ -16539,7 +16543,7 @@ msgstr "Escludi Componenti Aggiuntivi" #: modules/gdscript/gdscript.cpp msgid "Autocomplete Setters And Getters" -msgstr "" +msgstr "Autocompleta Setters E Getters" #: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" @@ -16590,7 +16594,7 @@ msgstr "Abilita Risoluzione Intelligente" #: modules/gdscript/language_server/gdscript_language_server.cpp msgid "Show Native Symbols In Editor" -msgstr "" +msgstr "Mostra Simboli Nativi Nell'Editor" #: modules/gdscript/language_server/gdscript_language_server.cpp msgid "Use Thread" @@ -16629,14 +16633,12 @@ msgid "Min" msgstr "Min" #: modules/gltf/gltf_accessor.cpp scene/resources/visual_shader_nodes.cpp -#, fuzzy msgid "Max" -msgstr "Mischia" +msgstr "Max" #: modules/gltf/gltf_accessor.cpp -#, fuzzy msgid "Sparse Count" -msgstr "Istanza" +msgstr "Conteggio Sparso" #: modules/gltf/gltf_accessor.cpp msgid "Sparse Indices Buffer View" @@ -16659,18 +16661,16 @@ msgid "Sparse Values Byte Offset" msgstr "" #: modules/gltf/gltf_buffer_view.cpp -#, fuzzy msgid "Buffer" -msgstr "Vista dal retro" +msgstr "Buffer" #: modules/gltf/gltf_buffer_view.cpp -#, fuzzy msgid "Byte Length" -msgstr "Tema Predefinito" +msgstr "Lunghezza Byte" #: modules/gltf/gltf_buffer_view.cpp msgid "Byte Stride" -msgstr "" +msgstr "Stride Byte" #: modules/gltf/gltf_buffer_view.cpp msgid "Indices" @@ -16717,9 +16717,8 @@ msgid "Outer Cone Angle" msgstr "Angolo Cono Esterno" #: modules/gltf/gltf_mesh.cpp -#, fuzzy msgid "Blend Weights" -msgstr "Preprocessa Lightmaps" +msgstr "Sfuma Pesi" #: modules/gltf/gltf_mesh.cpp msgid "Instance Materials" @@ -16745,32 +16744,28 @@ msgstr "Traslazione" #: modules/gltf/gltf_node.cpp scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp #: scene/2d/remote_transform_2d.cpp scene/3d/remote_transform.cpp #: scene/3d/spatial.cpp scene/gui/control.cpp scene/main/canvas_layer.cpp -#, fuzzy msgid "Rotation" -msgstr "Passo di rotazione:" +msgstr "Rotazione" #: modules/gltf/gltf_node.cpp -#, fuzzy msgid "Children" -msgstr "Figli Modificabili" +msgstr "Figli" #: modules/gltf/gltf_skeleton.cpp modules/gltf/gltf_skin.cpp -#, fuzzy msgid "Joints" -msgstr "Punto" +msgstr "Articolazioni" #: modules/gltf/gltf_skeleton.cpp modules/gltf/gltf_skin.cpp msgid "Roots" -msgstr "" +msgstr "Radici" #: modules/gltf/gltf_skeleton.cpp modules/gltf/gltf_state.cpp msgid "Unique Names" -msgstr "" +msgstr "Nomi Unici" #: modules/gltf/gltf_skeleton.cpp -#, fuzzy msgid "Godot Bone Node" -msgstr "Nodo TimeScale" +msgstr "Nodo Osso Godot" #: modules/gltf/gltf_skin.cpp #, fuzzy @@ -16787,9 +16782,8 @@ msgid "Inverse Binds" msgstr "" #: modules/gltf/gltf_skin.cpp -#, fuzzy msgid "Non Joints" -msgstr "Sposta Articolazione" +msgstr "Non Articolazioni" #: modules/gltf/gltf_skin.cpp msgid "Joint I To Bone I" @@ -16801,19 +16795,19 @@ msgstr "" #: modules/gltf/gltf_skin.cpp msgid "Godot Skin" -msgstr "" +msgstr "Skin Godot" #: modules/gltf/gltf_spec_gloss.cpp msgid "Diffuse Img" -msgstr "" +msgstr "Immagine Diffuse" #: modules/gltf/gltf_spec_gloss.cpp msgid "Diffuse Factor" -msgstr "" +msgstr "Coefficiente Diffuse" #: modules/gltf/gltf_spec_gloss.cpp msgid "Gloss Factor" -msgstr "" +msgstr "Coefficiente Gloss" #: modules/gltf/gltf_spec_gloss.cpp msgid "Specular Factor" @@ -16821,26 +16815,23 @@ msgstr "Coefficiente Speculare" #: modules/gltf/gltf_spec_gloss.cpp msgid "Spec Gloss Img" -msgstr "" +msgstr "Immagine Gloss Speculare" #: modules/gltf/gltf_state.cpp msgid "Json" msgstr "" #: modules/gltf/gltf_state.cpp -#, fuzzy msgid "Major Version" -msgstr "Versione" +msgstr "Versione Principale" #: modules/gltf/gltf_state.cpp -#, fuzzy msgid "Minor Version" -msgstr "Versione" +msgstr "Versione Minore" #: modules/gltf/gltf_state.cpp -#, fuzzy msgid "GLB Data" -msgstr "Con i Dati" +msgstr "Dati GLB" #: modules/gltf/gltf_state.cpp msgid "Use Named Skin Binds" @@ -16853,107 +16844,92 @@ msgstr "Vista dal retro" #: modules/gltf/gltf_state.cpp msgid "Accessors" -msgstr "" +msgstr "Accessori" #: modules/gltf/gltf_state.cpp -#, fuzzy msgid "Scene Name" -msgstr "Percorso Scena:" +msgstr "Nome Scena" #: modules/gltf/gltf_state.cpp -#, fuzzy msgid "Root Nodes" -msgstr "Nome del nodo radice" +msgstr "Nodi Radice" #: modules/gltf/gltf_state.cpp scene/2d/particles_2d.cpp #: scene/gui/texture_button.cpp scene/gui/texture_progress.cpp #: scene/resources/font.cpp -#, fuzzy msgid "Textures" -msgstr "Funzionalità " +msgstr "Textures" #: modules/gltf/gltf_state.cpp platform/uwp/export/export.cpp msgid "Images" -msgstr "" +msgstr "Immagini" #: modules/gltf/gltf_state.cpp msgid "Cameras" -msgstr "" +msgstr "Telecamere" #: modules/gltf/gltf_state.cpp servers/visual_server.cpp -#, fuzzy msgid "Lights" -msgstr "Luce" +msgstr "Luci" #: modules/gltf/gltf_state.cpp -#, fuzzy msgid "Unique Animation Names" -msgstr "Nuovo Nome Animazione:" +msgstr "Nomi Unici Di Animazione" #: modules/gltf/gltf_state.cpp -#, fuzzy msgid "Skeletons" -msgstr "Scheletro" +msgstr "Scheletri" #: modules/gltf/gltf_state.cpp -#, fuzzy msgid "Skeleton To Node" -msgstr "Scegli un Nodo" +msgstr "Da Scheletro A Nodo" #: modules/gltf/gltf_state.cpp scene/2d/animated_sprite.cpp -#, fuzzy msgid "Animations" -msgstr "Animazioni:" +msgstr "Animazioni" #: modules/gltf/gltf_texture.cpp -#, fuzzy msgid "Src Image" -msgstr "Mostra Ossa" +msgstr "Risorsa Immagine" #: modules/gridmap/grid_map.cpp msgid "Mesh Library" msgstr "Libreria Mesh" #: modules/gridmap/grid_map.cpp -#, fuzzy msgid "Physics Material" -msgstr "Fotogramma fisico %" +msgstr "Materiale Fisico" #: modules/gridmap/grid_map.cpp scene/3d/visual_instance.cpp -#, fuzzy msgid "Use In Baked Light" -msgstr "Preprocessa Lightmaps" +msgstr "Utilizza in Luce Preprocessata" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp #: scene/resources/navigation_mesh.cpp msgid "Cell" -msgstr "" +msgstr "Cella" #: modules/gridmap/grid_map.cpp -#, fuzzy msgid "Octant Size" -msgstr "Vista frontale" +msgstr "Dimensione Ottante" #: modules/gridmap/grid_map.cpp -#, fuzzy msgid "Center X" -msgstr "Centro" +msgstr "Centra X" #: modules/gridmap/grid_map.cpp -#, fuzzy msgid "Center Y" -msgstr "Centro" +msgstr "Centra Y" #: modules/gridmap/grid_map.cpp -#, fuzzy msgid "Center Z" -msgstr "Centro" +msgstr "Centra Z" #: modules/gridmap/grid_map.cpp scene/2d/collision_object_2d.cpp #: scene/2d/tile_map.cpp scene/3d/collision_object.cpp scene/3d/soft_body.cpp #: scene/resources/material.cpp msgid "Mask" -msgstr "" +msgstr "Maschera" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" @@ -16997,9 +16973,8 @@ msgid "GridMap Paint" msgstr "GridMap Riempi" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Selection" -msgstr "GridMap Riempi Selezione" +msgstr "Selezione GridMap" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Snap View" @@ -17122,40 +17097,38 @@ msgstr "Preprocessa Lightmaps" #: modules/lightmapper_cpu/register_types.cpp msgid "Low Quality Ray Count" -msgstr "" +msgstr "Contaggio Raggi Qualità Bassa" #: modules/lightmapper_cpu/register_types.cpp msgid "Medium Quality Ray Count" -msgstr "" +msgstr "Conteggio Raggi Qualità Media" #: modules/lightmapper_cpu/register_types.cpp msgid "High Quality Ray Count" -msgstr "" +msgstr "Conteggio Raggi Qualità Alta" #: modules/lightmapper_cpu/register_types.cpp msgid "Ultra Quality Ray Count" -msgstr "" +msgstr "Conteggio Raggi Qualità Ultra" #: modules/minimp3/audio_stream_mp3.cpp #: modules/minimp3/resource_importer_mp3.cpp #: modules/stb_vorbis/audio_stream_ogg_vorbis.cpp #: modules/stb_vorbis/resource_importer_ogg_vorbis.cpp -#, fuzzy msgid "Loop Offset" -msgstr "Scostamento:" +msgstr "Scostamento Loop" #: modules/mobile_vr/mobile_vr_interface.cpp msgid "Eye Height" -msgstr "" +msgstr "Altezza Occhio" #: modules/mobile_vr/mobile_vr_interface.cpp msgid "IOD" msgstr "" #: modules/mobile_vr/mobile_vr_interface.cpp -#, fuzzy msgid "Display Width" -msgstr "Mostra Wireframe" +msgstr "Larghezza Display" #: modules/mobile_vr/mobile_vr_interface.cpp #, fuzzy @@ -17183,9 +17156,8 @@ msgid "Build Solution" msgstr "Crea Soluzione" #: modules/mono/editor/csharp_project.cpp -#, fuzzy msgid "Auto Update Project" -msgstr "Progetto Senza Nome" +msgstr "Auto-Aggiorna Progetto" #: modules/mono/mono_gd/gd_mono_utils.cpp #, fuzzy @@ -17261,56 +17233,51 @@ msgstr "Fatto!" #: modules/opensimplex/noise_texture.cpp msgid "Seamless" -msgstr "" +msgstr "Senza cuciture" #: modules/opensimplex/noise_texture.cpp -#, fuzzy msgid "As Normal Map" -msgstr "Scala Casuale:" +msgstr "Come Normal Map" #: modules/opensimplex/noise_texture.cpp msgid "Bump Strength" -msgstr "" +msgstr "Intensità Bump" #: modules/opensimplex/noise_texture.cpp msgid "Noise" -msgstr "" +msgstr "Rumore" #: modules/opensimplex/noise_texture.cpp -#, fuzzy msgid "Noise Offset" -msgstr "Scostamento della griglia:" +msgstr "Scostamento Rumore" #: modules/opensimplex/open_simplex_noise.cpp msgid "Octaves" -msgstr "" +msgstr "Ottave" #: modules/opensimplex/open_simplex_noise.cpp msgid "Period" -msgstr "" +msgstr "Periodo" #: modules/opensimplex/open_simplex_noise.cpp -#, fuzzy msgid "Persistence" -msgstr "Prospettica" +msgstr "Persistenza" #: modules/opensimplex/open_simplex_noise.cpp msgid "Lacunarity" -msgstr "" +msgstr "Lacunarietà " #: modules/regex/regex.cpp msgid "Subject" -msgstr "" +msgstr "Soggetto" #: modules/regex/regex.cpp -#, fuzzy msgid "Names" -msgstr "Nome" +msgstr "Nomi" #: modules/regex/regex.cpp -#, fuzzy msgid "Strings" -msgstr "Impostazioni:" +msgstr "Stringhe" #: modules/upnp/upnp.cpp msgid "Discover Multicast If" @@ -17325,14 +17292,12 @@ msgid "Discover IPv6" msgstr "" #: modules/upnp/upnp_device.cpp -#, fuzzy msgid "Description URL" -msgstr "Descrizione" +msgstr "Descrizione URL" #: modules/upnp/upnp_device.cpp -#, fuzzy msgid "Service Type" -msgstr "Imposta Tipo di Variabile" +msgstr "Tipo Di Servizio" #: modules/upnp/upnp_device.cpp msgid "IGD Control URL" @@ -17731,19 +17696,17 @@ msgid "Return Enabled" msgstr "Eseguibile" #: modules/visual_script/visual_script_flow_control.cpp -#, fuzzy msgid "Return Type" -msgstr "Tipo di membro" +msgstr "Tipo di Ritorno" #: modules/visual_script/visual_script_flow_control.cpp #: scene/resources/visual_shader_nodes.cpp -#, fuzzy msgid "Condition" msgstr "Condizione" #: modules/visual_script/visual_script_flow_control.cpp msgid "if (cond) is:" -msgstr "" +msgstr "if (cond) is:" #: modules/visual_script/visual_script_flow_control.cpp msgid "While" @@ -17755,7 +17718,7 @@ msgstr "" #: modules/visual_script/visual_script_flow_control.cpp msgid "Iterator" -msgstr "" +msgstr "Iteratore" #: modules/visual_script/visual_script_flow_control.cpp msgid "for (elem) in (input):" @@ -17775,12 +17738,11 @@ msgstr "L'iteratore è diventato invalido: " #: modules/visual_script/visual_script_flow_control.cpp msgid "Sequence" -msgstr "" +msgstr "Sequenza" #: modules/visual_script/visual_script_flow_control.cpp -#, fuzzy msgid "in order:" -msgstr "Rinomina cartella:" +msgstr "in ordine:" #: modules/visual_script/visual_script_flow_control.cpp #, fuzzy @@ -17793,7 +17755,7 @@ msgstr "Inverti" #: modules/visual_script/visual_script_flow_control.cpp msgid "'input' is:" -msgstr "" +msgstr "'input' è:" #: modules/visual_script/visual_script_flow_control.cpp #, fuzzy @@ -17802,41 +17764,36 @@ msgstr "Tipo:" #: modules/visual_script/visual_script_flow_control.cpp msgid "Is %s?" -msgstr "" +msgstr "È %s?" #: modules/visual_script/visual_script_flow_control.cpp #: modules/visual_script/visual_script_func_nodes.cpp -#, fuzzy msgid "Base Script" -msgstr "Nuovo script" +msgstr "Script Base" #: modules/visual_script/visual_script_func_nodes.cpp msgid "On %s" -msgstr "" +msgstr "Su %s" #: modules/visual_script/visual_script_func_nodes.cpp -#, fuzzy msgid "On Self" -msgstr "Proprio" +msgstr "Su se stesso" #: modules/visual_script/visual_script_func_nodes.cpp #: modules/visual_script/visual_script_yield_nodes.cpp -#, fuzzy msgid "Call Mode" -msgstr "Modalità scala" +msgstr "Modalità Chiamata" #: modules/visual_script/visual_script_func_nodes.cpp #: modules/visual_script/visual_script_nodes.cpp -#, fuzzy msgid "Basic Type" -msgstr "Cambia Tipo di Base" +msgstr "Tipo Base" #: modules/visual_script/visual_script_func_nodes.cpp #: modules/visual_script/visual_script_nodes.cpp #: modules/visual_script/visual_script_yield_nodes.cpp -#, fuzzy msgid "Node Path" -msgstr "Copia percorso del nodo" +msgstr "Percorso Nodo" #: modules/visual_script/visual_script_func_nodes.cpp #, fuzzy @@ -17844,14 +17801,12 @@ msgid "Argument Cache" msgstr "Cambia nome Argomento" #: modules/visual_script/visual_script_func_nodes.cpp -#, fuzzy msgid "Use Default Args" -msgstr "Ripristinare le impostazioni predefinite" +msgstr "Utilizza Argomenti Predefiniti" #: modules/visual_script/visual_script_func_nodes.cpp -#, fuzzy msgid "Validate" -msgstr "Caratteri validi:" +msgstr "Valida" #: modules/visual_script/visual_script_func_nodes.cpp #, fuzzy @@ -17859,36 +17814,32 @@ msgid "RPC Call Mode" msgstr "Modalità scala" #: modules/visual_script/visual_script_func_nodes.cpp -#, fuzzy msgid "Subtract %s" -msgstr "Al carattere %s" +msgstr "Sottrai %s" #: modules/visual_script/visual_script_func_nodes.cpp msgid "Multiply %s" -msgstr "" +msgstr "Moltiplica %s" #: modules/visual_script/visual_script_func_nodes.cpp msgid "Divide %s" -msgstr "" +msgstr "Dividi %s" #: modules/visual_script/visual_script_func_nodes.cpp -#, fuzzy msgid "Mod %s" -msgstr "Aggiungi %s" +msgstr "Modulo %s" #: modules/visual_script/visual_script_func_nodes.cpp -#, fuzzy msgid "ShiftLeft %s" -msgstr "Imposta %s" +msgstr "ShiftLeft %s" #: modules/visual_script/visual_script_func_nodes.cpp msgid "ShiftRight %s" msgstr "" #: modules/visual_script/visual_script_func_nodes.cpp -#, fuzzy msgid "BitAnd %s" -msgstr "Aggiungi %s" +msgstr "BitAnd %s" #: modules/visual_script/visual_script_func_nodes.cpp msgid "BitOr %s" @@ -18100,12 +18051,11 @@ msgstr "Fotogramma Fisico Successivo" #: modules/visual_script/visual_script_yield_nodes.cpp msgid "%s sec(s)" -msgstr "" +msgstr "%s secondi(s)" #: modules/visual_script/visual_script_yield_nodes.cpp scene/main/timer.cpp -#, fuzzy msgid "Wait Time" -msgstr "Disegna tile" +msgstr "Tempo Di Attesa" #: modules/visual_script/visual_script_yield_nodes.cpp #, fuzzy @@ -18138,11 +18088,11 @@ msgstr "Dimensione Index Buffer dei Poligoni nel Canvas (KB)" #: modules/websocket/websocket_client.cpp msgid "Verify SSL" -msgstr "" +msgstr "Verifica SSL" #: modules/websocket/websocket_client.cpp msgid "Trusted SSL Certificate" -msgstr "" +msgstr "Certificato SSL Fidato" #: modules/websocket/websocket_macros.h #, fuzzy @@ -18177,13 +18127,12 @@ msgid "Bind IP" msgstr "" #: modules/websocket/websocket_server.cpp -#, fuzzy msgid "Private Key" -msgstr "Tasto Fisico" +msgstr "Chiave Privata" #: modules/websocket/websocket_server.cpp platform/javascript/export/export.cpp msgid "SSL Certificate" -msgstr "" +msgstr "Certificato SSL" #: modules/websocket/websocket_server.cpp #, fuzzy @@ -18195,19 +18144,16 @@ msgid "Handshake Timeout" msgstr "Timeout Handshake" #: modules/webxr/webxr_interface.cpp -#, fuzzy msgid "Session Mode" -msgstr "Modalità Regione" +msgstr "Modalità Sessione" #: modules/webxr/webxr_interface.cpp -#, fuzzy msgid "Required Features" -msgstr "Funzionalità Principali:" +msgstr "Funzionalità Richieste" #: modules/webxr/webxr_interface.cpp -#, fuzzy msgid "Optional Features" -msgstr "Funzionalità Principali:" +msgstr "Funzionalità Opzionali" #: modules/webxr/webxr_interface.cpp msgid "Requested Reference Space Types" @@ -18218,14 +18164,12 @@ msgid "Reference Space Type" msgstr "" #: modules/webxr/webxr_interface.cpp -#, fuzzy msgid "Visibility State" -msgstr "Commuta visibilità " +msgstr "Stato Visibilità " #: modules/webxr/webxr_interface.cpp -#, fuzzy msgid "Bounds Geometry" -msgstr "Riprova" +msgstr "Confini Geometria" #: modules/webxr/webxr_interface.cpp #, fuzzy @@ -18234,7 +18178,7 @@ msgstr "Agganciamento Intelligente" #: platform/android/export/export.cpp msgid "Android SDK Path" -msgstr "" +msgstr "Percorso SDK Android" #: platform/android/export/export.cpp #, fuzzy @@ -18251,7 +18195,7 @@ msgstr "" #: platform/android/export/export.cpp msgid "Force System User" -msgstr "" +msgstr "Forza Utente System" #: platform/android/export/export.cpp msgid "Shutdown ADB On Exit" @@ -18287,19 +18231,16 @@ msgid "The package must have at least one '.' separator." msgstr "Il pacchetto deve avere almeno un \".\" separatore." #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "Use Custom Build" -msgstr "Utilizza Percorso Utente Personalizzato" +msgstr "Utilizza Build Personalizzata" #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "Export Format" -msgstr "Percorso di Esportazione" +msgstr "Formato Esportazione" #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "Keystore" -msgstr "Debugger" +msgstr "Archivio Chiavi" #: platform/android/export/export_plugin.cpp #, fuzzy @@ -18311,47 +18252,40 @@ msgid "Debug Password" msgstr "" #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "Release User" -msgstr "Rilascio" +msgstr "Utente Di Rilascio" #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "Release Password" -msgstr "Password" +msgstr "Password Di Rilascio" #: platform/android/export/export_plugin.cpp msgid "One Click Deploy" msgstr "" #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "Clear Previous Install" -msgstr "Ispeziona Istanza Precedente" +msgstr "Elimina Installazione Precedente" #: platform/android/export/export_plugin.cpp scene/resources/shader.cpp msgid "Code" -msgstr "" +msgstr "Codice" #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "Min SDK" -msgstr "Dimensione Outline:" +msgstr "SDK Min" #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "Target SDK" -msgstr "Target FPS" +msgstr "Target SDK" #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp -#, fuzzy msgid "Package" -msgstr "Impacchettando" +msgstr "Pacchetto" #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp -#, fuzzy msgid "Unique Name" -msgstr "Nome del Nodo:" +msgstr "Nome Unico" #: platform/android/export/export_plugin.cpp #, fuzzy @@ -18359,38 +18293,32 @@ msgid "Signed" msgstr "Segnale" #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "Classify As Game" -msgstr "Nome Classe:" +msgstr "Classifica Come Gioco" #: platform/android/export/export_plugin.cpp msgid "Retain Data On Uninstall" -msgstr "" +msgstr "Conserva Dati Dopo Disinstallazione" #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "Exclude From Recents" -msgstr "Elimina Nodi" +msgstr "Escludi Da Recenti" #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "Graphics" -msgstr "Scostamento della griglia:" +msgstr "Grafica" #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "OpenGL Debug" -msgstr "Apri" +msgstr "Debug OpenGL" #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "XR Features" -msgstr "Funzionalità " +msgstr "Funzionalità XR" #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "XR Mode" -msgstr "Modalità di Pan" +msgstr "Modalità XR" #: platform/android/export/export_plugin.cpp #, fuzzy @@ -18407,9 +18335,8 @@ msgid "Passthrough" msgstr "Passthrough" #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "Immersive Mode" -msgstr "Modalità Priorità " +msgstr "Modalità Immersiva" #: platform/android/export/export_plugin.cpp #, fuzzy @@ -18441,38 +18368,32 @@ msgid "Allow" msgstr "" #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp -#, fuzzy msgid "Command Line" -msgstr "Comando" +msgstr "Linea Di Comando" #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp -#, fuzzy msgid "Extra Args" -msgstr "Argomenti di chiamata aggiuntivi:" +msgstr "Argomenti Extra" #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "APK Expansion" -msgstr "Cambia espressione" +msgstr "Espansione APK" #: platform/android/export/export_plugin.cpp msgid "Salt" msgstr "" #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "Public Key" -msgstr "Percorso Chiave SSH Pubblica" +msgstr "Chiave Pubblica" #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "Permissions" -msgstr "Maschera Emissione" +msgstr "Permessi" #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "Custom Permissions" -msgstr "Avvia una scena personalizzata" +msgstr "Permessi Personalizzati" #: platform/android/export/export_plugin.cpp msgid "Select device from the list" @@ -20298,6 +20219,11 @@ msgstr "" "Poligono non valido. Sono necessari almeno 2 punti nella modalità di " "costruzione \"Segmenti\"." +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp #, fuzzy msgid "Build Mode" @@ -20376,9 +20302,8 @@ msgstr "Nodo OneShot" #: scene/2d/cpu_particles_2d.cpp scene/2d/particles_2d.cpp #: scene/3d/cpu_particles.cpp scene/3d/particles.cpp -#, fuzzy msgid "Preprocess" -msgstr "Post processing" +msgstr "Preprocesso" #: scene/2d/cpu_particles_2d.cpp scene/2d/particles_2d.cpp #: scene/3d/cpu_particles.cpp scene/3d/particles.cpp @@ -22148,7 +22073,7 @@ msgstr "Prepara NavMesh" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -24414,6 +24339,11 @@ msgstr "Modalità di Pan" #: scene/main/node.cpp #, fuzzy +msgid "Physics Interpolation Mode" +msgstr "Modalità d'interpolazione" + +#: scene/main/node.cpp +#, fuzzy msgid "Display Folded" msgstr "Mostra Unshaded" @@ -24447,11 +24377,6 @@ msgstr "Imposta più valori:" msgid "Process Priority" msgstr "Abilita Priorità Tile" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "Modalità d'interpolazione" - #: scene/main/scene_tree.cpp scene/main/timer.cpp #, fuzzy msgid "Time Left" @@ -25165,6 +25090,11 @@ msgstr "Chiamato Separatore" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "Operatore colore." + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "Colore Osso 1" @@ -25972,6 +25902,11 @@ msgstr "Modalità senza distrazioni" #: scene/resources/gradient.cpp #, fuzzy +msgid "Raw Data" +msgstr "Profondità " + +#: scene/resources/gradient.cpp +#, fuzzy msgid "Offsets" msgstr "Scostamento:" diff --git a/editor/translations/ja.po b/editor/translations/ja.po index b85513357b..07463073a6 100644 --- a/editor/translations/ja.po +++ b/editor/translations/ja.po @@ -43,7 +43,7 @@ msgstr "" "Project-Id-Version: Godot Engine editor\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2022-04-25 15:02+0000\n" +"PO-Revision-Date: 2022-05-10 13:14+0000\n" "Last-Translator: nitenook <admin@alterbaum.net>\n" "Language-Team: Japanese <https://hosted.weblate.org/projects/godot-engine/" "godot/ja/>\n" @@ -52,7 +52,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.12.1-dev\n" +"X-Generator: Weblate 4.12.1\n" #: core/bind/core_bind.cpp main/main.cpp msgid "Tablet Driver" @@ -106,11 +106,12 @@ msgstr "ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã®æœ€å¤§ã‚µã‚¤ã‚º" msgid "Screen Orientation" msgstr "ç”»é¢ã®å‘ã" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" msgstr "ウィンドウ" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "ボーダーレス" @@ -118,7 +119,7 @@ msgstr "ボーダーレス" msgid "Per Pixel Transparency Enabled" msgstr "ピクセルå˜ä½ã®é€æ˜Žåº¦ã‚’有効化" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Fullscreen" msgstr "フルスクリーン" @@ -130,7 +131,7 @@ msgstr "最大化" msgid "Minimized" msgstr "最å°åŒ–" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "サイズを変更å¯èƒ½" @@ -143,10 +144,11 @@ msgstr "サイズを変更å¯èƒ½" msgid "Position" msgstr "ä½ç½®" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -602,6 +604,43 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +#, fuzzy +msgid "Display" +msgstr "ã™ã¹ã¦è¡¨ç¤º" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +#, fuzzy +msgid "Height" +msgstr "ライト" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "å¸¸ã«æœ€å‰é¢" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Width" +msgstr "左伸長" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Height" +msgstr "試験的" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1197,7 +1236,7 @@ msgstr "ã“ã®ãƒˆãƒ©ãƒƒã‚¯ã® オン/オフ を切り替ãˆã€‚" msgid "Update Mode (How this property is set)" msgstr "Update モード (ã“ã®ãƒ—ãƒãƒ‘ティã®è¨å®šæ–¹æ³•)" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "補間モード" @@ -6007,6 +6046,11 @@ msgstr "%s を押ã—ãŸã¾ã¾ã§æ•´æ•°å€¤ã«ä¸¸ã‚る。Shiftを押ã—ãŸã¾ã¾ã msgid "Flat" msgstr "フラット" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "コリジョンモード" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "インãƒãƒ¼ãƒˆã™ã‚‹ãƒŽãƒ¼ãƒ‰ã‚’é¸æŠž" @@ -15539,9 +15583,8 @@ msgid "Stack Frames" msgstr "スタックフレーム" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Filter stack variables" -msgstr "タイルを絞り込む" +msgstr "スタック変数を絞り込む" #: editor/script_editor_debugger.cpp msgid "Auto Switch To Remote Scene Tree" @@ -15919,42 +15962,6 @@ msgstr "GLES2ã«ãƒ•ォールãƒãƒƒã‚¯" msgid "Use Nvidia Rect Flicker Workaround" msgstr "Nvidiaã§ã®Rectã¡ã‚‰ã¤ãã®å›žé¿ç–を使用" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -#, fuzzy -msgid "Display" -msgstr "ã™ã¹ã¦è¡¨ç¤º" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -#, fuzzy -msgid "Height" -msgstr "ライト" - -#: main/main.cpp -msgid "Always On Top" -msgstr "å¸¸ã«æœ€å‰é¢" - -#: main/main.cpp -#, fuzzy -msgid "Test Width" -msgstr "左伸長" - -#: main/main.cpp -#, fuzzy -msgid "Test Height" -msgstr "試験的" - #: main/main.cpp msgid "DPI" msgstr "DPI" @@ -20288,6 +20295,11 @@ msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" "無効ãªãƒãƒªã‚´ãƒ³ã§ã™ã€‚'Segments' ビルドモードã§ã¯æœ€ä½Ž2ã¤ã®ãƒã‚¤ãƒ³ãƒˆãŒå¿…è¦ã§ã™ã€‚" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp #, fuzzy msgid "Build Mode" @@ -22125,9 +22137,10 @@ msgid "NavMesh" msgstr "NavMeshを焼ã込む" #: scene/3d/navigation_obstacle.cpp +#, fuzzy msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" "NavigationObstacle ã¯Spatialãªã‚ªãƒ–ジェクトã«ã‚³ãƒªã‚¸ãƒ§ãƒ³å›žé¿ã‚’æä¾›ã™ã‚‹ãŸã‚ã ã‘" "ã«æ©Ÿèƒ½ã—ã¾ã™ã€‚" @@ -24413,6 +24426,11 @@ msgstr "パンモード" #: scene/main/node.cpp #, fuzzy +msgid "Physics Interpolation Mode" +msgstr "補間モード" + +#: scene/main/node.cpp +#, fuzzy msgid "Display Folded" msgstr "シェーディングãªã—ã§è¡¨ç¤º" @@ -24446,11 +24464,6 @@ msgstr "複数è¨å®š:" msgid "Process Priority" msgstr "å„ªå…ˆé †ä½ã‚’有効化" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "補間モード" - #: scene/main/scene_tree.cpp scene/main/timer.cpp #, fuzzy msgid "Time Left" @@ -25162,6 +25175,11 @@ msgstr "åå‰ä»˜ãセパレーター" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "Color演算å。" + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "ボーンã®è‰² 1" @@ -25970,6 +25988,11 @@ msgstr "集ä¸ãƒ¢ãƒ¼ãƒ‰" #: scene/resources/gradient.cpp #, fuzzy +msgid "Raw Data" +msgstr "Depth(深度/奥行)" + +#: scene/resources/gradient.cpp +#, fuzzy msgid "Offsets" msgstr "オフセット:" diff --git a/editor/translations/ka.po b/editor/translations/ka.po index d31fd41fd2..80d946f0dc 100644 --- a/editor/translations/ka.po +++ b/editor/translations/ka.po @@ -78,11 +78,12 @@ msgstr "დáƒáƒ›áƒáƒ™áƒ˜áƒ“ებულებების შემსწáƒáƒ msgid "Screen Orientation" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "" @@ -90,7 +91,7 @@ msgstr "" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Fullscreen" msgstr "" @@ -102,7 +103,7 @@ msgstr "" msgid "Minimized" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -116,10 +117,11 @@ msgstr "" msgid "Position" msgstr "áƒáƒ®áƒáƒšáƒ˜ %s შექმნáƒ" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -595,6 +597,41 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +#, fuzzy +msgid "Display" +msgstr "ყველáƒáƒ¡ ჩáƒáƒœáƒáƒªáƒ•ლებáƒ" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +msgid "Height" +msgstr "" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Width" +msgstr "წრფივი" + +#: core/project_settings.cpp +msgid "Test Height" +msgstr "" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1201,7 +1238,7 @@ msgstr "ჩáƒáƒœáƒáƒ¬áƒ”რის ჩáƒáƒ თვრ/ გáƒáƒ›áƒáƒ თვრmsgid "Update Mode (How this property is set)" msgstr "გáƒáƒœáƒáƒ®áƒšáƒ”ბის რეჟიმი (რáƒáƒ’áƒáƒ áƒáƒª ეს პáƒáƒ áƒáƒ›áƒ”ტრირდáƒáƒ§áƒ”ნებული)" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp #, fuzzy msgid "Interpolation Mode" msgstr "ინტერპáƒáƒšáƒáƒªáƒ˜áƒ˜áƒ¡ რეჟიმი" @@ -5969,6 +6006,11 @@ msgstr "" msgid "Flat" msgstr "" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "ინტერპáƒáƒšáƒáƒªáƒ˜áƒ˜áƒ¡ რეჟიმი" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "" @@ -15831,40 +15873,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -#, fuzzy -msgid "Display" -msgstr "ყველáƒáƒ¡ ჩáƒáƒœáƒáƒªáƒ•ლებáƒ" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -msgid "Height" -msgstr "" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -#, fuzzy -msgid "Test Width" -msgstr "წრფივი" - -#: main/main.cpp -msgid "Test Height" -msgstr "" - #: main/main.cpp msgid "DPI" msgstr "" @@ -20046,6 +20054,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp #, fuzzy msgid "Build Mode" @@ -21731,7 +21744,7 @@ msgstr "" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -23835,6 +23848,11 @@ msgstr "მáƒáƒ¡áƒ¨áƒ¢áƒáƒ‘ის თáƒáƒœáƒáƒ¤áƒáƒ დáƒáƒ‘áƒ:" #: scene/main/node.cpp #, fuzzy +msgid "Physics Interpolation Mode" +msgstr "ინტერპáƒáƒšáƒáƒªáƒ˜áƒ˜áƒ¡ რეჟიმი" + +#: scene/main/node.cpp +#, fuzzy msgid "Display Folded" msgstr "ყველáƒáƒ¡ ჩáƒáƒœáƒáƒªáƒ•ლებáƒ" @@ -23866,11 +23884,6 @@ msgstr "" msgid "Process Priority" msgstr "მáƒáƒ¡áƒ¨áƒ¢áƒáƒ‘ის თáƒáƒœáƒáƒ¤áƒáƒ დáƒáƒ‘áƒ:" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "ინტერპáƒáƒšáƒáƒªáƒ˜áƒ˜áƒ¡ რეჟიმი" - #: scene/main/scene_tree.cpp scene/main/timer.cpp msgid "Time Left" msgstr "" @@ -24529,6 +24542,11 @@ msgstr "" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "ფუნქციის შექმნáƒ" + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "ფუნქციები:" @@ -25308,6 +25326,10 @@ msgid "Distance Field" msgstr "დáƒáƒ§áƒ”ნებáƒ" #: scene/resources/gradient.cpp +msgid "Raw Data" +msgstr "" + +#: scene/resources/gradient.cpp msgid "Offsets" msgstr "" diff --git a/editor/translations/km.po b/editor/translations/km.po index 4e33bd7ad3..366466c08d 100644 --- a/editor/translations/km.po +++ b/editor/translations/km.po @@ -70,11 +70,12 @@ msgstr "" msgid "Screen Orientation" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "" @@ -82,7 +83,7 @@ msgstr "" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Fullscreen" msgstr "" @@ -94,7 +95,7 @@ msgstr "" msgid "Minimized" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -107,10 +108,11 @@ msgstr "" msgid "Position" msgstr "" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -561,6 +563,39 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +msgid "Display" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +msgid "Height" +msgstr "" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +msgid "Test Width" +msgstr "" + +#: core/project_settings.cpp +msgid "Test Height" +msgstr "" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1139,7 +1174,7 @@ msgstr "" msgid "Update Mode (How this property is set)" msgstr "" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "" @@ -5704,6 +5739,10 @@ msgstr "" msgid "Flat" msgstr "" +#: editor/editor_spin_slider.cpp +msgid "Hide Slider" +msgstr "" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "" @@ -15186,38 +15225,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -msgid "Display" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -msgid "Height" -msgstr "" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -msgid "Test Width" -msgstr "" - -#: main/main.cpp -msgid "Test Height" -msgstr "" - #: main/main.cpp msgid "DPI" msgstr "" @@ -19189,6 +19196,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp msgid "Build Mode" msgstr "" @@ -20777,7 +20789,7 @@ msgstr "" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -22732,6 +22744,10 @@ msgid "Pause Mode" msgstr "" #: scene/main/node.cpp +msgid "Physics Interpolation Mode" +msgstr "" + +#: scene/main/node.cpp msgid "Display Folded" msgstr "" @@ -22760,10 +22776,6 @@ msgstr "" msgid "Process Priority" msgstr "" -#: scene/main/node.cpp -msgid "Physics Interpolated" -msgstr "" - #: scene/main/scene_tree.cpp scene/main/timer.cpp msgid "Time Left" msgstr "" @@ -23371,6 +23383,11 @@ msgid "Labeled Separator Right" msgstr "" #: scene/resources/default_theme/default_theme.cpp +#, fuzzy +msgid "Font Separator" +msgstr "Anim ផ្លាស់ប្ážáž¼ážš Transition" + +#: scene/resources/default_theme/default_theme.cpp msgid "Font Color Accel" msgstr "" @@ -24062,6 +24079,10 @@ msgid "Distance Field" msgstr "" #: scene/resources/gradient.cpp +msgid "Raw Data" +msgstr "" + +#: scene/resources/gradient.cpp msgid "Offsets" msgstr "" diff --git a/editor/translations/ko.po b/editor/translations/ko.po index 9141788988..3c3df766ce 100644 --- a/editor/translations/ko.po +++ b/editor/translations/ko.po @@ -30,13 +30,14 @@ # Kiroo <elusive1102@naver.com>, 2021. # JumpJetAvocado <dwkng@jbnu.ac.kr>, 2021. # Lee Minhak <minarihak@gmail.com>, 2022. +# 한수현 <shh1473@ajou.ac.kr>, 2022. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2022-05-03 07:13+0000\n" -"Last-Translator: Lee Minhak <minarihak@gmail.com>\n" +"PO-Revision-Date: 2022-05-15 09:38+0000\n" +"Last-Translator: 한수현 <shh1473@ajou.ac.kr>\n" "Language-Team: Korean <https://hosted.weblate.org/projects/godot-engine/" "godot/ko/>\n" "Language: ko\n" @@ -44,174 +45,153 @@ 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.12.1\n" +"X-Generator: Weblate 4.13-dev\n" #: core/bind/core_bind.cpp main/main.cpp msgid "Tablet Driver" -msgstr "" +msgstr "태블릿 드ë¼ì´ë²„" #: core/bind/core_bind.cpp -#, fuzzy msgid "Clipboard" -msgstr "í´ë¦½ë³´ë“œê°€ 비었습니다!" +msgstr "í´ë¦½ë³´ë“œ" #: core/bind/core_bind.cpp -#, fuzzy msgid "Current Screen" -msgstr "현재 씬" +msgstr "현재 화면" #: core/bind/core_bind.cpp msgid "Exit Code" -msgstr "" +msgstr "종료 코드" #: core/bind/core_bind.cpp -#, fuzzy msgid "V-Sync Enabled" -msgstr "활성화" +msgstr "V-Sync 활성화" #: core/bind/core_bind.cpp main/main.cpp msgid "V-Sync Via Compositor" -msgstr "" +msgstr "ì»´í¬ì§€í„°ë¥¼ 통한 V-Sync" #: core/bind/core_bind.cpp main/main.cpp msgid "Delta Smoothing" -msgstr "" +msgstr "ë¸íƒ€ 스무딩" #: core/bind/core_bind.cpp -#, fuzzy msgid "Low Processor Usage Mode" -msgstr "ì´ë™ 모드" +msgstr "ì €ì‚¬ì–‘ 모드" #: core/bind/core_bind.cpp msgid "Low Processor Usage Mode Sleep (µsec)" -msgstr "" +msgstr "ì €ì‚¬ì–‘ 모드 슬립 (마ì´í¬ë¡œì´ˆ 단위)" #: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp -#, fuzzy msgid "Keep Screen On" -msgstr "디버거 í•ìƒ ì—´ì–´ë†“ê¸°" +msgstr "화면 í•ìƒ í™œì„±í™”" #: core/bind/core_bind.cpp -#, fuzzy msgid "Min Window Size" -msgstr "ì°½ì˜ ìµœì†Œ í¬ê¸°" +msgstr "최소 ì°½ í¬ê¸°" #: core/bind/core_bind.cpp -#, fuzzy msgid "Max Window Size" -msgstr "ì°½ì˜ ìµœëŒ€ í¬ê¸°" +msgstr "최대 ì°½ í¬ê¸°" #: core/bind/core_bind.cpp -#, fuzzy msgid "Screen Orientation" -msgstr "화면 ì—°ì‚°ìž." +msgstr "화면 ë°©í–¥" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp -#, fuzzy +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" -msgstr "새 ì°½" +msgstr "ì°½" -#: core/bind/core_bind.cpp main/main.cpp -#, fuzzy +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" -msgstr "í…Œë‘리 픽셀" +msgstr "í…Œë‘리 없는" #: core/bind/core_bind.cpp msgid "Per Pixel Transparency Enabled" -msgstr "" +msgstr "픽셀 당 íˆ¬ëª…ë„ í™œì„±í™”" -#: core/bind/core_bind.cpp main/main.cpp -#, fuzzy +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Fullscreen" -msgstr "ì „ì²´ 화면 í† ê¸€" +msgstr "ì „ì²´ 화면" #: core/bind/core_bind.cpp msgid "Maximized" -msgstr "" +msgstr "최대화" #: core/bind/core_bind.cpp -#, fuzzy msgid "Minimized" -msgstr "초기화" +msgstr "최소화" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp -#, fuzzy msgid "Resizable" -msgstr "í¬ê¸° ì¡°ì • 가능" +msgstr "í¬ê¸° ì¡°ì ˆ 가능한" #: core/bind/core_bind.cpp core/os/input_event.cpp scene/2d/node_2d.cpp #: scene/2d/physics_body_2d.cpp scene/2d/remote_transform_2d.cpp #: scene/3d/physics_body.cpp scene/3d/remote_transform.cpp #: scene/gui/control.cpp scene/gui/line_edit.cpp #: scene/resources/default_theme/default_theme.cpp -#, fuzzy msgid "Position" -msgstr "ë… ìœ„ì¹˜" +msgstr "위치" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp #: scene/resources/visual_shader.cpp servers/visual_server.cpp -#, fuzzy msgid "Size" -msgstr "í¬ê¸°:" +msgstr "í¬ê¸°" #: core/bind/core_bind.cpp msgid "Endian Swap" -msgstr "" +msgstr "Endian 스왑" #: core/bind/core_bind.cpp -#, fuzzy msgid "Editor Hint" -msgstr "ì—디터" +msgstr "ì—디터 힌트" #: core/bind/core_bind.cpp msgid "Print Error Messages" -msgstr "" +msgstr "ì—러 메시지 ì¶œë ¥" #: core/bind/core_bind.cpp -#, fuzzy msgid "Iterations Per Second" -msgstr "ë³´ê°„ 모드" +msgstr "초당 반복 수" #: core/bind/core_bind.cpp -#, fuzzy msgid "Target FPS" -msgstr "Target(대ìƒ)" +msgstr "목표 FPS" #: core/bind/core_bind.cpp -#, fuzzy msgid "Time Scale" -msgstr "시간 ìŠ¤ì¼€ì¼ ë…¸ë“œ" +msgstr "시간 스케ì¼" #: core/bind/core_bind.cpp main/main.cpp -#, fuzzy msgid "Physics Jitter Fix" -msgstr "물리 í”„ë ˆìž„ %" +msgstr "물리 ííŠ¸ëŸ¬ì§ ê³ ì •" #: core/bind/core_bind.cpp editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "오류" #: core/bind/core_bind.cpp -#, fuzzy msgid "Error String" -msgstr "ì €ìž¥ 중 오류" +msgstr "오류 문ìžì—´" #: core/bind/core_bind.cpp -#, fuzzy msgid "Error Line" -msgstr "ì €ìž¥ 중 오류" +msgstr "오류 줄" #: core/bind/core_bind.cpp -#, fuzzy msgid "Result" -msgstr "검색 ê²°ê³¼" +msgstr "ê²°ê³¼" #: core/command_queue_mt.cpp core/message_queue.cpp main/main.cpp msgid "Memory" @@ -226,24 +206,22 @@ msgstr "메모리" #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h #: servers/visual_server.cpp msgid "Limits" -msgstr "" +msgstr "ì œí•œ" #: core/command_queue_mt.cpp -#, fuzzy msgid "Command Queue" -msgstr "Command: íšŒì „" +msgstr "ëª…ë ¹ 대기열" #: core/command_queue_mt.cpp msgid "Multithreading Queue Size (KB)" -msgstr "" +msgstr "ë©€í‹°ìŠ¤ë ˆë”© 대기열 í¬ê¸° (KB)" #: core/func_ref.cpp modules/visual_script/visual_script_builtin_funcs.cpp #: modules/visual_script/visual_script_func_nodes.cpp #: modules/visual_script/visual_script_nodes.cpp #: scene/resources/visual_shader_nodes.cpp -#, fuzzy msgid "Function" -msgstr "함수(Function)" +msgstr "함수" #: core/image.cpp core/packed_data_container.cpp #: modules/minimp3/audio_stream_mp3.cpp @@ -253,113 +231,99 @@ msgstr "함수(Function)" #: scene/resources/audio_stream_sample.cpp scene/resources/bit_map.cpp #: scene/resources/concave_polygon_shape.cpp scene/resources/curve.cpp #: scene/resources/polygon_path_finder.cpp scene/resources/texture.cpp -#, fuzzy msgid "Data" -msgstr "ë°ì´í„°ì™€ 함께" +msgstr "ë°ì´í„°" #: core/io/file_access_network.cpp core/register_core_types.cpp #: editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h -#, fuzzy msgid "Network" -msgstr "ë„¤íŠ¸ì›Œí¬ í”„ë¡œíŒŒì¼ëŸ¬" +msgstr "네트워í¬" #: core/io/file_access_network.cpp -#, fuzzy msgid "Remote FS" -msgstr "ì›ê²© " +msgstr "ì›ê²© FS" #: core/io/file_access_network.cpp -#, fuzzy msgid "Page Size" -msgstr "페ì´ì§€: " +msgstr "페ì´ì§€ í¬ê¸°" #: core/io/file_access_network.cpp -#, fuzzy msgid "Page Read Ahead" -msgstr "페ì´ì§€ 미리 ì½ê¸°" +msgstr "앞 페ì´ì§€ ì½ê¸°" #: core/io/http_client.cpp msgid "Blocking Mode Enabled" -msgstr "" +msgstr "Blocking 모드 활성화" #: core/io/http_client.cpp -#, fuzzy msgid "Connection" msgstr "ì—°ê²°" #: core/io/http_client.cpp msgid "Read Chunk Size" -msgstr "" +msgstr "ì²í¬ í¬ê¸° ì½ê¸°" #: core/io/marshalls.cpp -#, fuzzy msgid "Object ID" -msgstr "ê·¸ë ¤ì§„ 오브ì 트:" +msgstr "오브ì 트 ID" #: core/io/multiplayer_api.cpp core/io/packet_peer.cpp -#, fuzzy msgid "Allow Object Decoding" -msgstr "어니언 ìŠ¤í‚¤ë‹ í™œì„±í™”" +msgstr "오브ì 트 디코딩 허용" #: core/io/multiplayer_api.cpp scene/main/scene_tree.cpp msgid "Refuse New Network Connections" -msgstr "" +msgstr "새로운 ë„¤íŠ¸ì›Œí¬ ì—°ê²° ê±°ë¶€" #: core/io/multiplayer_api.cpp scene/main/scene_tree.cpp -#, fuzzy msgid "Network Peer" -msgstr "ë„¤íŠ¸ì›Œí¬ í”„ë¡œíŒŒì¼ëŸ¬" +msgstr "ë„¤íŠ¸ì›Œí¬ í”¼ì–´" #: core/io/multiplayer_api.cpp scene/animation/animation_player.cpp -#, fuzzy msgid "Root Node" -msgstr "루트 노드 ì´ë¦„" +msgstr "루트 노드" #: core/io/networked_multiplayer_peer.cpp -#, fuzzy msgid "Refuse New Connections" -msgstr "ì—°ê²°" +msgstr "새로운 ì—°ê²° ê±°ë¶€" #: core/io/networked_multiplayer_peer.cpp -#, fuzzy msgid "Transfer Mode" -msgstr "변형 타입" +msgstr "ì „ì†¡ 모드" #: core/io/packet_peer.cpp msgid "Encode Buffer Max Size" -msgstr "" +msgstr "ë²„í¼ ìµœëŒ€ í¬ê¸° ì¸ì½”딩" #: core/io/packet_peer.cpp msgid "Input Buffer Max Size" -msgstr "" +msgstr "ìž…ë ¥ ë²„í¼ ìµœëŒ€ í¬ê¸°" #: core/io/packet_peer.cpp msgid "Output Buffer Max Size" -msgstr "" +msgstr "ì¶œë ¥ ë²„í¼ ìµœëŒ€ í¬ê¸°" #: core/io/packet_peer.cpp msgid "Stream Peer" -msgstr "" +msgstr "스트림 피어" #: core/io/stream_peer.cpp -#, fuzzy msgid "Big Endian" -msgstr "ë¹… 엔디안" +msgstr "Big Endian" #: core/io/stream_peer.cpp msgid "Data Array" -msgstr "" +msgstr "ë°ì´í„° ë°°ì—´" #: core/io/stream_peer_ssl.cpp msgid "Blocking Handshake" -msgstr "" +msgstr "Handshake 차단" #: core/io/udp_server.cpp -#, fuzzy msgid "Max Pending Connections" -msgstr "ì—°ê²° 변경:" +msgstr "최대 대기 ì¤‘ì¸ ì—°ê²° 수" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -408,16 +372,15 @@ msgstr "'%s'ì„(를) 호출 시:" #: core/math/random_number_generator.cpp #: modules/opensimplex/open_simplex_noise.cpp msgid "Seed" -msgstr "" +msgstr "시드" #: core/math/random_number_generator.cpp -#, fuzzy msgid "State" msgstr "ìƒíƒœ" #: core/message_queue.cpp msgid "Message Queue" -msgstr "" +msgstr "메시지 대기열" #: core/message_queue.cpp msgid "Max Size (KB)" @@ -437,35 +400,30 @@ msgid "Shift" msgstr "Shift" #: core/os/input_event.cpp -#, fuzzy msgid "Control" -msgstr "ë²„ì „ 컨트롤" +msgstr "ì¡°ìž‘" #: core/os/input_event.cpp msgid "Meta" -msgstr "" +msgstr "메타" #: core/os/input_event.cpp -#, fuzzy msgid "Command" -msgstr "커뮤니티" +msgstr "ëª…ë ¹" #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp -#, fuzzy msgid "Pressed" -msgstr "프리셋" +msgstr "눌림" #: core/os/input_event.cpp -#, fuzzy msgid "Scancode" -msgstr "스캔" +msgstr "스캔코드" #: core/os/input_event.cpp -#, fuzzy msgid "Physical Scancode" -msgstr "물리 키" +msgstr "물리ì 스캔코드" #: core/os/input_event.cpp msgid "Unicode" @@ -473,27 +431,23 @@ msgstr "ìœ ë‹ˆì½”ë“œ" #: core/os/input_event.cpp msgid "Echo" -msgstr "" +msgstr "반복" #: core/os/input_event.cpp scene/gui/base_button.cpp -#, fuzzy msgid "Button Mask" -msgstr "버튼" +msgstr "버튼 마스í¬" #: core/os/input_event.cpp scene/2d/node_2d.cpp scene/gui/control.cpp -#, fuzzy msgid "Global Position" -msgstr "ìƒìˆ˜" +msgstr "ì „ì— ìœ„ì¹˜" #: core/os/input_event.cpp -#, fuzzy msgid "Factor" -msgstr "벡터" +msgstr "ê³µì‹" #: core/os/input_event.cpp -#, fuzzy msgid "Button Index" -msgstr "마우스 버튼 ì¸ë±ìФ:" +msgstr "버튼 ì¸ë±ìФ" #: core/os/input_event.cpp msgid "Doubleclick" @@ -501,25 +455,22 @@ msgstr "ë”블 í´ë¦" #: core/os/input_event.cpp msgid "Tilt" -msgstr "" +msgstr "기울ì´ê¸°" #: core/os/input_event.cpp -#, fuzzy msgid "Pressure" -msgstr "프리셋" +msgstr "ì••ë ¥" #: core/os/input_event.cpp -#, fuzzy msgid "Relative" -msgstr "ìƒëŒ€ì ì¸ ìŠ¤ëƒ…" +msgstr "ìƒëŒ€ì " #: core/os/input_event.cpp scene/2d/camera_2d.cpp scene/2d/cpu_particles_2d.cpp #: scene/3d/cpu_particles.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/resources/environment.cpp #: scene/resources/particles_material.cpp -#, fuzzy msgid "Speed" -msgstr "ì†ë„:" +msgstr "ì†ë ¥" #: core/os/input_event.cpp editor/project_settings_editor.cpp #: scene/3d/sprite_3d.cpp @@ -527,14 +478,12 @@ msgid "Axis" msgstr "ì¶•" #: core/os/input_event.cpp -#, fuzzy msgid "Axis Value" -msgstr "(ê°’)" +msgstr "ì¶• ê°’" #: core/os/input_event.cpp modules/visual_script/visual_script_func_nodes.cpp -#, fuzzy msgid "Index" -msgstr "ì¸ë±ìФ:" +msgstr "ì¸ë±ìФ" #: core/os/input_event.cpp editor/project_settings_editor.cpp #: modules/visual_script/visual_script_nodes.cpp @@ -545,63 +494,55 @@ msgstr "ì•¡ì…˜" #: core/os/input_event.cpp scene/resources/environment.cpp #: scene/resources/material.cpp msgid "Strength" -msgstr "" +msgstr "힘" #: core/os/input_event.cpp msgid "Delta" -msgstr "" +msgstr "ë¸íƒ€" #: core/os/input_event.cpp -#, fuzzy msgid "Channel" -msgstr "바꾸기" +msgstr "채ë„" #: core/os/input_event.cpp main/main.cpp -#, fuzzy msgid "Message" -msgstr "커밋 변경사í•" +msgstr "메시지" #: core/os/input_event.cpp -#, fuzzy msgid "Pitch" -msgstr "Pitch:" +msgstr "피치" #: core/os/input_event.cpp scene/2d/cpu_particles_2d.cpp #: scene/2d/physics_body_2d.cpp scene/3d/cpu_particles.cpp #: scene/3d/physics_body.cpp scene/resources/particles_material.cpp -#, fuzzy msgid "Velocity" -msgstr "ì„ íšŒ ë·° 오른쪽으로" +msgstr "ì†ë„" #: core/os/input_event.cpp msgid "Instrument" -msgstr "" +msgstr "장비" #: core/os/input_event.cpp -#, fuzzy msgid "Controller Number" -msgstr "í–‰ 번호:" +msgstr "컨트롤러 번호" #: core/os/input_event.cpp msgid "Controller Value" -msgstr "" +msgstr "컨트롤러 ê°’" #: core/project_settings.cpp editor/editor_node.cpp main/main.cpp #: platform/iphone/export/export.cpp platform/osx/export/export.cpp #: platform/windows/export/export.cpp -#, fuzzy msgid "Application" -msgstr "ì•¡ì…˜" +msgstr "어플리케ì´ì…˜" #: core/project_settings.cpp main/main.cpp -#, fuzzy msgid "Config" -msgstr "스냅 구성" +msgstr "구성" #: core/project_settings.cpp -#, fuzzy msgid "Project Settings Override" -msgstr "프로ì 트 ì„¤ì •..." +msgstr "프로ì 트 ì„¤ì • ë®ì–´ì“°ê¸°" #: core/project_settings.cpp core/resource.cpp #: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp @@ -618,7 +559,7 @@ msgstr "ì´ë¦„" #: modules/visual_script/visual_script_nodes.cpp platform/uwp/export/export.cpp #: platform/windows/export/export.cpp msgid "Description" -msgstr "설명" +msgstr "ì„œìˆ " #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp @@ -632,36 +573,70 @@ msgid "Main Scene" msgstr "ë©”ì¸ ì”¬" #: core/project_settings.cpp -#, fuzzy msgid "Disable stdout" -msgstr "ì˜¤í† íƒ€ì¼ ë¹„í™œì„±í™”" +msgstr "표준 ì¶œë ¥ 비활성화" #: core/project_settings.cpp -#, fuzzy msgid "Disable stderr" -msgstr "ë¹„í™œì„±í™”ëœ í•목" +msgstr "표준 ì—러 비활성화" #: core/project_settings.cpp msgid "Use Hidden Project Data Directory" -msgstr "" +msgstr "프로ì íŠ¸ì˜ ìˆ¨ê²¨ì§„ ë°ì´í„° ë””ë ‰í† ë¦¬ 사용" #: core/project_settings.cpp msgid "Use Custom User Dir" -msgstr "" +msgstr "ì‚¬ìš©ìž ì§€ì • ë””ë ‰í† ë¦¬ 사용" #: core/project_settings.cpp msgid "Custom User Dir Name" +msgstr "ì‚¬ìš©ìž ì§€ì • ë””ë ‰í† ë¦¬ ì´ë¦„" + +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +#, fuzzy +msgid "Display" +msgstr "ëª¨ë‘ í‘œì‹œ" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" msgstr "" +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +#, fuzzy +msgid "Height" +msgstr "ë¼ì´íЏ" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Width" +msgstr "왼쪽 넓게" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Height" +msgstr "테스트" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" msgstr "오디오" #: core/project_settings.cpp -#, fuzzy msgid "Default Bus Layout" -msgstr "ë””í´íЏ 버스 ë ˆì´ì•„ì›ƒì„ ë¶ˆëŸ¬ì˜µë‹ˆë‹¤." +msgstr "기본 버스 ë ˆì´ì•„웃" #: core/project_settings.cpp editor/editor_export.cpp #: editor/editor_file_system.cpp editor/editor_node.cpp @@ -671,17 +646,16 @@ msgid "Editor" msgstr "ì—디터" #: core/project_settings.cpp -#, fuzzy msgid "Main Run Args" -msgstr "ë©”ì¸ ì”¬ ì¸ìˆ˜:" +msgstr "ë©”ì¸ ì‹¤í–‰ ì¸ìž" #: core/project_settings.cpp msgid "Search In File Extensions" -msgstr "" +msgstr "íŒŒì¼ í™•ìž¥ìžë¡œ 찾기" #: core/project_settings.cpp msgid "Script Templates Search Path" -msgstr "" +msgstr "스í¬ë¦½íЏ 템플릿 검색 경로" #: core/project_settings.cpp editor/editor_node.cpp #: editor/plugins/version_control_editor_plugin.cpp @@ -690,22 +664,20 @@ msgstr "ë²„ì „ 컨트롤" #: core/project_settings.cpp msgid "Autoload On Startup" -msgstr "" +msgstr "스타트업으로 ìžë™ 로드" #: core/project_settings.cpp -#, fuzzy msgid "Plugin Name" -msgstr "í”ŒëŸ¬ê·¸ì¸ ì´ë¦„:" +msgstr "í”ŒëŸ¬ê·¸ì¸ ì´ë¦„" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp -#, fuzzy msgid "Input" -msgstr "ìž…ë ¥ 추가" +msgstr "ìž…ë ¥" #: core/project_settings.cpp msgid "UI Accept" -msgstr "" +msgstr "UI ì ìš©" #: core/project_settings.cpp msgid "UI Select" @@ -716,51 +688,44 @@ msgid "UI Cancel" msgstr "UI 취소" #: core/project_settings.cpp -#, fuzzy msgid "UI Focus Next" -msgstr "경로 í¬ì»¤ìФ" +msgstr "ë‹¤ìŒ UI í¬ì»¤ìФ" #: core/project_settings.cpp -#, fuzzy msgid "UI Focus Prev" -msgstr "경로 í¬ì»¤ìФ" +msgstr "ì´ì „ UI í¬ì»¤ìФ" #: core/project_settings.cpp -#, fuzzy msgid "UI Left" -msgstr "UI 왼쪽" +msgstr "왼쪽 UI" #: core/project_settings.cpp -#, fuzzy msgid "UI Right" -msgstr "UI 오른쪽" +msgstr "오른쪽 UI" #: core/project_settings.cpp msgid "UI Up" -msgstr "" +msgstr "위쪽 UI" #: core/project_settings.cpp -#, fuzzy msgid "UI Down" -msgstr "아래" +msgstr "아래쪽 UI" #: core/project_settings.cpp -#, fuzzy msgid "UI Page Up" -msgstr "페ì´ì§€: " +msgstr "페ì´ì§€ ì—… UI" #: core/project_settings.cpp msgid "UI Page Down" -msgstr "" +msgstr "페ì´ì§€ 다운 UI" #: core/project_settings.cpp msgid "UI Home" -msgstr "" +msgstr "Home UI" #: core/project_settings.cpp -#, fuzzy msgid "UI End" -msgstr "ëì—서" +msgstr "End UI" #: core/project_settings.cpp main/main.cpp modules/bullet/register_types.cpp #: modules/bullet/space_bullet.cpp scene/2d/physics_body_2d.cpp @@ -769,9 +734,8 @@ msgstr "ëì—서" #: servers/physics/space_sw.cpp servers/physics_2d/physics_2d_server_sw.cpp #: servers/physics_2d/physics_2d_server_wrap_mt.h #: servers/physics_2d/space_2d_sw.cpp -#, fuzzy msgid "Physics" -msgstr " (물리)" +msgstr "물리" #: core/project_settings.cpp editor/editor_settings.cpp #: editor/import/resource_importer_layered_texture.cpp @@ -784,9 +748,8 @@ msgid "3D" msgstr "3D" #: core/project_settings.cpp -#, fuzzy msgid "Smooth Trimesh Collision" -msgstr "Trimesh ì½œë¦¬ì „ ë™ê¸° 만들기" +msgstr "부드러운 삼ê°ë§¤ì‰¬ ì¶©ëŒ" #: core/project_settings.cpp drivers/gles2/rasterizer_canvas_base_gles2.cpp #: drivers/gles2/rasterizer_scene_gles2.cpp @@ -808,18 +771,17 @@ msgstr "ë Œë”ë§" #: scene/resources/multimesh.cpp servers/visual/visual_server_scene.cpp #: servers/visual_server.cpp msgid "Quality" -msgstr "" +msgstr "품질" #: core/project_settings.cpp scene/animation/animation_tree.cpp #: scene/gui/file_dialog.cpp scene/main/scene_tree.cpp #: servers/visual_server.cpp -#, fuzzy msgid "Filters" -msgstr "í•„í„°:" +msgstr "í•„í„°" #: core/project_settings.cpp scene/main/viewport.cpp msgid "Sharpen Intensity" -msgstr "" +msgstr "ë‚ ì¹´ë¡œìš´ ê°•ë„" #: core/project_settings.cpp editor/editor_export.cpp editor/editor_node.cpp #: editor/editor_settings.cpp editor/plugins/script_editor_plugin.cpp @@ -835,9 +797,8 @@ msgstr "디버그" #: core/project_settings.cpp main/main.cpp modules/gdscript/gdscript.cpp #: modules/visual_script/visual_script.cpp scene/resources/dynamic_font.cpp -#, fuzzy msgid "Settings" -msgstr "ì„¤ì •:" +msgstr "ì„¤ì •" #: core/project_settings.cpp editor/script_editor_debugger.cpp main/main.cpp #: modules/mono/mono_gd/gd_mono.cpp @@ -845,39 +806,36 @@ msgid "Profiler" msgstr "프로파ì¼ëŸ¬" #: core/project_settings.cpp -#, fuzzy msgid "Max Functions" -msgstr "함수 만들기" +msgstr "최대 함수 수" #: core/project_settings.cpp scene/3d/vehicle_body.cpp -#, fuzzy msgid "Compression" -msgstr "í‘œí˜„ì‹ ì„¤ì •" +msgstr "ì••ì¶•" #: core/project_settings.cpp -#, fuzzy msgid "Formats" msgstr "형ì‹" #: core/project_settings.cpp msgid "Zstd" -msgstr "" +msgstr "Zstd ì••ì¶• ì•Œê³ ë¦¬ì¦˜" #: core/project_settings.cpp msgid "Long Distance Matching" -msgstr "" +msgstr "장거리 매ì¹" #: core/project_settings.cpp msgid "Compression Level" -msgstr "" +msgstr "ì••ì¶• ë ˆë²¨" #: core/project_settings.cpp msgid "Window Log Size" -msgstr "" +msgstr "ì°½ 로그 í¬ê¸°" #: core/project_settings.cpp msgid "Zlib" -msgstr "Zlib" +msgstr "Zlib ì••ì¶• ë¼ì´ë¸ŒëŸ¬ë¦¬" #: core/project_settings.cpp msgid "Gzip" @@ -896,26 +854,24 @@ msgid "TCP" msgstr "TCP (ì „ì†¡ ì œì–´ í”„ë¡œí† ì½œ)" #: core/register_core_types.cpp -#, fuzzy msgid "Connect Timeout Seconds" -msgstr "ë©”ì„œë“œì— ì—°ê²°:" +msgstr "ì—°ê²° 타임아웃 시간" #: core/register_core_types.cpp msgid "Packet Peer Stream" -msgstr "" +msgstr "패킷 피어 스트림" #: core/register_core_types.cpp msgid "Max Buffer (Power of 2)" -msgstr "" +msgstr "최대 ë²„í¼ (2ì˜ ì œê³±ìˆ˜)" #: core/register_core_types.cpp editor/editor_settings.cpp main/main.cpp msgid "SSL" msgstr "SSL" #: core/register_core_types.cpp main/main.cpp -#, fuzzy msgid "Certificates" -msgstr "ì •ì :" +msgstr "ì¸ì¦" #: core/resource.cpp editor/dependency_editor.cpp #: editor/editor_resource_picker.cpp @@ -924,9 +880,8 @@ msgid "Resource" msgstr "리소스" #: core/resource.cpp -#, fuzzy msgid "Local To Scene" -msgstr "씬 닫기" +msgstr "로컬ì—서 씬으로" #: core/resource.cpp editor/dependency_editor.cpp #: editor/editor_autoload_settings.cpp editor/plugins/path_editor_plugin.cpp @@ -945,16 +900,15 @@ msgstr "메시지" #: core/translation.cpp editor/project_settings_editor.cpp msgid "Locale" -msgstr "로케ì¼" +msgstr "위치" #: core/translation.cpp -#, fuzzy msgid "Test" msgstr "테스트" #: core/translation.cpp scene/resources/font.cpp msgid "Fallback" -msgstr "" +msgstr "í´ë°±" #: core/ustring.cpp scene/resources/segment_shape_2d.cpp msgid "B" @@ -995,12 +949,12 @@ msgstr "버í¼" #: drivers/gles2/rasterizer_canvas_base_gles2.cpp #: drivers/gles3/rasterizer_canvas_base_gles3.cpp msgid "Canvas Polygon Buffer Size (KB)" -msgstr "" +msgstr "캔버스 í´ë¦¬ê³¤ ë²„í¼ í¬ê¸° (KB)" #: drivers/gles2/rasterizer_canvas_base_gles2.cpp #: drivers/gles3/rasterizer_canvas_base_gles3.cpp msgid "Canvas Polygon Index Buffer Size (KB)" -msgstr "" +msgstr "캔버스 í´ë¦¬ê³¤ ì¸ë±ìФ ë²„í¼ í¬ê¸° (KB)" #: drivers/gles2/rasterizer_canvas_base_gles2.cpp #: drivers/gles3/rasterizer_canvas_base_gles3.cpp editor/editor_settings.cpp @@ -1015,9 +969,8 @@ msgstr "2D" #: drivers/gles2/rasterizer_canvas_base_gles2.cpp #: drivers/gles3/rasterizer_canvas_base_gles3.cpp -#, fuzzy msgid "Snapping" -msgstr "스마트 스냅" +msgstr "스내핑" #: drivers/gles2/rasterizer_canvas_base_gles2.cpp #: drivers/gles3/rasterizer_canvas_base_gles3.cpp @@ -1027,39 +980,37 @@ msgstr "GPU 픽셀 스냅 사용" #: drivers/gles2/rasterizer_scene_gles2.cpp #: drivers/gles3/rasterizer_scene_gles3.cpp msgid "Immediate Buffer Size (KB)" -msgstr "" +msgstr "Immediate ë²„í¼ í¬ê¸° (KB)" #: drivers/gles2/rasterizer_storage_gles2.cpp #: drivers/gles3/rasterizer_storage_gles3.cpp -#, fuzzy msgid "Lightmapping" -msgstr "ë¼ì´íŠ¸ë§µ 굽기" +msgstr "ë¼ì´íЏ 매핑" #: drivers/gles2/rasterizer_storage_gles2.cpp #: drivers/gles3/rasterizer_storage_gles3.cpp msgid "Use Bicubic Sampling" -msgstr "" +msgstr "Bicubic ìƒ˜í”Œë§ ì‚¬ìš©" #: drivers/gles3/rasterizer_scene_gles3.cpp msgid "Max Renderable Elements" -msgstr "" +msgstr "최대 ë Œë” ìš”ì†Œ 수" #: drivers/gles3/rasterizer_scene_gles3.cpp msgid "Max Renderable Lights" -msgstr "" +msgstr "최대 ë Œë” ê´‘ì› ìˆ˜" #: drivers/gles3/rasterizer_scene_gles3.cpp -#, fuzzy msgid "Max Renderable Reflections" -msgstr "ì„ íƒ í•목 중앙으로" +msgstr "최대 ë Œë” ë°˜ì‚¬ 수" #: drivers/gles3/rasterizer_scene_gles3.cpp msgid "Max Lights Per Object" -msgstr "" +msgstr "오브ì 트당 최대 ê´‘ì› ìˆ˜" #: drivers/gles3/rasterizer_scene_gles3.cpp msgid "Subsurface Scattering" -msgstr "" +msgstr "서브서피스 산란" #: drivers/gles3/rasterizer_scene_gles3.cpp #: editor/import/resource_importer_texture.cpp @@ -1071,20 +1022,19 @@ msgstr "" #: scene/main/canvas_layer.cpp scene/resources/environment.cpp #: scene/resources/material.cpp scene/resources/particles_material.cpp msgid "Scale" -msgstr "스케ì¼" +msgstr "í¬ê¸°" #: drivers/gles3/rasterizer_scene_gles3.cpp -#, fuzzy msgid "Follow Surface" -msgstr "표면 채우기" +msgstr "서피스 따르기" #: drivers/gles3/rasterizer_scene_gles3.cpp msgid "Weight Samples" -msgstr "" +msgstr "가중치 샘플" #: drivers/gles3/rasterizer_scene_gles3.cpp msgid "Voxel Cone Tracing" -msgstr "" +msgstr "ì›ë¿” ì¶”ì " #: drivers/gles3/rasterizer_scene_gles3.cpp scene/resources/environment.cpp msgid "High Quality" @@ -1092,7 +1042,7 @@ msgstr "ê³ í’ˆì§ˆ" #: drivers/gles3/rasterizer_storage_gles3.cpp msgid "Blend Shape Max Buffer Size (KB)" -msgstr "" +msgstr "ë¸”ë Œë“œ ë„형 최대 ë²„í¼ í¬ê¸° (KB)" #: editor/animation_bezier_editor.cpp msgid "Free" @@ -1201,7 +1151,7 @@ msgstr "3D 변형 트랙" #: editor/animation_track_editor.cpp msgid "Call Method Track" -msgstr "호출 메서드 트랙" +msgstr "메서드 호출 트랙" #: editor/animation_track_editor.cpp msgid "Bezier Curve Track" @@ -1256,7 +1206,7 @@ msgstr "ì´ íŠ¸ëž™ì„ ì¼œê¸°/ë„기를 í† ê¸€í•©ë‹ˆë‹¤." msgid "Update Mode (How this property is set)" msgstr "ì—…ë°ì´íЏ 모드 (ì´ ì†ì„±ì´ ì„¤ì •ë˜ëŠ” 방법)" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "ë³´ê°„ 모드" @@ -1324,9 +1274,8 @@ msgid "Duplicate Key(s)" msgstr "키 ë³µì œ" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Add RESET Value(s)" -msgstr "í”„ë ˆìž„ %dê°œ 추가" +msgstr "초기화 ê°’ 추가" #: editor/animation_track_editor.cpp msgid "Delete Key(s)" @@ -1355,7 +1304,6 @@ msgstr "ì• ë‹ˆë©”ì´ì…˜ 트랙 ì œê±°" #: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp #: editor/spatial_editor_gizmos.cpp modules/csg/csg_gizmos.cpp #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Editors" msgstr "ì—디터" @@ -1370,9 +1318,8 @@ msgid "Animation" msgstr "ì• ë‹ˆë©”ì´ì…˜" #: editor/animation_track_editor.cpp editor/editor_settings.cpp -#, fuzzy msgid "Confirm Insert Track" -msgstr "ì• ë‹ˆë©”ì´ì…˜ 트랙 & 키 삽입" +msgstr "트랙 삽입하기" #. TRANSLATORS: %s will be replaced by a phrase describing the target of track. #: editor/animation_track_editor.cpp @@ -1519,7 +1466,7 @@ msgstr "메서드" #: editor/animation_track_editor.cpp msgid "Bezier" -msgstr "" +msgstr "ë² ì§€ì–´" #: editor/animation_track_editor.cpp #: modules/visual_script/visual_script_editor.cpp @@ -1541,9 +1488,8 @@ msgstr "" "ì´ ì„¤ì •ì€ ë‹¨ì¼ íŠ¸ëž™ì—ë§Œ ì ìš© 가능하므로 ë² ì§€ì–´ íŽ¸ì§‘ì— ì‚¬ìš©í• ìˆ˜ 없습니다." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Add RESET Keys" -msgstr "ì• ë‹ˆë©”ì´ì…˜ 키 스케ì¼" +msgstr "ì• ë‹ˆë©”ì´ì…˜ 리셋 키 추가" #: editor/animation_track_editor.cpp msgid "" @@ -1981,7 +1927,7 @@ msgstr "\"%s\" 시그ë„ì˜ ëª¨ë“ ì—°ê²°ì„ ì œê±°í•˜ì‹œê² ìŠµë‹ˆê¹Œ?" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" -msgstr "시그ë„" +msgstr "ì‹ í˜¸" #: editor/connections_dialog.cpp msgid "Filter signals" @@ -6140,6 +6086,11 @@ msgstr "%s를 눌러 ì •ìˆ˜ë¡œ 반올림합니다. Shift를 눌러 좀 ë” ì •ë° msgid "Flat" msgstr "플랫 0" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "ì½œë¦¬ì „ 모드" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "ê°€ì ¸ì˜¬ 노드 ì„ íƒ" @@ -6877,7 +6828,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp msgid "sRGB" -msgstr "" +msgstr "sRGB" #: editor/import/resource_importer_layered_texture.cpp #, fuzzy @@ -12878,7 +12829,7 @@ msgstr "" #: editor/plugins/version_control_editor_plugin.cpp msgid "SSH Passphrase" -msgstr "" +msgstr "SSH Passphrase" #: editor/plugins/version_control_editor_plugin.cpp msgid "Detect new changes" @@ -16051,42 +16002,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -#, fuzzy -msgid "Display" -msgstr "ëª¨ë‘ í‘œì‹œ" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -#, fuzzy -msgid "Height" -msgstr "ë¼ì´íЏ" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -#, fuzzy -msgid "Test Width" -msgstr "왼쪽 넓게" - -#: main/main.cpp -#, fuzzy -msgid "Test Height" -msgstr "테스트" - #: main/main.cpp msgid "DPI" msgstr "" @@ -17959,7 +17874,7 @@ msgstr "" #: modules/visual_script/visual_script_flow_control.cpp msgid "While" -msgstr "" +msgstr "While" #: modules/visual_script/visual_script_flow_control.cpp msgid "while (cond):" @@ -20481,6 +20396,11 @@ msgstr "ìž˜ëª»ëœ í´ë¦¬ê³¤. ì ì–´ë„ '솔리드' 빌드 모드ì—서 ì 3ê°œê msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "ìž˜ëª»ëœ í´ë¦¬ê³¤. ì ì–´ë„ '세그먼트' 빌드 모드ì—서 ì 2개가 필요합니다." +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp #, fuzzy msgid "Build Mode" @@ -22320,7 +22240,7 @@ msgstr "NavMesh 굽기" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -24599,6 +24519,11 @@ msgstr "팬 모드" #: scene/main/node.cpp #, fuzzy +msgid "Physics Interpolation Mode" +msgstr "ë³´ê°„ 모드" + +#: scene/main/node.cpp +#, fuzzy msgid "Display Folded" msgstr "ì…°ì´ë” ì—†ìŒ í‘œì‹œ" @@ -24632,11 +24557,6 @@ msgstr "다수 ì„¤ì •:" msgid "Process Priority" msgstr "ìš°ì„ ìˆœìœ„ 활성화" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "ë³´ê°„ 모드" - #: scene/main/scene_tree.cpp scene/main/timer.cpp #, fuzzy msgid "Time Left" @@ -25348,6 +25268,11 @@ msgstr "ì´ë¦„ 있는 구분ìž" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "ìƒ‰ìƒ ì—°ì‚°ìž." + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "ìƒ‰ìƒ í•목 ì´ë¦„ 바꾸기" @@ -26154,6 +26079,11 @@ msgstr "집중 모드" #: scene/resources/gradient.cpp #, fuzzy +msgid "Raw Data" +msgstr "깊ì´" + +#: scene/resources/gradient.cpp +#, fuzzy msgid "Offsets" msgstr "오프셋:" diff --git a/editor/translations/lt.po b/editor/translations/lt.po index e2a4f225ca..4850f0b982 100644 --- a/editor/translations/lt.po +++ b/editor/translations/lt.po @@ -81,11 +81,12 @@ msgstr "Atidaryti Skriptų Editorių" msgid "Screen Orientation" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "" @@ -93,7 +94,7 @@ msgstr "" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Fullscreen" msgstr "" @@ -105,7 +106,7 @@ msgstr "" msgid "Minimized" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -119,10 +120,11 @@ msgstr "" msgid "Position" msgstr "Sukurti NaujÄ…" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -603,6 +605,39 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +msgid "Display" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +msgid "Height" +msgstr "" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +msgid "Test Width" +msgstr "" + +#: core/project_settings.cpp +msgid "Test Height" +msgstr "" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1201,7 +1236,7 @@ msgstr "Ä®raÅ¡o koregavimas: įjungtas/ iÅ¡jungtas." msgid "Update Mode (How this property is set)" msgstr "" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "Interpoliacijos režimas" @@ -5942,6 +5977,11 @@ msgstr "" msgid "Flat" msgstr "" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "Animacijos Nodas" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "Pasirinkite Nodus, kuriuos norite importuoti" @@ -15816,38 +15856,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -msgid "Display" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -msgid "Height" -msgstr "" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -msgid "Test Width" -msgstr "" - -#: main/main.cpp -msgid "Test Height" -msgstr "" - #: main/main.cpp msgid "DPI" msgstr "" @@ -20064,6 +20072,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp #, fuzzy msgid "Build Mode" @@ -21752,7 +21765,7 @@ msgstr "" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -23861,6 +23874,11 @@ msgid "Pause Mode" msgstr "TimeScale Nodas" #: scene/main/node.cpp +#, fuzzy +msgid "Physics Interpolation Mode" +msgstr "Interpoliacijos režimas" + +#: scene/main/node.cpp msgid "Display Folded" msgstr "" @@ -23891,11 +23909,6 @@ msgstr "" msgid "Process Priority" msgstr "Redaguoti Filtrus" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "Interpoliacijos režimas" - #: scene/main/scene_tree.cpp scene/main/timer.cpp #, fuzzy msgid "Time Left" @@ -24561,6 +24574,11 @@ msgstr "" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "Versija:" + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "(Esama)" @@ -25339,6 +25357,10 @@ msgid "Distance Field" msgstr "Diegti" #: scene/resources/gradient.cpp +msgid "Raw Data" +msgstr "" + +#: scene/resources/gradient.cpp msgid "Offsets" msgstr "" diff --git a/editor/translations/lv.po b/editor/translations/lv.po index 3329f559f5..2d4a4d6eb7 100644 --- a/editor/translations/lv.po +++ b/editor/translations/lv.po @@ -9,13 +9,14 @@ # StiLins <aigars.skilins@gmail.com>, 2020. # Rihards Kubilis <oldcar@inbox.lv>, 2020. # M E <gruffy7932@gmail.com>, 2021, 2022. +# D Ävis <dlektauers@gmail.com>, 2022. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2022-04-25 15:02+0000\n" -"Last-Translator: M E <gruffy7932@gmail.com>\n" +"PO-Revision-Date: 2022-05-07 16:08+0000\n" +"Last-Translator: D Ävis <dlektauers@gmail.com>\n" "Language-Team: Latvian <https://hosted.weblate.org/projects/godot-engine/" "godot/lv/>\n" "Language: lv\n" @@ -24,16 +25,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n % 10 == 0 || n % 100 >= 11 && n % 100 <= " "19) ? 0 : ((n % 10 == 1 && n % 100 != 11) ? 1 : 2);\n" -"X-Generator: Weblate 4.12.1-dev\n" +"X-Generator: Weblate 4.12.1\n" #: core/bind/core_bind.cpp main/main.cpp msgid "Tablet Driver" msgstr "" #: core/bind/core_bind.cpp -#, fuzzy msgid "Clipboard" -msgstr "Starpliktuve ir tukÅ¡a!" +msgstr "Starpliktuve" #: core/bind/core_bind.cpp #, fuzzy @@ -45,9 +45,8 @@ msgid "Exit Code" msgstr "" #: core/bind/core_bind.cpp -#, fuzzy msgid "V-Sync Enabled" -msgstr "IespÄ“jot" +msgstr "V-Sync ieslÄ“gts" #: core/bind/core_bind.cpp main/main.cpp msgid "V-Sync Via Compositor" @@ -72,34 +71,31 @@ msgid "Keep Screen On" msgstr "AtstÄt atkļūdotÄju atvÄ“rtu" #: core/bind/core_bind.cpp -#, fuzzy msgid "Min Window Size" -msgstr "Galvenais Skripts:" +msgstr "MazÄkais loga izmÄ“rs" #: core/bind/core_bind.cpp -#, fuzzy msgid "Max Window Size" -msgstr "Galvenais Skripts:" +msgstr "LielÄkais loga izmÄ“rs" #: core/bind/core_bind.cpp -#, fuzzy msgid "Screen Orientation" -msgstr "AtvÄ“rt dokumentÄciju" +msgstr "EkrÄna orientÄcija" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp -#, fuzzy +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" -msgstr "Jauns logs" +msgstr "Logs" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" -msgstr "" +msgstr "Bez apmales" #: core/bind/core_bind.cpp msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp #, fuzzy msgid "Fullscreen" msgstr "PÄrslÄ“gt PilnekrÄnu" @@ -112,7 +108,7 @@ msgstr "" msgid "Minimized" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -126,10 +122,11 @@ msgstr "" msgid "Position" msgstr "Doka pozÄ«cija" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -171,7 +168,7 @@ msgstr "Fizikas kadrs %" #: core/bind/core_bind.cpp editor/plugins/version_control_editor_plugin.cpp msgid "Error" -msgstr "" +msgstr "Kļūda" #: core/bind/core_bind.cpp #, fuzzy @@ -612,6 +609,42 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +#, fuzzy +msgid "Display" +msgstr "ParÄdÄ«t Visu" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +msgid "Height" +msgstr "" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Width" +msgstr "Pa Kreisi, PlaÅ¡s" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Height" +msgstr "TestÄ“" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1209,7 +1242,7 @@ msgstr "PÄrslÄ“gt Å¡o celiņu ieslÄ“gts/izslÄ“gts." msgid "Update Mode (How this property is set)" msgstr "AtjaunoÅ¡anas Režīms (KÄ Å¡is mainÄ«gais tiek iestatÄ«ts)" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "InterpolÄcijas režīms" @@ -6025,6 +6058,11 @@ msgstr "" msgid "Flat" msgstr "Plakans 1" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "Sadursmes režīms" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "" @@ -15607,41 +15645,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -#, fuzzy -msgid "Display" -msgstr "ParÄdÄ«t Visu" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -msgid "Height" -msgstr "" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -#, fuzzy -msgid "Test Width" -msgstr "Pa Kreisi, PlaÅ¡s" - -#: main/main.cpp -#, fuzzy -msgid "Test Height" -msgstr "TestÄ“" - #: main/main.cpp msgid "DPI" msgstr "" @@ -19865,6 +19868,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp #, fuzzy msgid "Build Mode" @@ -21574,7 +21582,7 @@ msgstr "" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -23721,6 +23729,11 @@ msgstr "MÄ“roga Režīms" #: scene/main/node.cpp #, fuzzy +msgid "Physics Interpolation Mode" +msgstr "InterpolÄcijas režīms" + +#: scene/main/node.cpp +#, fuzzy msgid "Display Folded" msgstr "ParÄdÄ«t Visu" @@ -23754,11 +23767,6 @@ msgstr "Uzlikt vairÄkus:" msgid "Process Priority" msgstr "MÄ“roga Režīms" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "InterpolÄcijas režīms" - #: scene/main/scene_tree.cpp scene/main/timer.cpp #, fuzzy msgid "Time Left" @@ -24429,6 +24437,11 @@ msgstr "" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "AtdalÄ«jums:" + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "Funkcijas" @@ -25215,6 +25228,11 @@ msgid "Distance Field" msgstr "TraucÄ“jumu brÄ«vs režīms" #: scene/resources/gradient.cpp +#, fuzzy +msgid "Raw Data" +msgstr "Dziļums" + +#: scene/resources/gradient.cpp msgid "Offsets" msgstr "" diff --git a/editor/translations/mi.po b/editor/translations/mi.po index ccf4d87a9c..c5fe6170e1 100644 --- a/editor/translations/mi.po +++ b/editor/translations/mi.po @@ -63,11 +63,12 @@ msgstr "" msgid "Screen Orientation" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "" @@ -75,7 +76,7 @@ msgstr "" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Fullscreen" msgstr "" @@ -87,7 +88,7 @@ msgstr "" msgid "Minimized" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -100,10 +101,11 @@ msgstr "" msgid "Position" msgstr "" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -553,6 +555,39 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +msgid "Display" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +msgid "Height" +msgstr "" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +msgid "Test Width" +msgstr "" + +#: core/project_settings.cpp +msgid "Test Height" +msgstr "" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1130,7 +1165,7 @@ msgstr "" msgid "Update Mode (How this property is set)" msgstr "" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "" @@ -5690,6 +5725,10 @@ msgstr "" msgid "Flat" msgstr "" +#: editor/editor_spin_slider.cpp +msgid "Hide Slider" +msgstr "" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "" @@ -15154,38 +15193,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -msgid "Display" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -msgid "Height" -msgstr "" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -msgid "Test Width" -msgstr "" - -#: main/main.cpp -msgid "Test Height" -msgstr "" - #: main/main.cpp msgid "DPI" msgstr "" @@ -19146,6 +19153,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp msgid "Build Mode" msgstr "" @@ -20727,7 +20739,7 @@ msgstr "" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -22674,6 +22686,10 @@ msgid "Pause Mode" msgstr "" #: scene/main/node.cpp +msgid "Physics Interpolation Mode" +msgstr "" + +#: scene/main/node.cpp msgid "Display Folded" msgstr "" @@ -22701,10 +22717,6 @@ msgstr "" msgid "Process Priority" msgstr "" -#: scene/main/node.cpp -msgid "Physics Interpolated" -msgstr "" - #: scene/main/scene_tree.cpp scene/main/timer.cpp msgid "Time Left" msgstr "" @@ -23306,6 +23318,10 @@ msgid "Labeled Separator Right" msgstr "" #: scene/resources/default_theme/default_theme.cpp +msgid "Font Separator" +msgstr "" + +#: scene/resources/default_theme/default_theme.cpp msgid "Font Color Accel" msgstr "" @@ -23986,6 +24002,10 @@ msgid "Distance Field" msgstr "" #: scene/resources/gradient.cpp +msgid "Raw Data" +msgstr "" + +#: scene/resources/gradient.cpp msgid "Offsets" msgstr "" diff --git a/editor/translations/mk.po b/editor/translations/mk.po index 8a470c73e4..43ff9e4c40 100644 --- a/editor/translations/mk.po +++ b/editor/translations/mk.po @@ -72,11 +72,12 @@ msgstr "" msgid "Screen Orientation" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "" @@ -84,7 +85,7 @@ msgstr "" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Fullscreen" msgstr "" @@ -96,7 +97,7 @@ msgstr "" msgid "Minimized" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -109,10 +110,11 @@ msgstr "" msgid "Position" msgstr "" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -567,6 +569,39 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +msgid "Display" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +msgid "Height" +msgstr "" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +msgid "Test Width" +msgstr "" + +#: core/project_settings.cpp +msgid "Test Height" +msgstr "" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1144,7 +1179,7 @@ msgstr "" msgid "Update Mode (How this property is set)" msgstr "" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "" @@ -5720,6 +5755,10 @@ msgstr "" msgid "Flat" msgstr "" +#: editor/editor_spin_slider.cpp +msgid "Hide Slider" +msgstr "" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "" @@ -15215,38 +15254,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -msgid "Display" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -msgid "Height" -msgstr "" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -msgid "Test Width" -msgstr "" - -#: main/main.cpp -msgid "Test Height" -msgstr "" - #: main/main.cpp msgid "DPI" msgstr "" @@ -19230,6 +19237,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp msgid "Build Mode" msgstr "" @@ -20824,7 +20836,7 @@ msgstr "" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -22791,6 +22803,10 @@ msgid "Pause Mode" msgstr "" #: scene/main/node.cpp +msgid "Physics Interpolation Mode" +msgstr "" + +#: scene/main/node.cpp msgid "Display Folded" msgstr "" @@ -22819,10 +22835,6 @@ msgstr "" msgid "Process Priority" msgstr "" -#: scene/main/node.cpp -msgid "Physics Interpolated" -msgstr "" - #: scene/main/scene_tree.cpp scene/main/timer.cpp msgid "Time Left" msgstr "" @@ -23431,6 +23443,11 @@ msgid "Labeled Separator Right" msgstr "" #: scene/resources/default_theme/default_theme.cpp +#, fuzzy +msgid "Font Separator" +msgstr "СвојÑтва на анимацијата." + +#: scene/resources/default_theme/default_theme.cpp msgid "Font Color Accel" msgstr "" @@ -24120,6 +24137,10 @@ msgid "Distance Field" msgstr "" #: scene/resources/gradient.cpp +msgid "Raw Data" +msgstr "" + +#: scene/resources/gradient.cpp msgid "Offsets" msgstr "" diff --git a/editor/translations/ml.po b/editor/translations/ml.po index e5e378e680..138b1d6748 100644 --- a/editor/translations/ml.po +++ b/editor/translations/ml.po @@ -74,11 +74,12 @@ msgstr "" msgid "Screen Orientation" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "" @@ -86,7 +87,7 @@ msgstr "" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Fullscreen" msgstr "" @@ -98,7 +99,7 @@ msgstr "" msgid "Minimized" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -112,10 +113,11 @@ msgstr "" msgid "Position" msgstr "ചലനം à´šàµà´±àµà´±àµ½" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -571,6 +573,39 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +msgid "Display" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +msgid "Height" +msgstr "" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +msgid "Test Width" +msgstr "" + +#: core/project_settings.cpp +msgid "Test Height" +msgstr "" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1149,7 +1184,7 @@ msgstr "à´ˆ വഴി à´“(ണോ/ഫോ) ആകàµà´•àµà´•." msgid "Update Mode (How this property is set)" msgstr "" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "" @@ -5733,6 +5768,10 @@ msgstr "" msgid "Flat" msgstr "" +#: editor/editor_spin_slider.cpp +msgid "Hide Slider" +msgstr "" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "" @@ -15230,38 +15269,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -msgid "Display" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -msgid "Height" -msgstr "" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -msgid "Test Width" -msgstr "" - -#: main/main.cpp -msgid "Test Height" -msgstr "" - #: main/main.cpp msgid "DPI" msgstr "" @@ -19261,6 +19268,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp msgid "Build Mode" msgstr "" @@ -20867,7 +20879,7 @@ msgstr "" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -22844,6 +22856,10 @@ msgid "Pause Mode" msgstr "" #: scene/main/node.cpp +msgid "Physics Interpolation Mode" +msgstr "" + +#: scene/main/node.cpp msgid "Display Folded" msgstr "" @@ -22872,10 +22888,6 @@ msgstr "" msgid "Process Priority" msgstr "" -#: scene/main/node.cpp -msgid "Physics Interpolated" -msgstr "" - #: scene/main/scene_tree.cpp scene/main/timer.cpp msgid "Time Left" msgstr "" @@ -23496,6 +23508,11 @@ msgstr "" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "ചലനം à´šàµà´±àµà´±àµ½" + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "à´ªàµà´°à´µàµƒà´¤àµà´¤à´¿à´•ൾ:" @@ -24206,6 +24223,10 @@ msgid "Distance Field" msgstr "" #: scene/resources/gradient.cpp +msgid "Raw Data" +msgstr "" + +#: scene/resources/gradient.cpp msgid "Offsets" msgstr "" diff --git a/editor/translations/mr.po b/editor/translations/mr.po index d77bbd3c00..acc9653beb 100644 --- a/editor/translations/mr.po +++ b/editor/translations/mr.po @@ -71,11 +71,12 @@ msgstr "" msgid "Screen Orientation" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "" @@ -83,7 +84,7 @@ msgstr "" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Fullscreen" msgstr "" @@ -95,7 +96,7 @@ msgstr "" msgid "Minimized" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -109,10 +110,11 @@ msgstr "" msgid "Position" msgstr "अâ€à¥…निमेशन टà¥à¤°à¥€" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -573,6 +575,39 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +msgid "Display" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +msgid "Height" +msgstr "" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +msgid "Test Width" +msgstr "" + +#: core/project_settings.cpp +msgid "Test Height" +msgstr "" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1152,7 +1187,7 @@ msgstr "" msgid "Update Mode (How this property is set)" msgstr "" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "" @@ -5726,6 +5761,10 @@ msgstr "" msgid "Flat" msgstr "" +#: editor/editor_spin_slider.cpp +msgid "Hide Slider" +msgstr "" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "" @@ -15228,38 +15267,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -msgid "Display" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -msgid "Height" -msgstr "" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -msgid "Test Width" -msgstr "" - -#: main/main.cpp -msgid "Test Height" -msgstr "" - #: main/main.cpp msgid "DPI" msgstr "" @@ -19269,6 +19276,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp #, fuzzy msgid "Build Mode" @@ -20887,7 +20899,7 @@ msgstr "" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -22879,6 +22891,10 @@ msgid "Pause Mode" msgstr "पà¥à¤²à¥‡ मोड:" #: scene/main/node.cpp +msgid "Physics Interpolation Mode" +msgstr "" + +#: scene/main/node.cpp msgid "Display Folded" msgstr "" @@ -22907,10 +22923,6 @@ msgstr "" msgid "Process Priority" msgstr "" -#: scene/main/node.cpp -msgid "Physics Interpolated" -msgstr "" - #: scene/main/scene_tree.cpp scene/main/timer.cpp msgid "Time Left" msgstr "" @@ -23526,6 +23538,11 @@ msgid "Labeled Separator Right" msgstr "" #: scene/resources/default_theme/default_theme.cpp +#, fuzzy +msgid "Font Separator" +msgstr "संकà¥à¤°à¤®à¤£: " + +#: scene/resources/default_theme/default_theme.cpp msgid "Font Color Accel" msgstr "" @@ -24238,6 +24255,10 @@ msgid "Distance Field" msgstr "" #: scene/resources/gradient.cpp +msgid "Raw Data" +msgstr "" + +#: scene/resources/gradient.cpp msgid "Offsets" msgstr "" diff --git a/editor/translations/ms.po b/editor/translations/ms.po index 754d3f8667..673ad0ff22 100644 --- a/editor/translations/ms.po +++ b/editor/translations/ms.po @@ -86,12 +86,13 @@ msgstr "Saiz:" msgid "Screen Orientation" msgstr "Buka Dokumentasi" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp #, fuzzy msgid "Window" msgstr "Tetingkap Baru" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp #, fuzzy msgid "Borderless" msgstr "Piksel Sempadan" @@ -100,7 +101,7 @@ msgstr "Piksel Sempadan" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp #, fuzzy msgid "Fullscreen" msgstr "Togol Skrin Penuh" @@ -113,7 +114,7 @@ msgstr "" msgid "Minimized" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -127,10 +128,11 @@ msgstr "" msgid "Position" msgstr "Kedudukan Dok" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -616,6 +618,42 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +#, fuzzy +msgid "Display" +msgstr "Paparkan Semua" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +msgid "Height" +msgstr "" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Width" +msgstr "Kiri Lebar" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Height" +msgstr "Menguji" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1218,7 +1256,7 @@ msgstr "Hidupkan / matikan trek ini." msgid "Update Mode (How this property is set)" msgstr "Kemas kini Mod (Bagaimana sifat ini ditetapkan)" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "Mod Interpolasi" @@ -6103,6 +6141,11 @@ msgstr "" msgid "Flat" msgstr "Flat 0" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "Bentuk Perlanggaran Yang Boleh Dilihat" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "Pilih Nod(Nod-nod) untuk Diimport" @@ -15850,41 +15893,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -#, fuzzy -msgid "Display" -msgstr "Paparkan Semua" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -msgid "Height" -msgstr "" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -#, fuzzy -msgid "Test Width" -msgstr "Kiri Lebar" - -#: main/main.cpp -#, fuzzy -msgid "Test Height" -msgstr "Menguji" - #: main/main.cpp msgid "DPI" msgstr "" @@ -20150,6 +20158,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp #, fuzzy msgid "Build Mode" @@ -21877,7 +21890,7 @@ msgstr "" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -24049,6 +24062,11 @@ msgstr "Mod Pan" #: scene/main/node.cpp #, fuzzy +msgid "Physics Interpolation Mode" +msgstr "Mod Interpolasi" + +#: scene/main/node.cpp +#, fuzzy msgid "Display Folded" msgstr "Paparkan Semua" @@ -24082,11 +24100,6 @@ msgstr "Tetapkan Pelbagai:" msgid "Process Priority" msgstr "Mod Alih" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "Mod Interpolasi" - #: scene/main/scene_tree.cpp scene/main/timer.cpp #, fuzzy msgid "Time Left" @@ -24768,6 +24781,11 @@ msgstr "" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "Versi:" + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "Keluarkan Item" @@ -25566,6 +25584,11 @@ msgstr "Mod Bebas Gangguan" #: scene/resources/gradient.cpp #, fuzzy +msgid "Raw Data" +msgstr "Kedalaman" + +#: scene/resources/gradient.cpp +#, fuzzy msgid "Offsets" msgstr "Grid Offset:" diff --git a/editor/translations/nb.po b/editor/translations/nb.po index ecbcf6d448..e6f25c2a6a 100644 --- a/editor/translations/nb.po +++ b/editor/translations/nb.po @@ -91,11 +91,12 @@ msgstr "Maks Vindustørrelse" msgid "Screen Orientation" msgstr "Skjermretning" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" msgstr "Vindu" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "Rammeløs" @@ -103,7 +104,7 @@ msgstr "Rammeløs" msgid "Per Pixel Transparency Enabled" msgstr "Per Piksel Gjennomsiktighet Aktivert" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Fullscreen" msgstr "Fullskjerm" @@ -115,7 +116,7 @@ msgstr "Maksimert" msgid "Minimized" msgstr "Minimert" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp #, fuzzy msgid "Resizable" @@ -129,10 +130,11 @@ msgstr "Kan Endre Størrelse" msgid "Position" msgstr "Posisjon" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -600,6 +602,43 @@ msgstr "Bruk Tilpasset Brukerkatalog" msgid "Custom User Dir Name" msgstr "Tilpasset Brukerkatalognavn" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +#, fuzzy +msgid "Display" +msgstr "Vis alle" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +#, fuzzy +msgid "Height" +msgstr "Lys" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Width" +msgstr "Venstrevisning" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Height" +msgstr "Tester" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1211,7 +1250,7 @@ msgstr "SlÃ¥ sporet av/pÃ¥." msgid "Update Mode (How this property is set)" msgstr "Oppdateringsmodus (Hvordan denne egenskapen settes)" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "Interpolasjonsmodus" @@ -6199,6 +6238,11 @@ msgstr "" msgid "Flat" msgstr "Flat0" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "Kollisjon Modus" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "Velg node(r) som skal importeres" @@ -16448,42 +16492,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -#, fuzzy -msgid "Display" -msgstr "Vis alle" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -#, fuzzy -msgid "Height" -msgstr "Lys" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -#, fuzzy -msgid "Test Width" -msgstr "Venstrevisning" - -#: main/main.cpp -#, fuzzy -msgid "Test Height" -msgstr "Tester" - #: main/main.cpp msgid "DPI" msgstr "" @@ -20893,6 +20901,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp #, fuzzy msgid "Build Mode" @@ -22661,7 +22674,7 @@ msgstr "" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -24870,6 +24883,11 @@ msgstr "Panorerings-Modus" #: scene/main/node.cpp #, fuzzy +msgid "Physics Interpolation Mode" +msgstr "Interpolasjonsmodus" + +#: scene/main/node.cpp +#, fuzzy msgid "Display Folded" msgstr "Vis alle" @@ -24903,11 +24921,6 @@ msgstr "Sett mange:" msgid "Process Priority" msgstr "Rediger Filtre" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "Interpolasjonsmodus" - #: scene/main/scene_tree.cpp scene/main/timer.cpp #, fuzzy msgid "Time Left" @@ -25603,6 +25616,11 @@ msgstr "" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "Nummereringer:" + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "Fjern Gjenstand" @@ -26406,6 +26424,11 @@ msgstr "Distraksjonsfri Modus" #: scene/resources/gradient.cpp #, fuzzy +msgid "Raw Data" +msgstr "Dybde" + +#: scene/resources/gradient.cpp +#, fuzzy msgid "Offsets" msgstr "Avstand:" diff --git a/editor/translations/nl.po b/editor/translations/nl.po index ca718216df..5fb29c5fcc 100644 --- a/editor/translations/nl.po +++ b/editor/translations/nl.po @@ -134,12 +134,13 @@ msgstr "Omlijningsgrootte:" msgid "Screen Orientation" msgstr "Scherm operator." -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp #, fuzzy msgid "Window" msgstr "Nieuw Venster" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp #, fuzzy msgid "Borderless" msgstr "Randpixels" @@ -148,7 +149,7 @@ msgstr "Randpixels" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp #, fuzzy msgid "Fullscreen" msgstr "Volledig scherm" @@ -162,7 +163,7 @@ msgstr "" msgid "Minimized" msgstr "Initialiseren" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -176,10 +177,11 @@ msgstr "" msgid "Position" msgstr "Tabbladpositie" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -678,6 +680,43 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +#, fuzzy +msgid "Display" +msgstr "Alles tonen" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +#, fuzzy +msgid "Height" +msgstr "Licht" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Width" +msgstr "Linkerbreedte" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Height" +msgstr "Testen" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1288,7 +1327,7 @@ msgstr "Schakel deze track aan/uit." msgid "Update Mode (How this property is set)" msgstr "Bijwerkmodus (hoe de eigenschap ingesteld wordt)" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "Interpolatiemodus" @@ -6208,6 +6247,11 @@ msgstr "" msgid "Flat" msgstr "Plat 0" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "Botsingsmodus" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "Selecteer een of meer knopen om te importeren" @@ -16324,42 +16368,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -#, fuzzy -msgid "Display" -msgstr "Alles tonen" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -#, fuzzy -msgid "Height" -msgstr "Licht" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -#, fuzzy -msgid "Test Width" -msgstr "Linkerbreedte" - -#: main/main.cpp -#, fuzzy -msgid "Test Height" -msgstr "Testen" - #: main/main.cpp msgid "DPI" msgstr "" @@ -20789,6 +20797,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp #, fuzzy msgid "Build Mode" @@ -22633,7 +22646,7 @@ msgstr "Bak NavMesh" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -24900,6 +24913,11 @@ msgstr "Verschuifmodus" #: scene/main/node.cpp #, fuzzy +msgid "Physics Interpolation Mode" +msgstr "Interpolatiemodus" + +#: scene/main/node.cpp +#, fuzzy msgid "Display Folded" msgstr "Weergave Zonder Shading" @@ -24933,11 +24951,6 @@ msgstr "Zet Meerdere:" msgid "Process Priority" msgstr "Prioriteit Inschakelen" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "Interpolatiemodus" - #: scene/main/scene_tree.cpp scene/main/timer.cpp #, fuzzy msgid "Time Left" @@ -25646,6 +25659,11 @@ msgstr "Genoemde Sep." #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "Color operator." + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "Class Items Verwijderen" @@ -26452,6 +26470,11 @@ msgstr "Afleidingsvrijemodus" #: scene/resources/gradient.cpp #, fuzzy +msgid "Raw Data" +msgstr "Diepte" + +#: scene/resources/gradient.cpp +#, fuzzy msgid "Offsets" msgstr "Afstand:" diff --git a/editor/translations/or.po b/editor/translations/or.po index d8832dfc66..0178876256 100644 --- a/editor/translations/or.po +++ b/editor/translations/or.po @@ -69,11 +69,12 @@ msgstr "" msgid "Screen Orientation" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "" @@ -81,7 +82,7 @@ msgstr "" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Fullscreen" msgstr "" @@ -93,7 +94,7 @@ msgstr "" msgid "Minimized" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -106,10 +107,11 @@ msgstr "" msgid "Position" msgstr "" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -559,6 +561,39 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +msgid "Display" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +msgid "Height" +msgstr "" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +msgid "Test Width" +msgstr "" + +#: core/project_settings.cpp +msgid "Test Height" +msgstr "" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1136,7 +1171,7 @@ msgstr "" msgid "Update Mode (How this property is set)" msgstr "" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "" @@ -5696,6 +5731,10 @@ msgstr "" msgid "Flat" msgstr "" +#: editor/editor_spin_slider.cpp +msgid "Hide Slider" +msgstr "" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "" @@ -15160,38 +15199,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -msgid "Display" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -msgid "Height" -msgstr "" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -msgid "Test Width" -msgstr "" - -#: main/main.cpp -msgid "Test Height" -msgstr "" - #: main/main.cpp msgid "DPI" msgstr "" @@ -19152,6 +19159,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp msgid "Build Mode" msgstr "" @@ -20733,7 +20745,7 @@ msgstr "" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -22680,6 +22692,10 @@ msgid "Pause Mode" msgstr "" #: scene/main/node.cpp +msgid "Physics Interpolation Mode" +msgstr "" + +#: scene/main/node.cpp msgid "Display Folded" msgstr "" @@ -22707,10 +22723,6 @@ msgstr "" msgid "Process Priority" msgstr "" -#: scene/main/node.cpp -msgid "Physics Interpolated" -msgstr "" - #: scene/main/scene_tree.cpp scene/main/timer.cpp msgid "Time Left" msgstr "" @@ -23312,6 +23324,10 @@ msgid "Labeled Separator Right" msgstr "" #: scene/resources/default_theme/default_theme.cpp +msgid "Font Separator" +msgstr "" + +#: scene/resources/default_theme/default_theme.cpp msgid "Font Color Accel" msgstr "" @@ -23992,6 +24008,10 @@ msgid "Distance Field" msgstr "" #: scene/resources/gradient.cpp +msgid "Raw Data" +msgstr "" + +#: scene/resources/gradient.cpp msgid "Offsets" msgstr "" diff --git a/editor/translations/pl.po b/editor/translations/pl.po index 9cb6e1441a..9f087146df 100644 --- a/editor/translations/pl.po +++ b/editor/translations/pl.po @@ -59,13 +59,15 @@ # Katarzyna Twardowska <katarina.twardowska@gmail.com>, 2022. # Mateusz ZdrzaÅ‚ek <matjozohd@gmail.com>, 2022. # Konrad <kobe-interactive@protonmail.com>, 2022. +# Pixel Zone - Godot Engine Tutorials <karoltomaszewskimusic@gmail.com>, 2022. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2022-04-04 13:05+0000\n" -"Last-Translator: Tomek <kobewi4e@gmail.com>\n" +"PO-Revision-Date: 2022-05-15 20:00+0000\n" +"Last-Translator: Pixel Zone - Godot Engine Tutorials " +"<karoltomaszewskimusic@gmail.com>\n" "Language-Team: Polish <https://hosted.weblate.org/projects/godot-engine/" "godot/pl/>\n" "Language: pl\n" @@ -74,7 +76,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.12-dev\n" +"X-Generator: Weblate 4.13-dev\n" #: core/bind/core_bind.cpp main/main.cpp msgid "Tablet Driver" @@ -128,11 +130,12 @@ msgstr "Maks. rozmiar okna" msgid "Screen Orientation" msgstr "Orientacja ekranu" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" msgstr "Okno" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "Bez obramowania" @@ -140,7 +143,7 @@ msgstr "Bez obramowania" msgid "Per Pixel Transparency Enabled" msgstr "Włączona przezroczystość na piksel" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Fullscreen" msgstr "PeÅ‚ny ekran" @@ -152,7 +155,7 @@ msgstr "Zmaksymalizowane" msgid "Minimized" msgstr "Zminimalizowane" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "Zmienny rozmiar" @@ -165,10 +168,11 @@ msgstr "Zmienny rozmiar" msgid "Position" msgstr "Pozycja" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -178,7 +182,7 @@ msgstr "Rozmiar" #: core/bind/core_bind.cpp msgid "Endian Swap" -msgstr "" +msgstr "Zamiana Endian" #: core/bind/core_bind.cpp msgid "Editor Hint" @@ -278,7 +282,7 @@ msgstr "Rozmiar strony" #: core/io/file_access_network.cpp msgid "Page Read Ahead" -msgstr "" +msgstr "Strona czytana z wyprzedzeniem" #: core/io/http_client.cpp msgid "Blocking Mode Enabled" @@ -619,6 +623,43 @@ msgstr "Użyj niestandardowego katalogu użytkownika" msgid "Custom User Dir Name" msgstr "WÅ‚asna nazwa katalogu użytkownika" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +#, fuzzy +msgid "Display" +msgstr "Pokaż wszystko" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "Szerokość" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +#, fuzzy +msgid "Height" +msgstr "ÅšwiatÅ‚o" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "Zawsze na wierzchu" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Width" +msgstr "RozciÄ…gnij po lewej" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Height" +msgstr "Testowanie" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1198,7 +1239,7 @@ msgstr "Włącz/wyłącz Å›cieżkÄ™." msgid "Update Mode (How this property is set)" msgstr "Sposób odÅ›wieżania (jak ta wÅ‚aÅ›ciwość jest ustawiana)" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "Sposób interpolacji" @@ -6107,6 +6148,11 @@ msgstr "" msgid "Flat" msgstr "PÅ‚askie 0" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "Tryb kolizji" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "Wybierz wÄ™zÅ‚y do importu" @@ -16069,42 +16115,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -#, fuzzy -msgid "Display" -msgstr "Pokaż wszystko" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "Szerokość" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -#, fuzzy -msgid "Height" -msgstr "ÅšwiatÅ‚o" - -#: main/main.cpp -msgid "Always On Top" -msgstr "Zawsze na wierzchu" - -#: main/main.cpp -#, fuzzy -msgid "Test Width" -msgstr "RozciÄ…gnij po lewej" - -#: main/main.cpp -#, fuzzy -msgid "Test Height" -msgstr "Testowanie" - #: main/main.cpp #, fuzzy msgid "DPI" @@ -20526,6 +20536,11 @@ msgstr "" "NieprawidÅ‚owy wielokÄ…t. Co najmniej 3 punkty sÄ… potrzebne do trybu budowania " "\"Segments\"." +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp #, fuzzy msgid "Build Mode" @@ -22385,9 +22400,10 @@ msgid "NavMesh" msgstr "Przygotuj NavMesh" #: scene/3d/navigation_obstacle.cpp +#, fuzzy msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" "NavigationObstacle sÅ‚uży jedynie do zapewnienia unikania kolizji dla obiektu " "przestrzennego." @@ -24680,6 +24696,11 @@ msgstr "Tryb przesuwania" #: scene/main/node.cpp #, fuzzy +msgid "Physics Interpolation Mode" +msgstr "Sposób interpolacji" + +#: scene/main/node.cpp +#, fuzzy msgid "Display Folded" msgstr "Widok bezcieniowy" @@ -24713,11 +24734,6 @@ msgstr "Ustaw wiele:" msgid "Process Priority" msgstr "Włącz priorytety" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "Sposób interpolacji" - #: scene/main/scene_tree.cpp scene/main/timer.cpp #, fuzzy msgid "Time Left" @@ -25430,6 +25446,11 @@ msgstr "Nazwany separator" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "Operator koloru." + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "ZmieÅ„ nazwÄ™ elementu koloru" @@ -26239,6 +26260,11 @@ msgstr "Tryb bez rozproszeÅ„" #: scene/resources/gradient.cpp #, fuzzy +msgid "Raw Data" +msgstr "Głębia" + +#: scene/resources/gradient.cpp +#, fuzzy msgid "Offsets" msgstr "PrzesuniÄ™cie:" diff --git a/editor/translations/pr.po b/editor/translations/pr.po index 95fc632433..3b097a5b8b 100644 --- a/editor/translations/pr.po +++ b/editor/translations/pr.po @@ -80,11 +80,12 @@ msgstr "Edit" msgid "Screen Orientation" msgstr "Yer functions:" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "" @@ -92,7 +93,7 @@ msgstr "" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Fullscreen" msgstr "" @@ -104,7 +105,7 @@ msgstr "" msgid "Minimized" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -118,10 +119,11 @@ msgstr "" msgid "Position" msgstr "Discharge ye' Signal" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -598,6 +600,40 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +msgid "Display" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +msgid "Height" +msgstr "" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Width" +msgstr "Yar, Blow th' Selected Down!" + +#: core/project_settings.cpp +msgid "Test Height" +msgstr "" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1199,7 +1235,7 @@ msgstr "" msgid "Update Mode (How this property is set)" msgstr "" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "" @@ -5933,6 +5969,11 @@ msgstr "" msgid "Flat" msgstr "" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "Ye be fixin' Signal:" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "" @@ -15834,39 +15875,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -msgid "Display" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -msgid "Height" -msgstr "" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -#, fuzzy -msgid "Test Width" -msgstr "Yar, Blow th' Selected Down!" - -#: main/main.cpp -msgid "Test Height" -msgstr "" - #: main/main.cpp msgid "DPI" msgstr "" @@ -20103,6 +20111,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp #, fuzzy msgid "Build Mode" @@ -21778,7 +21791,7 @@ msgstr "" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -23872,6 +23885,11 @@ msgid "Pause Mode" msgstr "Slit th' Node" #: scene/main/node.cpp +#, fuzzy +msgid "Physics Interpolation Mode" +msgstr "Yer functions:" + +#: scene/main/node.cpp msgid "Display Folded" msgstr "" @@ -23902,11 +23920,6 @@ msgstr "" msgid "Process Priority" msgstr "Edit yer Variable:" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "Yer functions:" - #: scene/main/scene_tree.cpp scene/main/timer.cpp msgid "Time Left" msgstr "" @@ -24569,6 +24582,11 @@ msgstr "" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "Yer functions:" + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "Discharge ye' Variable" @@ -25338,6 +25356,10 @@ msgid "Distance Field" msgstr "" #: scene/resources/gradient.cpp +msgid "Raw Data" +msgstr "" + +#: scene/resources/gradient.cpp msgid "Offsets" msgstr "" diff --git a/editor/translations/pt.po b/editor/translations/pt.po index 7cdba4348c..0f00e31cfe 100644 --- a/editor/translations/pt.po +++ b/editor/translations/pt.po @@ -91,11 +91,12 @@ msgstr "Tamanho máximo da janela" msgid "Screen Orientation" msgstr "Orientação da tela" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" msgstr "Janela" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "Sem bordas" @@ -103,7 +104,7 @@ msgstr "Sem bordas" msgid "Per Pixel Transparency Enabled" msgstr "Transparência por pixel ativada" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Fullscreen" msgstr "Tela cheia" @@ -115,7 +116,7 @@ msgstr "Maximizado" msgid "Minimized" msgstr "Minimizado" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "Redimensionável" @@ -128,10 +129,11 @@ msgstr "Redimensionável" msgid "Position" msgstr "Posição" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -603,6 +605,43 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +#, fuzzy +msgid "Display" +msgstr "Mostrar Tudo" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +#, fuzzy +msgid "Height" +msgstr "Luz" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Width" +msgstr "Esquerda Wide" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Height" +msgstr "Em teste" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1202,7 +1241,7 @@ msgstr "Alternar esta pista on/off." msgid "Update Mode (How this property is set)" msgstr "Modo Atualização (Como esta propriedade é definida)" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "Modo de Interpolação" @@ -6086,6 +6125,11 @@ msgstr "" msgid "Flat" msgstr "Plano 0" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "Modo Colisão" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "Selecionar Nó(s) para Importar" @@ -16012,42 +16056,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -#, fuzzy -msgid "Display" -msgstr "Mostrar Tudo" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -#, fuzzy -msgid "Height" -msgstr "Luz" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -#, fuzzy -msgid "Test Width" -msgstr "Esquerda Wide" - -#: main/main.cpp -#, fuzzy -msgid "Test Height" -msgstr "Em teste" - #: main/main.cpp msgid "DPI" msgstr "" @@ -20428,6 +20436,11 @@ msgstr "" "PolÃgono inválido. São precisos pelo menos 2 pontos no modo de construção " "'Segmentos'." +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp #, fuzzy msgid "Build Mode" @@ -22271,9 +22284,10 @@ msgid "NavMesh" msgstr "Consolidar NavMesh" #: scene/3d/navigation_obstacle.cpp +#, fuzzy msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" "NavigationObstacle serve apenas para fornecer prevenção de colisão a um " "objeto espacial." @@ -24559,6 +24573,11 @@ msgstr "Modo deslocamento" #: scene/main/node.cpp #, fuzzy +msgid "Physics Interpolation Mode" +msgstr "Modo de Interpolação" + +#: scene/main/node.cpp +#, fuzzy msgid "Display Folded" msgstr "Vista sem sombras" @@ -24592,11 +24611,6 @@ msgstr "Definir Múltiplo:" msgid "Process Priority" msgstr "Ativar Prioridade" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "Modo de Interpolação" - #: scene/main/scene_tree.cpp scene/main/timer.cpp #, fuzzy msgid "Time Left" @@ -25310,6 +25324,11 @@ msgstr "Separador Nomeado" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "Operador de Cor." + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "Renomear Item Cor" @@ -26115,6 +26134,11 @@ msgstr "Modo Livre de Distrações" #: scene/resources/gradient.cpp #, fuzzy +msgid "Raw Data" +msgstr "Profundidade" + +#: scene/resources/gradient.cpp +#, fuzzy msgid "Offsets" msgstr "Compensação:" diff --git a/editor/translations/pt_BR.po b/editor/translations/pt_BR.po index ea8089b407..06f450b222 100644 --- a/editor/translations/pt_BR.po +++ b/editor/translations/pt_BR.po @@ -138,13 +138,14 @@ # Douglas S. Elias <douglassantoselias@gmail.com>, 2022. # Daniel Abrante <danielabrante@protonmail.com>, 2022. # blue wemes <bluewemes@gmail.com>, 2022. +# José Miranda Neto <dodimi95@gmail.com>, 2022. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" "POT-Creation-Date: 2016-05-30\n" -"PO-Revision-Date: 2022-05-03 07:14+0000\n" -"Last-Translator: Douglas Leão <djlsplays@gmail.com>\n" +"PO-Revision-Date: 2022-05-15 09:38+0000\n" +"Last-Translator: José Miranda Neto <dodimi95@gmail.com>\n" "Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/" "godot-engine/godot/pt_BR/>\n" "Language: pt_BR\n" @@ -152,7 +153,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.12.1\n" +"X-Generator: Weblate 4.13-dev\n" #: core/bind/core_bind.cpp main/main.cpp msgid "Tablet Driver" @@ -206,11 +207,12 @@ msgstr "Tamanho Máximo da Janela" msgid "Screen Orientation" msgstr "Orientação da Tela" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" msgstr "Janela" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "Sem Bordas" @@ -218,7 +220,7 @@ msgstr "Sem Bordas" msgid "Per Pixel Transparency Enabled" msgstr "Transparência Por Pixel Ativada" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Fullscreen" msgstr "Tela Cheia" @@ -230,7 +232,7 @@ msgstr "Maximizado" msgid "Minimized" msgstr "Minimizado" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "Redimensionável" @@ -243,10 +245,11 @@ msgstr "Redimensionável" msgid "Position" msgstr "Posição" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -513,7 +516,7 @@ msgstr "Meta" #: core/os/input_event.cpp msgid "Command" -msgstr "Command" +msgstr "Comando" #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp @@ -696,6 +699,43 @@ msgstr "Usar Diretório de Usuário Personalizado" msgid "Custom User Dir Name" msgstr "Nome do Diretório de Usuário Personalizado" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +#, fuzzy +msgid "Display" +msgstr "Exibir Tudo" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +#, fuzzy +msgid "Height" +msgstr "Luz" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Width" +msgstr "Largura Esquerda" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Height" +msgstr "Testando" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1276,7 +1316,7 @@ msgstr "Ligar/desligar esta faixa." msgid "Update Mode (How this property is set)" msgstr "Modo de Atualização (Como esta propriedade é setada)" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "Modo de Interpolação" @@ -6156,6 +6196,11 @@ msgstr "" msgid "Flat" msgstr "Plano 0" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "Modo Colisão" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "Selecione Nó(s) para Importar" @@ -16109,42 +16154,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -#, fuzzy -msgid "Display" -msgstr "Exibir Tudo" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -#, fuzzy -msgid "Height" -msgstr "Luz" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -#, fuzzy -msgid "Test Width" -msgstr "Largura Esquerda" - -#: main/main.cpp -#, fuzzy -msgid "Test Height" -msgstr "Testando" - #: main/main.cpp msgid "DPI" msgstr "" @@ -20526,6 +20535,11 @@ msgstr "" "PolÃgono inválido. Pelo menos 2 pontos são necessários no modo de construção " "\"Segmentos\"." +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp #, fuzzy msgid "Build Mode" @@ -22311,7 +22325,7 @@ msgstr "Bake NavMesh" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -24574,6 +24588,11 @@ msgstr "Modo Panorâmico" #: scene/main/node.cpp #, fuzzy +msgid "Physics Interpolation Mode" +msgstr "Modo de Interpolação" + +#: scene/main/node.cpp +#, fuzzy msgid "Display Folded" msgstr "Exibir Sem Sombreamento" @@ -24607,11 +24626,6 @@ msgstr "Definir Múltiplos:" msgid "Process Priority" msgstr "Ativar Prioridade" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "Modo de Interpolação" - #: scene/main/scene_tree.cpp scene/main/timer.cpp #, fuzzy msgid "Time Left" @@ -25325,6 +25339,11 @@ msgstr "Separador Nomeado" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "Separador de Cor da Fonte" + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "Renomear Item de Cor" @@ -26128,6 +26147,11 @@ msgstr "Modo Sem Distrações" #: scene/resources/gradient.cpp #, fuzzy +msgid "Raw Data" +msgstr "Profundidade" + +#: scene/resources/gradient.cpp +#, fuzzy msgid "Offsets" msgstr "Deslocamento:" diff --git a/editor/translations/ro.po b/editor/translations/ro.po index cce96e98c0..908a718dba 100644 --- a/editor/translations/ro.po +++ b/editor/translations/ro.po @@ -17,13 +17,14 @@ # R3ktGamerRO <bluegamermc1@gmail.com>, 2021. # FlooferLand <yunaflarf@gmail.com>, 2021, 2022. # N3mEee <n3mebusiness@gmail.com>, 2021. +# Psynt <nichita@cadvegra.com>, 2022. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2022-04-29 02:53+0000\n" -"Last-Translator: FlooferLand <yunaflarf@gmail.com>\n" +"PO-Revision-Date: 2022-05-15 09:38+0000\n" +"Last-Translator: Psynt <nichita@cadvegra.com>\n" "Language-Team: Romanian <https://hosted.weblate.org/projects/godot-engine/" "godot/ro/>\n" "Language: ro\n" @@ -32,16 +33,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " "20)) ? 1 : 2;\n" -"X-Generator: Weblate 4.12.1-dev\n" +"X-Generator: Weblate 4.13-dev\n" #: core/bind/core_bind.cpp main/main.cpp msgid "Tablet Driver" msgstr "" #: core/bind/core_bind.cpp -#, fuzzy msgid "Clipboard" -msgstr "Clipboardul este gol!" +msgstr "Clipboard" #: core/bind/core_bind.cpp msgid "Current Screen" @@ -77,47 +77,43 @@ msgid "Keep Screen On" msgstr "" #: core/bind/core_bind.cpp -#, fuzzy msgid "Min Window Size" -msgstr "Dimensiunea Conturului:" +msgstr "Dimensiune Minima" #: core/bind/core_bind.cpp -#, fuzzy msgid "Max Window Size" -msgstr "Dimensiunea Conturului:" +msgstr "Dimensiune Maxima" #: core/bind/core_bind.cpp -#, fuzzy msgid "Screen Orientation" -msgstr "Deschide Recente" +msgstr "Orientare Ecran" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp -#, fuzzy +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" -msgstr "Fereastră Nouă" +msgstr "Fereastră" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" -msgstr "" +msgstr "Fara margini" #: core/bind/core_bind.cpp msgid "Per Pixel Transparency Enabled" -msgstr "" +msgstr "Transparenta per Pixel" -#: core/bind/core_bind.cpp main/main.cpp -#, fuzzy +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Fullscreen" -msgstr "Comutare ecran complet" +msgstr "Fullscreen" #: core/bind/core_bind.cpp msgid "Maximized" -msgstr "" +msgstr "Maximizat" #: core/bind/core_bind.cpp msgid "Minimized" -msgstr "" +msgstr "Minimizat" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -127,14 +123,14 @@ msgstr "" #: scene/3d/physics_body.cpp scene/3d/remote_transform.cpp #: scene/gui/control.cpp scene/gui/line_edit.cpp #: scene/resources/default_theme/default_theme.cpp -#, fuzzy msgid "Position" -msgstr "PoziÈ›ia Dock-ului" +msgstr "PoziÈ›ie" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -144,26 +140,23 @@ msgstr "Mărimea" #: core/bind/core_bind.cpp msgid "Endian Swap" -msgstr "" +msgstr "Inversiune Endian" #: core/bind/core_bind.cpp -#, fuzzy msgid "Editor Hint" -msgstr "Editor" +msgstr "Indiciu Editor" #: core/bind/core_bind.cpp msgid "Print Error Messages" msgstr "" #: core/bind/core_bind.cpp -#, fuzzy msgid "Iterations Per Second" -msgstr "Mod Intercalare" +msgstr "Iteratii pe Secunda" #: core/bind/core_bind.cpp -#, fuzzy msgid "Target FPS" -msgstr "Suprafață Èšintă:" +msgstr "Frecvență Èšintă" #: core/bind/core_bind.cpp #, fuzzy @@ -221,9 +214,8 @@ msgstr "" #: modules/visual_script/visual_script_func_nodes.cpp #: modules/visual_script/visual_script_nodes.cpp #: scene/resources/visual_shader_nodes.cpp -#, fuzzy msgid "Function" -msgstr "FuncÈ›ii" +msgstr "FuncÈ›ie" #: core/image.cpp core/packed_data_container.cpp #: modules/minimp3/audio_stream_mp3.cpp @@ -251,7 +243,7 @@ msgstr "ȘtergeÈ›i" #: core/io/file_access_network.cpp msgid "Page Size" -msgstr "" +msgstr "Marime Pagina" #: core/io/file_access_network.cpp msgid "Page Read Ahead" @@ -262,9 +254,8 @@ msgid "Blocking Mode Enabled" msgstr "" #: core/io/http_client.cpp -#, fuzzy msgid "Connection" -msgstr "ConectaÈ›i" +msgstr "Conexie" #: core/io/http_client.cpp msgid "Read Chunk Size" @@ -272,7 +263,7 @@ msgstr "" #: core/io/marshalls.cpp msgid "Object ID" -msgstr "" +msgstr "ID Obiect" #: core/io/multiplayer_api.cpp core/io/packet_peer.cpp #, fuzzy @@ -281,7 +272,7 @@ msgstr "Activează Onion Skinning" #: core/io/multiplayer_api.cpp scene/main/scene_tree.cpp msgid "Refuse New Network Connections" -msgstr "" +msgstr "Refuza Conexiuni noi pe retea" #: core/io/multiplayer_api.cpp scene/main/scene_tree.cpp #, fuzzy @@ -289,19 +280,16 @@ msgid "Network Peer" msgstr "Analizator Network" #: core/io/multiplayer_api.cpp scene/animation/animation_player.cpp -#, fuzzy msgid "Root Node" -msgstr "RedenumeÈ™te" +msgstr "Radacina" #: core/io/networked_multiplayer_peer.cpp -#, fuzzy msgid "Refuse New Connections" -msgstr "ConectaÈ›i" +msgstr "Refuza Conexiuni noi" #: core/io/networked_multiplayer_peer.cpp -#, fuzzy msgid "Transfer Mode" -msgstr "Mod ÃŽn Jur" +msgstr "Mod Transfer" #: core/io/packet_peer.cpp msgid "Encode Buffer Max Size" @@ -618,6 +606,42 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +#, fuzzy +msgid "Display" +msgstr "AfiÈ™ează Tot" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +msgid "Height" +msgstr "" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Width" +msgstr "Stânga liniară" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Height" +msgstr "Se Testează" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1222,7 +1246,7 @@ msgstr "Comutează această pistă pornit/oprit." msgid "Update Mode (How this property is set)" msgstr "Modul Actualizare (Cum este setată această proprietate)" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "Mod Intercalare" @@ -2188,10 +2212,9 @@ msgstr "Dezvoltator Principal" #. TRANSLATORS: This refers to a job title. #: editor/editor_about.cpp -#, fuzzy msgctxt "Job Title" msgid "Project Manager" -msgstr "Manager de Proiect " +msgstr "Manager de Proiect" #: editor/editor_about.cpp msgid "Developers" @@ -3234,7 +3257,7 @@ msgstr "Clasă:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp #: editor/script_create_dialog.cpp msgid "Inherits:" -msgstr "MoÈ™teneÈ™te:" +msgstr "Mosteneste:" #: editor/editor_help.cpp msgid "Inherited by:" @@ -6107,6 +6130,11 @@ msgstr "" msgid "Flat" msgstr "Plat0" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "Nod de AnimaÈ›ie" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "Selectează Nodul(rile) pentru Importare" @@ -14509,10 +14537,9 @@ msgstr "" #. TRANSLATORS: This refers to the application where users manage their Godot projects. #: editor/project_manager.cpp -#, fuzzy msgctxt "Application" msgid "Project Manager" -msgstr "Manager de Proiect " +msgstr "Manager de Proiect" #: editor/project_manager.cpp #, fuzzy @@ -16222,41 +16249,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -#, fuzzy -msgid "Display" -msgstr "AfiÈ™ează Tot" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -msgid "Height" -msgstr "" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -#, fuzzy -msgid "Test Width" -msgstr "Stânga liniară" - -#: main/main.cpp -#, fuzzy -msgid "Test Height" -msgstr "Se Testează" - #: main/main.cpp msgid "DPI" msgstr "" @@ -20598,6 +20590,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp #, fuzzy msgid "Build Mode" @@ -20730,9 +20727,8 @@ msgstr "Mască de Emisie" #: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp #: scene/resources/particles_material.cpp -#, fuzzy msgid "Sphere Radius" -msgstr "Sursă de Emisie: " +msgstr "Sursă de Emisie:" #: scene/2d/cpu_particles_2d.cpp msgid "Rect Extents" @@ -22343,7 +22339,7 @@ msgstr "Mesh" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -24532,6 +24528,11 @@ msgstr "Mod ÃŽn Jur" #: scene/main/node.cpp #, fuzzy +msgid "Physics Interpolation Mode" +msgstr "Mod Intercalare" + +#: scene/main/node.cpp +#, fuzzy msgid "Display Folded" msgstr "AfiÈ™ează Tot" @@ -24565,11 +24566,6 @@ msgstr "Seteaza Multiple:" msgid "Process Priority" msgstr "Editează Filtrele" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "Mod Intercalare" - #: scene/main/scene_tree.cpp scene/main/timer.cpp #, fuzzy msgid "Time Left" @@ -25256,6 +25252,11 @@ msgstr "" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "Enumerări:" + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "RedenumiÅ£i Autoload" @@ -25945,9 +25946,8 @@ msgid "Distance" msgstr "Instanță" #: scene/resources/environment.cpp -#, fuzzy msgid "Transition" -msgstr "TranziÈ›ie: " +msgstr "TranziÈ›ie:" #: scene/resources/environment.cpp msgid "DOF Near Blur" @@ -26055,6 +26055,11 @@ msgstr "Modul Fără Distrageri" #: scene/resources/gradient.cpp #, fuzzy +msgid "Raw Data" +msgstr "Adâncime" + +#: scene/resources/gradient.cpp +#, fuzzy msgid "Offsets" msgstr "Compensare Grilă:" @@ -26232,9 +26237,8 @@ msgid "Metallic Specular" msgstr "" #: scene/resources/material.cpp -#, fuzzy msgid "Metallic Texture" -msgstr "Sursă de Emisie: " +msgstr "Textura Metalica" #: scene/resources/material.cpp msgid "Metallic Texture Channel" @@ -26270,9 +26274,8 @@ msgid "Emission On UV2" msgstr "Mască de Emisie" #: scene/resources/material.cpp -#, fuzzy msgid "Emission Texture" -msgstr "Sursă de Emisie: " +msgstr "Textura Emisiei" #: scene/resources/material.cpp msgid "NormalMap" @@ -26356,14 +26359,12 @@ msgid "Subsurf Scatter" msgstr "" #: scene/resources/material.cpp -#, fuzzy msgid "Transmission" -msgstr "TranziÈ›ie: " +msgstr "Transmisie" #: scene/resources/material.cpp -#, fuzzy msgid "Transmission Texture" -msgstr "TranziÈ›ie: " +msgstr "Textura Transmisie" #: scene/resources/material.cpp #, fuzzy @@ -26579,9 +26580,8 @@ msgid "Point Texture" msgstr "Puncte de Emisie:" #: scene/resources/particles_material.cpp -#, fuzzy msgid "Normal Texture" -msgstr "Sursă de Emisie: " +msgstr "Textura Normala" #: scene/resources/particles_material.cpp #, fuzzy diff --git a/editor/translations/ru.po b/editor/translations/ru.po index 457ae88277..66d8befc49 100644 --- a/editor/translations/ru.po +++ b/editor/translations/ru.po @@ -111,12 +111,13 @@ # Rish Alternative <ii4526668@gmail.com>, 2022. # MRSEEO <mr.seeo@mail.ru>, 2022. # Ortje <pappinenart@gmail.com>, 2022. +# Павел <Humani.apparatus.1960@gmail.com>, 2022. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2022-05-05 10:10+0000\n" +"PO-Revision-Date: 2022-05-17 21:38+0000\n" "Last-Translator: MRSEEO <mr.seeo@mail.ru>\n" "Language-Team: Russian <https://hosted.weblate.org/projects/godot-engine/" "godot/ru/>\n" @@ -126,7 +127,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\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.12.1\n" +"X-Generator: Weblate 4.13-dev\n" #: core/bind/core_bind.cpp main/main.cpp msgid "Tablet Driver" @@ -180,11 +181,12 @@ msgstr "МакÑимальный размер окна" msgid "Screen Orientation" msgstr "ÐžÑ€Ð¸ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ñкрана" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" msgstr "Окно" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "Без границ" @@ -192,7 +194,7 @@ msgstr "Без границ" msgid "Per Pixel Transparency Enabled" msgstr "ПопикÑÐµÐ»ÑŒÐ½Ð°Ñ Ð¿Ñ€Ð¾Ð·Ñ€Ð°Ñ‡Ð½Ð¾Ñть включена" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Fullscreen" msgstr "ПолноÑкранный режим" @@ -204,7 +206,7 @@ msgstr "МакÑимизировано" msgid "Minimized" msgstr "Свёрнуто" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "ИзменÑемый размер" @@ -217,10 +219,11 @@ msgstr "ИзменÑемый размер" msgid "Position" msgstr "ПозициÑ" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -673,6 +676,39 @@ msgstr "ИÑпользовать ÑобÑтвенную директорию дРmsgid "Custom User Dir Name" msgstr "Ð˜Ð¼Ñ ÑобÑтвенной директории данных пользователÑ" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +msgid "Display" +msgstr "ДиÑплей" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "Ширина" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +msgid "Height" +msgstr "Ð’Ñ‹Ñота" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "Ð’Ñегда Ñверху" + +#: core/project_settings.cpp +msgid "Test Width" +msgstr "ТеÑÑ‚Ð¾Ð²Ð°Ñ ÑˆÐ¸Ñ€Ð¸Ð½Ð°" + +#: core/project_settings.cpp +msgid "Test Height" +msgstr "ТеÑÑ‚Ð¾Ð²Ð°Ñ Ð²Ñ‹Ñота" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -879,7 +915,7 @@ msgstr "Размер журнала окна" #: core/project_settings.cpp msgid "Zlib" -msgstr "Zlib" +msgstr "Зlib" #: core/project_settings.cpp msgid "Gzip" @@ -1250,7 +1286,7 @@ msgstr "Включить/выключить Ñтот трек." msgid "Update Mode (How this property is set)" msgstr "Режим Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ (как Ñто ÑвойÑтво уÑтанавливаетÑÑ)" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "Режим интерполÑции" @@ -2754,24 +2790,23 @@ msgstr "Формат текÑтур" #: editor/editor_export.cpp msgid "BPTC" -msgstr "" +msgstr "BPTC" #: editor/editor_export.cpp platform/osx/export/export.cpp msgid "S3TC" -msgstr "" +msgstr "S3TC" #: editor/editor_export.cpp platform/osx/export/export.cpp msgid "ETC" -msgstr "" +msgstr "ETC" #: editor/editor_export.cpp platform/osx/export/export.cpp msgid "ETC2" -msgstr "" +msgstr "ETC2" #: editor/editor_export.cpp -#, fuzzy msgid "No BPTC Fallbacks" -msgstr "ЗапаÑной вариант" +msgstr "ЗапаÑной вариант BPTC" #: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp @@ -6010,6 +6045,11 @@ msgstr "" msgid "Flat" msgstr "ПлоÑкаÑ" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "Коллайдер" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "Выберите узлы Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð°" @@ -6681,16 +6721,15 @@ msgstr "Управление группами" #: editor/import/editor_import_collada.cpp msgid "Collada" -msgstr "Collada" +msgstr "ColladA" #: editor/import/editor_import_collada.cpp msgid "Use Ambient" msgstr "ИÑпользовать Ambient" #: editor/import/resource_importer_bitmask.cpp -#, fuzzy msgid "Create From" -msgstr "Создать из" +msgstr "Сотворить из" #: editor/import/resource_importer_bitmask.cpp #: servers/audio/effects/audio_effect_compressor.cpp @@ -6710,9 +6749,8 @@ msgid "Delimiter" msgstr "Разделитель" #: editor/import/resource_importer_layered_texture.cpp -#, fuzzy msgid "ColorCorrect" -msgstr "Ð¦Ð²ÐµÑ‚Ð¾Ð²Ð°Ñ ÐºÐ¾Ñ€Ñ€ÐµÐºÑ†Ð¸Ñ" +msgstr "ЦветокоррекциÑ" #: editor/import/resource_importer_layered_texture.cpp msgid "No BPTC If RGB" @@ -6751,52 +6789,46 @@ msgstr "Ðнизотропный" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp msgid "sRGB" -msgstr "" +msgstr "sRGÐ’" #: editor/import/resource_importer_layered_texture.cpp -#, fuzzy msgid "Slices" -msgstr "ÐвтоматичеÑки" +msgstr "Ðарезчик" #: editor/import/resource_importer_layered_texture.cpp #: scene/gui/aspect_ratio_container.cpp scene/gui/control.cpp #: scene/gui/nine_patch_rect.cpp scene/gui/scroll_container.cpp #: scene/resources/style_box.cpp msgid "Horizontal" -msgstr "Горизонтальный" +msgstr "Горизонталь" #: editor/import/resource_importer_layered_texture.cpp #: scene/gui/aspect_ratio_container.cpp scene/gui/control.cpp #: scene/gui/nine_patch_rect.cpp scene/gui/scroll_container.cpp #: scene/resources/style_box.cpp msgid "Vertical" -msgstr "Вертикальный" +msgstr "Вертикаль" #: editor/import/resource_importer_obj.cpp -#, fuzzy msgid "Generate Tangents" -msgstr "Генерировать точки" +msgstr "Ð“ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ ÐºÐ°Ñательной" #: editor/import/resource_importer_obj.cpp -#, fuzzy msgid "Scale Mesh" -msgstr "Режим маÑштабированиÑ" +msgstr "МаÑштаб Ñетки" #: editor/import/resource_importer_obj.cpp -#, fuzzy msgid "Offset Mesh" -msgstr "ОтÑтупы" +msgstr "Смещение Ñетки" #: editor/import/resource_importer_obj.cpp #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Octahedral Compression" -msgstr "Сжатие" +msgstr "ОктаÑдральный Ñжатие" #: editor/import/resource_importer_obj.cpp -#, fuzzy msgid "Optimize Mesh Flags" -msgstr "Флаги размера" +msgstr "Ðаилучший флаг Ñетки" #: editor/import/resource_importer_scene.cpp msgid "Import as Single Scene" @@ -6844,24 +6876,20 @@ msgid "Nodes" msgstr "Узлы" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Root Type" -msgstr "Тип возвращаемого значениÑ" +msgstr "Тип ветви" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Root Name" -msgstr "Ðазвание внешнего репозиториÑ" +msgstr "Ð˜Ð¼Ñ Ð²ÐµÑ‚Ð²Ð¸" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Root Scale" -msgstr "МаÑштабировать" +msgstr "РаÑширение ветки" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Custom Script" -msgstr "ПользовательÑкий узел" +msgstr "ПользовательÑкий Скрипт" #: editor/import/resource_importer_scene.cpp scene/resources/texture.cpp msgid "Storage" @@ -6876,64 +6904,54 @@ msgid "Materials" msgstr "Материалы" #: editor/import/resource_importer_scene.cpp platform/osx/export/export.cpp -#, fuzzy msgid "Location" -msgstr "ЛокализациÑ" +msgstr "РаÑположение" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Keep On Reimport" -msgstr "Переимпортировать" +msgstr "Продолжить переÑылку" #: editor/import/resource_importer_scene.cpp modules/gltf/gltf_state.cpp msgid "Meshes" -msgstr "Меши" +msgstr "Сетка" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Ensure Tangents" -msgstr "ВычиÑлить каÑательные" +msgstr "Проверить ÑоприкоÑновение" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Light Baking" -msgstr "Карты оÑвещениÑ" +msgstr "запекание Ñвета" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Lightmap Texel Size" -msgstr "Запекание LightMap" +msgstr "Запекание Lightmap" #: editor/import/resource_importer_scene.cpp modules/gltf/gltf_state.cpp msgid "Skins" -msgstr "Скины" +msgstr "Обложки" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Use Named Skins" -msgstr "ИÑпользовать привÑзку маÑштабированиÑ" +msgstr "ИÑпользование заданной обложки" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "External Files" -msgstr "Внешний" +msgstr "ВнеÑение файлов" #: editor/import/resource_importer_scene.cpp msgid "Store In Subdir" msgstr "Хранить в поддиректории" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Filter Script" -msgstr "Фильтр Ñкриптов" +msgstr "Фильтр Ñценариев" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Keep Custom Tracks" -msgstr "Преобразование" +msgstr "ИÑпользовать пользовательÑкие дорожки" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Optimizer" msgstr "Оптимизировать" @@ -6960,19 +6978,16 @@ msgid "Max Angular Error" msgstr "МакÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ ÑƒÐ³Ð»Ð¾Ð²Ð°Ñ Ð¿Ð¾Ð³Ñ€ÐµÑˆÐ½Ð¾Ñть" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Max Angle" -msgstr "Угол" +msgstr "МакÑимальный Угол" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Remove Unused Tracks" -msgstr "Удалить дорожку" +msgstr "Удалить неиÑпользуемые дорожки" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Clips" -msgstr "Ðнимационные клипы" +msgstr "Клипы" #: editor/import/resource_importer_scene.cpp scene/2d/cpu_particles_2d.cpp #: scene/2d/particles_2d.cpp scene/3d/area.cpp scene/3d/cpu_particles.cpp @@ -7022,27 +7037,24 @@ msgid "Saving..." msgstr "Сохранение..." #: editor/import/resource_importer_texture.cpp -#, fuzzy msgid "2D, Detect 3D" -msgstr "Обнаружить 3D" +msgstr "2D, Обнаружение 3D" #: editor/import/resource_importer_texture.cpp -#, fuzzy msgid "2D Pixel" -msgstr "Залитые пикÑели" +msgstr "2D пикÑели" #: editor/import/resource_importer_texture.cpp scene/resources/texture.cpp msgid "Lossy Quality" msgstr "КачеÑтво Ñ Ð¿Ð¾Ñ‚ÐµÑ€Ñми" #: editor/import/resource_importer_texture.cpp -#, fuzzy msgid "HDR Mode" -msgstr "Режим выделениÑ" +msgstr "Режим HDR" #: editor/import/resource_importer_texture.cpp msgid "BPTC LDR" -msgstr "" +msgstr "BPTC LDR" #: editor/import/resource_importer_texture.cpp scene/2d/cpu_particles_2d.cpp #: scene/2d/mesh_instance_2d.cpp scene/2d/multimesh_instance_2d.cpp @@ -7051,32 +7063,28 @@ msgid "Normal Map" msgstr "Карта нормалей" #: editor/import/resource_importer_texture.cpp -#, fuzzy msgid "Process" -msgstr "Предобработка" +msgstr "ПроцеÑÑ" #: editor/import/resource_importer_texture.cpp msgid "Fix Alpha Border" msgstr "ИÑправить альфа-границу" #: editor/import/resource_importer_texture.cpp -#, fuzzy msgid "Premult Alpha" -msgstr "Редактировать полигон" +msgstr "ПредшеÑÑ‚Ð²ÑƒÑŽÑ‰Ð°Ñ Ðльфа" #: editor/import/resource_importer_texture.cpp msgid "Hdr As Srgb" msgstr "Hdr как Srgb" #: editor/import/resource_importer_texture.cpp -#, fuzzy msgid "Invert Color" -msgstr "Вершины" +msgstr "Обращенный цвет" #: editor/import/resource_importer_texture.cpp -#, fuzzy msgid "Normal Map Invert Y" -msgstr "Карта нормалей" +msgstr "ИнвеÑтирование карты нормалей по Y" #: editor/import/resource_importer_texture.cpp #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp @@ -7085,18 +7093,16 @@ msgid "Stream" msgstr "Поток" #: editor/import/resource_importer_texture.cpp -#, fuzzy msgid "Size Limit" -msgstr "Лимит" +msgstr "Размер лимита" #: editor/import/resource_importer_texture.cpp msgid "Detect 3D" msgstr "Обнаружить 3D" #: editor/import/resource_importer_texture.cpp -#, fuzzy msgid "SVG" -msgstr "CSG" +msgstr "SVG" #: editor/import/resource_importer_texture.cpp msgid "" @@ -7104,21 +7110,19 @@ msgid "" "texture will not display correctly on PC." msgstr "" "Внимание, в ÐаÑтройках проекта не включено подходÑщее Ñжатие видеопамÑти Ð´Ð»Ñ " -"ПК. Ðта текÑтура не будет корректно отображатьÑÑ Ð½Ð° ПК." +"ПК. Ðта текÑтура не будет корректно отображатьÑÑ." #: editor/import/resource_importer_texture_atlas.cpp -#, fuzzy msgid "Atlas File" -msgstr "Размер атлаÑа" +msgstr "Файл атлаÑа" #: editor/import/resource_importer_texture_atlas.cpp msgid "Import Mode" -msgstr "Режим импорта" +msgstr "Режим импортированиÑ" #: editor/import/resource_importer_texture_atlas.cpp -#, fuzzy msgid "Crop To Region" -msgstr "Задать облаÑть тайла" +msgstr "Обрезать краÑ" #: editor/import/resource_importer_texture_atlas.cpp msgid "Trim Alpha Border From Region" @@ -7138,41 +7142,35 @@ msgid "Mono" msgstr "Моно" #: editor/import/resource_importer_wav.cpp -#, fuzzy msgid "Max Rate" -msgstr "Mix узел" +msgstr "макÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ñ‡Ð°Ñтота" #: editor/import/resource_importer_wav.cpp -#, fuzzy msgid "Max Rate Hz" -msgstr "Mix узел" +msgstr "МакÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ñ‡Ð°Ñтота Hz" #: editor/import/resource_importer_wav.cpp msgid "Trim" msgstr "Обрезать" #: editor/import/resource_importer_wav.cpp -#, fuzzy msgid "Normalize" -msgstr "Ðормализованный" +msgstr "ÐормализациÑ" #: editor/import/resource_importer_wav.cpp #: scene/resources/audio_stream_sample.cpp -#, fuzzy msgid "Loop Mode" -msgstr "Режим перемещениÑ" +msgstr "Режим цикла" #: editor/import/resource_importer_wav.cpp #: scene/resources/audio_stream_sample.cpp -#, fuzzy msgid "Loop Begin" -msgstr "Режим перемещениÑ" +msgstr "Ðачало цикла" #: editor/import/resource_importer_wav.cpp #: scene/resources/audio_stream_sample.cpp -#, fuzzy msgid "Loop End" -msgstr "Режим перемещениÑ" +msgstr "Конец цикла" #: editor/import_defaults_editor.cpp msgid "Select Importer" @@ -7259,22 +7257,20 @@ msgid "Raw" msgstr "Без обработки" #: editor/inspector_dock.cpp -#, fuzzy msgid "Capitalized" -msgstr "С Заглавных Букв" +msgstr "Капитализированный" #: editor/inspector_dock.cpp -#, fuzzy msgid "Localized" -msgstr "Локаль" +msgstr "ЛокализациÑ" #: editor/inspector_dock.cpp msgid "Localization not available for current language." -msgstr "Ð›Ð¾ÐºÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½ÐµÐ´Ð¾Ñтупна Ð´Ð»Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ Ñзыка." +msgstr "Ð›Ð¾ÐºÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½ÐµÐ´Ð¾Ñтупна Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ Ñзыка." #: editor/inspector_dock.cpp msgid "Copy Properties" -msgstr "Копировать ÑвойÑтва" +msgstr "Копировать характериÑтики" #: editor/inspector_dock.cpp msgid "Paste Properties" @@ -7811,9 +7807,8 @@ msgid "New" msgstr "Ðовый" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Paste As Reference" -msgstr "Справка по клаÑÑу %s" +msgstr "Ð’Ñтавить ÑÑылку" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Edit Transitions..." @@ -8311,28 +8306,24 @@ msgid "Loading..." msgstr "Загрузка..." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgctxt "Pagination" msgid "First" -msgstr "ПерваÑ" +msgstr "ÐачальнаÑ" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgctxt "Pagination" msgid "Previous" -msgstr "ПредыдущаÑ" +msgstr "ПредшеÑтвующаÑ" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgctxt "Pagination" msgid "Next" -msgstr "СледующаÑ" +msgstr "ПоÑледующаÑ" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgctxt "Pagination" msgid "Last" -msgstr "ПоÑледнÑÑ" +msgstr "крайнÑÑ" #: editor/plugins/asset_library_editor_plugin.cpp msgid "All" @@ -8380,15 +8371,15 @@ msgstr "ТеÑтируемые" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Failed to get repository configuration." -msgstr "" +msgstr "Ðе удалоÑÑŒ получить конфигурацию репозиториÑ." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Assets ZIP File" -msgstr "ZIP файл аÑÑетов" +msgstr "ZIP файл набора" #: editor/plugins/audio_stream_editor_plugin.cpp msgid "Audio Preview Play/Pause" -msgstr "Ðудио превью Старт/Пауза" +msgstr "Ðудио пред проÑлушивание Старт/Пауза" #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "" @@ -9309,9 +9300,8 @@ msgid "Swap Gradient Fill Points" msgstr "ПоменÑть меÑтами точки градиентной заливки" #: editor/plugins/gradient_texture_2d_editor_plugin.cpp -#, fuzzy msgid "Toggle Grid Snap" -msgstr "Переключить Ñетку" +msgstr "Переключить привÑзки Ñетки" #: editor/plugins/item_list_editor_plugin.cpp msgid "Item %d" @@ -9547,9 +9537,8 @@ msgstr "" "%s" #: editor/plugins/mesh_library_editor_plugin.cpp -#, fuzzy msgid "MeshLibrary" -msgstr "Библиотека полиÑеток" +msgstr "Библиотека Ñеток" #: editor/plugins/mesh_library_editor_plugin.cpp msgid "Add Item" @@ -10103,7 +10092,7 @@ msgstr "Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ ÐºÐ¾Ñтей Ñ Ð¿Ð¾Ð»Ð¸Ð³Ð¾Ð½Ð¾Ð¼" #: editor/plugins/ray_cast_2d_editor_plugin.cpp msgid "Set cast_to" -msgstr "" +msgstr "Задать cast_to" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "ERROR: Couldn't load resource!" @@ -11774,9 +11763,8 @@ msgstr "" "Ð’ÑÑ‘ равно закрыть?" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove Type" -msgstr "Удалить тайл" +msgstr "Удалить тип" #: editor/plugins/theme_editor_plugin.cpp msgid "" @@ -11820,14 +11808,12 @@ msgstr "" "Добавьте в него Ñлементы вручную или импортировав из другой темы." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Theme Type" -msgstr "Добавить тип Ñлемента" +msgstr "Добавить тип Темы" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove Theme Type" -msgstr "Удалить внешний репозиторий" +msgstr "Удалить тип Темы" #: editor/plugins/theme_editor_plugin.cpp msgid "Add Color Item" @@ -12282,9 +12268,8 @@ msgid "Palette Min Width" msgstr "ÐœÐ¸Ð½Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ ÑˆÐ¸Ñ€Ð¸Ð½Ð° палитры" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Palette Item H Separation" -msgstr "Горизонтальное разделение Ñлементов палитры" +msgstr "Разделение Ñлементов в палитре H" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Show Tile Names" @@ -14052,7 +14037,7 @@ msgstr "ОтриÑовщик:" #: editor/project_manager.cpp msgid "OpenGL ES 3.0" -msgstr "OpenGL ES 3.0" +msgstr "ОткрытыйGL ES 3.0" #: editor/project_manager.cpp msgid "Not supported by your GPU drivers." @@ -14072,7 +14057,7 @@ msgstr "" #: editor/project_manager.cpp msgid "OpenGL ES 2.0" -msgstr "OpenGL ES 2.0" +msgstr "ОткрытыйGL ES 2.0" #: editor/project_manager.cpp msgid "" @@ -15032,17 +15017,15 @@ msgstr "Сделать локальным" #: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp msgid "Another node already uses this unique name in the scene." -msgstr "" +msgstr "Ð˜Ð¼Ñ ÑƒÐ·Ð»Ð° уже иÑпользовано в Ñцене" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Enable Scene Unique Name" -msgstr "Уникальные имена" +msgstr "Добавить уникальное Ð¸Ð¼Ñ Ñцене" #: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -#, fuzzy msgid "Disable Scene Unique Name" -msgstr "Уникальные имена" +msgstr "Убрать уникальное Ð¸Ð¼Ñ Ð² Ñцене" #: editor/scene_tree_dock.cpp msgid "New Scene Root" @@ -15118,7 +15101,7 @@ msgstr "Вложенные реÑурÑÑ‹" #: editor/scene_tree_dock.cpp msgid "Access as Scene Unique Name" -msgstr "" +msgstr "ДоÑтуп к уникальному имени Ñцены" #: editor/scene_tree_dock.cpp msgid "Clear Inheritance" @@ -15259,6 +15242,8 @@ msgid "" "with the '%s' prefix in a node path.\n" "Click to disable this." msgstr "" +"ДоÑтуп к узлу можно получить из любой точки Ñцены, предшеÑтвовав ему Ñ " +"префикÑом «%s» на пути узла. Ðажмите, чтобы отключить" #: editor/scene_tree_editor.cpp msgid "" @@ -15917,38 +15902,6 @@ msgstr "Откат к GLES2" msgid "Use Nvidia Rect Flicker Workaround" msgstr "Обходить проблему Nvidia Rect Flicker" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -msgid "Display" -msgstr "ДиÑплей" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "Ширина" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -msgid "Height" -msgstr "Ð’Ñ‹Ñота" - -#: main/main.cpp -msgid "Always On Top" -msgstr "Ð’Ñегда Ñверху" - -#: main/main.cpp -msgid "Test Width" -msgstr "ТеÑÑ‚Ð¾Ð²Ð°Ñ ÑˆÐ¸Ñ€Ð¸Ð½Ð°" - -#: main/main.cpp -msgid "Test Height" -msgstr "ТеÑÑ‚Ð¾Ð²Ð°Ñ Ð²Ñ‹Ñота" - #: main/main.cpp msgid "DPI" msgstr "DPI" @@ -16031,7 +15984,7 @@ msgstr "GUI" #: main/main.cpp msgid "Drop Mouse On GUI Input Disabled" -msgstr "" +msgstr "Отключение курÑора мыши в интерфейÑе" #: main/main.cpp msgid "stdout" @@ -16046,19 +15999,16 @@ msgid "Verbose stdout" msgstr "Подробный Ñтандартный вывод" #: main/main.cpp scene/main/scene_tree.cpp scene/resources/multimesh.cpp -#, fuzzy msgid "Physics Interpolation" -msgstr "Режим интерполÑции" +msgstr "физичеÑÐºÐ°Ñ Ð¸Ð½Ñ‚ÐµÑ€Ð¿Ð¾Ð»Ñции" #: main/main.cpp -#, fuzzy msgid "Enable Warnings" -msgstr "Включить фильтрацию" +msgstr "Включить предупреждениÑ" #: main/main.cpp -#, fuzzy msgid "Frame Delay Msec" -msgstr "Задержка кадра (мÑ)" +msgstr "Задержка кадра в МÑ" #: main/main.cpp msgid "Low Processor Mode" @@ -16352,9 +16302,8 @@ msgid "Path Node" msgstr "Узел пути" #: modules/csg/csg_shape.cpp -#, fuzzy msgid "Path Interval Type" -msgstr "Создать внутреннюю вершину" +msgstr "Путь типа интервала" #: modules/csg/csg_shape.cpp msgid "Path Interval" @@ -16369,14 +16318,12 @@ msgid "Path Rotation" msgstr "Вращение пути" #: modules/csg/csg_shape.cpp -#, fuzzy msgid "Path Local" -msgstr "Сделать локальным" +msgstr "Дополнить локально" #: modules/csg/csg_shape.cpp -#, fuzzy msgid "Path Continuous U" -msgstr "ÐепрерывнаÑ" +msgstr "Продолжать дополнть U" #: modules/csg/csg_shape.cpp msgid "Path U Distance" @@ -16403,19 +16350,16 @@ msgid "Always Ordered" msgstr "Ð’Ñегда по порÑдку" #: modules/enet/networked_multiplayer_enet.cpp -#, fuzzy msgid "Server Relay" -msgstr "Релей Ñервера" +msgstr "Переключение Ñервера" #: modules/enet/networked_multiplayer_enet.cpp -#, fuzzy msgid "DTLS Verify" -msgstr "Проверка DTLS" +msgstr "Уточнение DTLS" #: modules/enet/networked_multiplayer_enet.cpp -#, fuzzy msgid "DTLS Hostname" -msgstr "Ð˜Ð¼Ñ Ñ…Ð¾Ñта DTLS" +msgstr "ХоÑÑ‚ Ð¸Ð¼Ñ DTLS" #: modules/enet/networked_multiplayer_enet.cpp msgid "Use DTLS" @@ -16423,12 +16367,11 @@ msgstr "ИÑпользовать DTLS" #: modules/fbx/editor_scene_importer_fbx.cpp msgid "FBX" -msgstr "" +msgstr "ФБХ" #: modules/fbx/editor_scene_importer_fbx.cpp -#, fuzzy msgid "Use FBX" -msgstr "ИÑпользовать FXAA" +msgstr "ИÑпользовать FBX" #: modules/gdnative/gdnative.cpp msgid "Config File" @@ -16519,12 +16462,12 @@ msgstr "Путь иконки" #: modules/gdnative/register_types.cpp msgid "GDNative" -msgstr "" +msgstr "GDNative Базовый" #: modules/gdscript/editor/gdscript_highlighter.cpp #: modules/gdscript/gdscript.cpp msgid "GDScript" -msgstr "" +msgstr "GDScript код" #: modules/gdscript/editor/gdscript_highlighter.cpp msgid "Function Definition Color" @@ -16535,9 +16478,8 @@ msgid "Node Path Color" msgstr "Цвет пути узла" #: modules/gdscript/gdscript.cpp modules/visual_script/visual_script.cpp -#, fuzzy msgid "Max Call Stack" -msgstr "МакÑимальный Ñтек вызовов" +msgstr "МакÑимальное чиÑто вызовов" #: modules/gdscript/gdscript.cpp msgid "Treat Warnings As Errors" @@ -16597,9 +16539,8 @@ msgid "Enable Smart Resolve" msgstr "Включить интеллектуальное разрешение" #: modules/gdscript/language_server/gdscript_language_server.cpp -#, fuzzy msgid "Show Native Symbols In Editor" -msgstr "Показывать нативные Ñимволы в редакторе" +msgstr "Показать базовые Ñимволы в редакторе" #: modules/gdscript/language_server/gdscript_language_server.cpp msgid "Use Thread" @@ -16618,9 +16559,8 @@ msgid "Buffer View" msgstr "ПроÑмотр буфера" #: modules/gltf/gltf_accessor.cpp modules/gltf/gltf_buffer_view.cpp -#, fuzzy msgid "Byte Offset" -msgstr "Смещение байтов" +msgstr "Смещение байта" #: modules/gltf/gltf_accessor.cpp msgid "Component Type" @@ -16643,17 +16583,16 @@ msgid "Max" msgstr "МакÑимум" #: modules/gltf/gltf_accessor.cpp -#, fuzzy msgid "Sparse Count" -msgstr "Добавить ÑкземплÑÑ€" +msgstr "разделенный подÑчет" #: modules/gltf/gltf_accessor.cpp msgid "Sparse Indices Buffer View" -msgstr "" +msgstr "ПоÑмотреть переÑчет буфера" #: modules/gltf/gltf_accessor.cpp msgid "Sparse Indices Byte Offset" -msgstr "" +msgstr "ПоÑмотреть переÑчет Ð¸Ð½Ð´ÐµÐºÑ Ð±Ð°Ð¹Ñ‚Ð°" #: modules/gltf/gltf_accessor.cpp #, fuzzy @@ -16678,25 +16617,23 @@ msgstr "Длина байта" #: modules/gltf/gltf_buffer_view.cpp msgid "Byte Stride" -msgstr "" +msgstr "Шаг байта" #: modules/gltf/gltf_buffer_view.cpp msgid "Indices" msgstr "ИндекÑÑ‹" #: modules/gltf/gltf_camera.cpp -#, fuzzy msgid "FOV Size" -msgstr "Размер FOV" +msgstr "ОблаÑть Ð¿Ð¾Ð»Ñ Ð·Ñ€ÐµÐ½Ð¸Ñ" #: modules/gltf/gltf_camera.cpp msgid "Zfar" -msgstr "" +msgstr "Отдаление по Z" #: modules/gltf/gltf_camera.cpp -#, fuzzy msgid "Znear" -msgstr "Линейный" +msgstr "приближение по Z" #: modules/gltf/gltf_light.cpp scene/2d/canvas_modulate.cpp #: scene/2d/cpu_particles_2d.cpp scene/2d/light_2d.cpp scene/2d/polygon_2d.cpp @@ -20221,6 +20158,11 @@ msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" "ÐедопуÑтимый полигон. Ð’ режиме «Segments» необходимо по крайней мере 2 точки." +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp #, fuzzy msgid "Build Mode" @@ -22018,9 +21960,10 @@ msgid "NavMesh" msgstr "Запечь NavMesh" #: scene/3d/navigation_obstacle.cpp +#, fuzzy msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" "NavigationObstacle Ñлужит только Ð´Ð»Ñ Ð¿Ñ€ÐµÐ´Ð¾Ñ‚Ð²Ñ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ñтолкновений Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð¾Ð¼ " "Spatial." @@ -24272,6 +24215,11 @@ msgstr "Режим оÑмотра" #: scene/main/node.cpp #, fuzzy +msgid "Physics Interpolation Mode" +msgstr "физичеÑÐºÐ°Ñ Ð¸Ð½Ñ‚ÐµÑ€Ð¿Ð¾Ð»Ñции" + +#: scene/main/node.cpp +#, fuzzy msgid "Display Folded" msgstr "Режим без теней" @@ -24304,11 +24252,6 @@ msgstr "ПользовательÑкий мультиплеер" msgid "Process Priority" msgstr "Включить приоритет" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "Режим интерполÑции" - #: scene/main/scene_tree.cpp scene/main/timer.cpp #, fuzzy msgid "Time Left" @@ -25007,6 +24950,11 @@ msgstr "Именованный разделитель" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "Разделитель цветов шрифта" + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "Цвет коÑти 1" @@ -25802,6 +25750,11 @@ msgstr "Режим без отвлечениÑ" #: scene/resources/gradient.cpp #, fuzzy +msgid "Raw Data" +msgstr "Данные карты" + +#: scene/resources/gradient.cpp +#, fuzzy msgid "Offsets" msgstr "ОтÑтупы" @@ -27198,7 +27151,7 @@ msgstr "Режим интерполÑции" #: servers/visual_server.cpp msgid "OpenGL" -msgstr "" +msgstr "ОткрытыйGL" #: servers/visual_server.cpp msgid "Batching Send Null" @@ -27218,9 +27171,8 @@ msgid "Legacy Stream" msgstr "" #: servers/visual_server.cpp -#, fuzzy msgid "Batching" -msgstr "Пакетирование" +msgstr "Сборка пакета" #: servers/visual_server.cpp msgid "Use Batching" @@ -27264,13 +27216,12 @@ msgid "Flash Batching" msgstr "" #: servers/visual_server.cpp -#, fuzzy msgid "Diagnose Frame" -msgstr "Ð’Ñтавить кадр" +msgstr "ДиагноÑтика кадров" #: servers/visual_server.cpp msgid "GLES2" -msgstr "" +msgstr "GLES2" #: servers/visual_server.cpp msgid "Compatibility" diff --git a/editor/translations/si.po b/editor/translations/si.po index d2bfe44473..5738f29eb9 100644 --- a/editor/translations/si.po +++ b/editor/translations/si.po @@ -73,11 +73,12 @@ msgstr "" msgid "Screen Orientation" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "" @@ -85,7 +86,7 @@ msgstr "" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Fullscreen" msgstr "" @@ -97,7 +98,7 @@ msgstr "" msgid "Minimized" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -111,10 +112,11 @@ msgstr "" msgid "Position" msgstr "à·à·Šâ€à¶»à·’à¶:" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -575,6 +577,40 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +msgid "Display" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +msgid "Height" +msgstr "" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Width" +msgstr "රේඛීය" + +#: core/project_settings.cpp +msgid "Test Height" +msgstr "" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1163,7 +1199,7 @@ msgstr "ලුහුබදින්න෠සක්â€à¶»à·’ය/à¶…à¶šà·Šâ€à¶»à msgid "Update Mode (How this property is set)" msgstr "මà·à¶¯à·’ලිය යà·à·€à¶à·Š කරන්න (මෙම ගුණà·à¶‚ගය සකස෠ඇà¶à·Šà¶à·š කෙසේද)" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "නිවේà·à¶± මà·à¶¯à·’ලිය" @@ -5784,6 +5820,11 @@ msgstr "" msgid "Flat" msgstr "" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "නිවේà·à¶± මà·à¶¯à·’ලිය" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "" @@ -15378,39 +15419,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -msgid "Display" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -msgid "Height" -msgstr "" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -#, fuzzy -msgid "Test Width" -msgstr "රේඛීය" - -#: main/main.cpp -msgid "Test Height" -msgstr "" - #: main/main.cpp msgid "DPI" msgstr "" @@ -19477,6 +19485,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp #, fuzzy msgid "Build Mode" @@ -21112,7 +21125,7 @@ msgstr "" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -23151,6 +23164,11 @@ msgid "Pause Mode" msgstr "නිවේà·à¶± මà·à¶¯à·’ලිය" #: scene/main/node.cpp +#, fuzzy +msgid "Physics Interpolation Mode" +msgstr "නිවේà·à¶± මà·à¶¯à·’ලිය" + +#: scene/main/node.cpp msgid "Display Folded" msgstr "" @@ -23179,11 +23197,6 @@ msgstr "" msgid "Process Priority" msgstr "" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "නිවේà·à¶± මà·à¶¯à·’ලිය" - #: scene/main/scene_tree.cpp scene/main/timer.cpp msgid "Time Left" msgstr "" @@ -23823,6 +23836,11 @@ msgstr "" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "à·à·Šâ€à¶»à·’à¶:" + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "à·à·Šâ€à¶»à·’à¶:" @@ -24567,6 +24585,10 @@ msgid "Distance Field" msgstr "" #: scene/resources/gradient.cpp +msgid "Raw Data" +msgstr "" + +#: scene/resources/gradient.cpp msgid "Offsets" msgstr "" diff --git a/editor/translations/sk.po b/editor/translations/sk.po index 0494245043..e6faff29b1 100644 --- a/editor/translations/sk.po +++ b/editor/translations/sk.po @@ -86,12 +86,13 @@ msgstr "VeľkosÅ¥: " msgid "Screen Orientation" msgstr "Popis:" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp #, fuzzy msgid "Window" msgstr "Nové Okno" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp #, fuzzy msgid "Borderless" msgstr "OhraniÄené Pixely" @@ -100,7 +101,7 @@ msgstr "OhraniÄené Pixely" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp #, fuzzy msgid "Fullscreen" msgstr "Prepnúť na Celú Obrazovku" @@ -113,7 +114,7 @@ msgstr "" msgid "Minimized" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -127,10 +128,11 @@ msgstr "" msgid "Position" msgstr "PozÃcia Dock-u" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -624,6 +626,42 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +#, fuzzy +msgid "Display" +msgstr "ZobraziÅ¥ VÅ¡etko" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +msgid "Height" +msgstr "" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Width" +msgstr "Ľavá Å Ãrka" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Height" +msgstr "Testovanie" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1229,7 +1267,7 @@ msgstr "Zapnúť/Vypnúť tento track." msgid "Update Mode (How this property is set)" msgstr "Update Mode (Tak ako je táto možnosÅ¥ nastavená)" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "Režim Interpolácie" @@ -6119,6 +6157,11 @@ msgstr "" msgid "Flat" msgstr "Plochý 0" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "Režim Interpolácie" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "Vyberte Node(y) pre Importovanie" @@ -16135,41 +16178,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -#, fuzzy -msgid "Display" -msgstr "ZobraziÅ¥ VÅ¡etko" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -msgid "Height" -msgstr "" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -#, fuzzy -msgid "Test Width" -msgstr "Ľavá Å Ãrka" - -#: main/main.cpp -#, fuzzy -msgid "Test Height" -msgstr "Testovanie" - #: main/main.cpp msgid "DPI" msgstr "" @@ -20501,6 +20509,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp #, fuzzy msgid "Build Mode" @@ -22255,7 +22268,7 @@ msgstr "" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -24442,6 +24455,11 @@ msgstr "Pohyb Mód" #: scene/main/node.cpp #, fuzzy +msgid "Physics Interpolation Mode" +msgstr "Režim Interpolácie" + +#: scene/main/node.cpp +#, fuzzy msgid "Display Folded" msgstr "ZobraziÅ¥ VÅ¡etko" @@ -24475,11 +24493,6 @@ msgstr "NastaviÅ¥ Viac:" msgid "Process Priority" msgstr "Súbor:" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "Režim Interpolácie" - #: scene/main/scene_tree.cpp scene/main/timer.cpp #, fuzzy msgid "Time Left" @@ -25164,6 +25177,11 @@ msgstr "Popis:" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "Popis:" + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "VÅ¡etky vybrané" @@ -25960,6 +25978,11 @@ msgstr "Režim bez rozptyľovania" #: scene/resources/gradient.cpp #, fuzzy +msgid "Raw Data" +msgstr "Hĺbka" + +#: scene/resources/gradient.cpp +#, fuzzy msgid "Offsets" msgstr "Odchýlka Mriežky:" diff --git a/editor/translations/sl.po b/editor/translations/sl.po index 9bace3e00e..0d6d15a5a2 100644 --- a/editor/translations/sl.po +++ b/editor/translations/sl.po @@ -88,11 +88,12 @@ msgstr "Zaženi Skripto" msgid "Screen Orientation" msgstr "Odpri Nedavne" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "" @@ -100,7 +101,7 @@ msgstr "" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp #, fuzzy msgid "Fullscreen" msgstr "Preklopi na Celozaslonski NaÄin" @@ -113,7 +114,7 @@ msgstr "" msgid "Minimized" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -127,10 +128,11 @@ msgstr "" msgid "Position" msgstr "Položaj Sidranja" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -624,6 +626,42 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +#, fuzzy +msgid "Display" +msgstr "Zamenjaj Vse" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +msgid "Height" +msgstr "" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Width" +msgstr "Linearno" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Height" +msgstr "PreskuÅ¡anje" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1240,7 +1278,7 @@ msgstr "Preklop naÄin pisanja brez motenj." msgid "Update Mode (How this property is set)" msgstr "" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp #, fuzzy msgid "Interpolation Mode" msgstr "Animacijski Gradnik" @@ -6216,6 +6254,11 @@ msgstr "" msgid "Flat" msgstr "" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "Animacijski Gradnik" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "Izberi Gradnik(e) za Uvoz" @@ -16449,41 +16492,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -#, fuzzy -msgid "Display" -msgstr "Zamenjaj Vse" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -msgid "Height" -msgstr "" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -#, fuzzy -msgid "Test Width" -msgstr "Linearno" - -#: main/main.cpp -#, fuzzy -msgid "Test Height" -msgstr "PreskuÅ¡anje" - #: main/main.cpp msgid "DPI" msgstr "" @@ -20835,6 +20843,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp #, fuzzy msgid "Build Mode" @@ -22581,7 +22594,7 @@ msgstr "" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -24771,6 +24784,11 @@ msgstr "NaÄin PloÅ¡Äe" #: scene/main/node.cpp #, fuzzy +msgid "Physics Interpolation Mode" +msgstr "Animacijski Gradnik" + +#: scene/main/node.cpp +#, fuzzy msgid "Display Folded" msgstr "Zamenjaj Vse" @@ -24802,11 +24820,6 @@ msgstr "" msgid "Process Priority" msgstr "Uredi Filtre" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "Animacijski Gradnik" - #: scene/main/scene_tree.cpp scene/main/timer.cpp #, fuzzy msgid "Time Left" @@ -25488,6 +25501,11 @@ msgstr "" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "OÅ¡tevilÄenja:" + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "Odstrani Vse Stvari" @@ -26284,6 +26302,11 @@ msgstr "NaÄin Brez Motenj" #: scene/resources/gradient.cpp #, fuzzy +msgid "Raw Data" +msgstr "Globina" + +#: scene/resources/gradient.cpp +#, fuzzy msgid "Offsets" msgstr "Mrežni Zamik:" diff --git a/editor/translations/sq.po b/editor/translations/sq.po index 52a657c799..bb92b3e21f 100644 --- a/editor/translations/sq.po +++ b/editor/translations/sq.po @@ -76,11 +76,12 @@ msgstr "Madhësia: " msgid "Screen Orientation" msgstr "Hap të Fundit" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "" @@ -88,7 +89,7 @@ msgstr "" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp #, fuzzy msgid "Fullscreen" msgstr "Ndrysho Ekranin e Plotë" @@ -101,7 +102,7 @@ msgstr "" msgid "Minimized" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -115,10 +116,11 @@ msgstr "" msgid "Position" msgstr "Pozicioni i Dokut" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -603,6 +605,40 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +#, fuzzy +msgid "Display" +msgstr "Shfaqi të Gjitha" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +msgid "Height" +msgstr "" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +msgid "Test Width" +msgstr "" + +#: core/project_settings.cpp +msgid "Test Height" +msgstr "" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1202,7 +1238,7 @@ msgstr "" msgid "Update Mode (How this property is set)" msgstr "" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "" @@ -6109,6 +6145,11 @@ msgstr "" msgid "Flat" msgstr "" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "Format e Përplasjes të Dukshme" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "Zgjidh Nyjet Për ti Importuar" @@ -15985,39 +16026,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -#, fuzzy -msgid "Display" -msgstr "Shfaqi të Gjitha" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -msgid "Height" -msgstr "" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -msgid "Test Width" -msgstr "" - -#: main/main.cpp -msgid "Test Height" -msgstr "" - #: main/main.cpp msgid "DPI" msgstr "" @@ -20268,6 +20276,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp #, fuzzy msgid "Build Mode" @@ -21951,7 +21964,7 @@ msgstr "" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -24067,6 +24080,11 @@ msgstr "Luaj Skenën" #: scene/main/node.cpp #, fuzzy +msgid "Physics Interpolation Mode" +msgstr "Hapi i Fizikës %" + +#: scene/main/node.cpp +#, fuzzy msgid "Display Folded" msgstr "Shfaqi të Gjitha" @@ -24100,11 +24118,6 @@ msgstr "Vendos të Shumëfishta:" msgid "Process Priority" msgstr "Ndrysho Mënyrën" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "Hapi i Fizikës %" - #: scene/main/scene_tree.cpp scene/main/timer.cpp #, fuzzy msgid "Time Left" @@ -24775,6 +24788,11 @@ msgstr "" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "Enumeracionet:" + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "Hiq Artikullin" @@ -25555,6 +25573,10 @@ msgid "Distance Field" msgstr "Metoda Pa Shpërqëndrime" #: scene/resources/gradient.cpp +msgid "Raw Data" +msgstr "" + +#: scene/resources/gradient.cpp msgid "Offsets" msgstr "" diff --git a/editor/translations/sr_Cyrl.po b/editor/translations/sr_Cyrl.po index 0ffdd6452e..d41f434033 100644 --- a/editor/translations/sr_Cyrl.po +++ b/editor/translations/sr_Cyrl.po @@ -82,12 +82,13 @@ msgstr "Величина ивице:" msgid "Screen Orientation" msgstr "ЗаÑлон оператор." -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp #, fuzzy msgid "Window" msgstr "Ðов Прозор" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp #, fuzzy msgid "Borderless" msgstr "ПикÑели Оквира" @@ -96,7 +97,7 @@ msgstr "ПикÑели Оквира" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp #, fuzzy msgid "Fullscreen" msgstr "Укљ./ИÑкљ. режим целог екрана" @@ -110,7 +111,7 @@ msgstr "" msgid "Minimized" msgstr "Велика Ñлова" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -124,10 +125,11 @@ msgstr "" msgid "Position" msgstr "Позиција панела" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -628,6 +630,43 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +#, fuzzy +msgid "Display" +msgstr "Прикажи нормалу" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +#, fuzzy +msgid "Height" +msgstr "деÑно" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Width" +msgstr "Поглед Ñ Ð»ÐµÐ²Ð°" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Height" +msgstr "ТеÑтирање" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp #, fuzzy @@ -1267,7 +1306,7 @@ msgstr "Укљ./ИÑкљ. режим без Ñметње." msgid "Update Mode (How this property is set)" msgstr "Режим ажурирања (Како је поÑтављена ова оÑобина)" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp #, fuzzy msgid "Interpolation Mode" msgstr "Ðнимациони чвор" @@ -6459,6 +6498,11 @@ msgstr "Држи Ctrl да иÑпуÑтиш Узимача. Држи Shift да msgid "Flat" msgstr "Раван0" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "Ðнимациони чвор" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "Одабери чвор/ове за увоз" @@ -17649,42 +17693,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -#, fuzzy -msgid "Display" -msgstr "Прикажи нормалу" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -#, fuzzy -msgid "Height" -msgstr "деÑно" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -#, fuzzy -msgid "Test Width" -msgstr "Поглед Ñ Ð»ÐµÐ²Ð°" - -#: main/main.cpp -#, fuzzy -msgid "Test Height" -msgstr "ТеÑтирање" - #: main/main.cpp msgid "DPI" msgstr "" @@ -22247,6 +22255,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp #, fuzzy msgid "Build Mode" @@ -24130,7 +24143,7 @@ msgstr "ИÑпеци ÐавМрежу" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -26424,6 +26437,11 @@ msgstr "Режим инÑпекције" #: scene/main/node.cpp #, fuzzy +msgid "Physics Interpolation Mode" +msgstr "Ðнимациони чвор" + +#: scene/main/node.cpp +#, fuzzy msgid "Display Folded" msgstr "Прикажи неоÑенчен" @@ -26457,11 +26475,6 @@ msgstr "ПоÑтави Више:" msgid "Process Priority" msgstr "Уреди филтере" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "Ðнимациони чвор" - #: scene/main/scene_tree.cpp scene/main/timer.cpp #, fuzzy msgid "Time Left" @@ -27170,6 +27183,11 @@ msgstr "Иманован Сеп." #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "Операције боје." + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "Обриши Ñтавке клаÑе" @@ -27976,6 +27994,11 @@ msgstr "Режим без Ñметње" #: scene/resources/gradient.cpp #, fuzzy +msgid "Raw Data" +msgstr "Дубина" + +#: scene/resources/gradient.cpp +#, fuzzy msgid "Offsets" msgstr "ОфÑет:" diff --git a/editor/translations/sr_Latn.po b/editor/translations/sr_Latn.po index 3a98b975bc..977a01df40 100644 --- a/editor/translations/sr_Latn.po +++ b/editor/translations/sr_Latn.po @@ -77,11 +77,12 @@ msgstr "" msgid "Screen Orientation" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "" @@ -89,7 +90,7 @@ msgstr "" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Fullscreen" msgstr "" @@ -101,7 +102,7 @@ msgstr "" msgid "Minimized" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -115,10 +116,11 @@ msgstr "" msgid "Position" msgstr "Napravi" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -591,6 +593,40 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +msgid "Display" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +msgid "Height" +msgstr "" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Width" +msgstr "Leva Å iroka" + +#: core/project_settings.cpp +msgid "Test Height" +msgstr "" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1176,7 +1212,7 @@ msgstr "UkljuÄi/iskljuÄi ovu traku." msgid "Update Mode (How this property is set)" msgstr "NaÄin Ažuriranja (Kako je ova osobina postavljena)" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "NaÄin Interpolacije" @@ -5816,6 +5852,11 @@ msgstr "" msgid "Flat" msgstr "" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "Napravi" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "" @@ -15409,39 +15450,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -msgid "Display" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -msgid "Height" -msgstr "" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -#, fuzzy -msgid "Test Width" -msgstr "Leva Å iroka" - -#: main/main.cpp -msgid "Test Height" -msgstr "" - #: main/main.cpp msgid "DPI" msgstr "" @@ -19559,6 +19567,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp msgid "Build Mode" msgstr "" @@ -21231,7 +21244,7 @@ msgstr "" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -23306,6 +23319,11 @@ msgid "Pause Mode" msgstr "" #: scene/main/node.cpp +#, fuzzy +msgid "Physics Interpolation Mode" +msgstr "NaÄin Interpolacije" + +#: scene/main/node.cpp msgid "Display Folded" msgstr "" @@ -23336,11 +23354,6 @@ msgstr "" msgid "Process Priority" msgstr "" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "NaÄin Interpolacije" - #: scene/main/scene_tree.cpp scene/main/timer.cpp msgid "Time Left" msgstr "" @@ -23990,6 +24003,11 @@ msgstr "" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "Odvajanje:" + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "Funkcija" @@ -24759,6 +24777,10 @@ msgid "Distance Field" msgstr "" #: scene/resources/gradient.cpp +msgid "Raw Data" +msgstr "" + +#: scene/resources/gradient.cpp msgid "Offsets" msgstr "" diff --git a/editor/translations/sv.po b/editor/translations/sv.po index 9aaeac846a..c02b1b32b2 100644 --- a/editor/translations/sv.po +++ b/editor/translations/sv.po @@ -100,12 +100,13 @@ msgstr "Storlek:" msgid "Screen Orientation" msgstr "Öppna Senaste" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp #, fuzzy msgid "Window" msgstr "Nytt Fönster" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "" @@ -113,7 +114,7 @@ msgstr "" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp #, fuzzy msgid "Fullscreen" msgstr "Växla Fullskärm" @@ -126,7 +127,7 @@ msgstr "" msgid "Minimized" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -140,10 +141,11 @@ msgstr "" msgid "Position" msgstr "Dockposition" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -635,6 +637,43 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +#, fuzzy +msgid "Display" +msgstr "Ersätt Alla" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +#, fuzzy +msgid "Height" +msgstr "Höger" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Width" +msgstr "Vy frÃ¥n vänster" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Height" +msgstr "Höger" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1234,7 +1273,7 @@ msgstr "Ändra spÃ¥rets läge till pÃ¥/av." msgid "Update Mode (How this property is set)" msgstr "Uppdateringsläge (Hur denna egenskap sätts)" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "Interpolationsläge" @@ -6139,6 +6178,11 @@ msgstr "" msgid "Flat" msgstr "Platt 1" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "Animations-Node" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "Välj Nod(er) att Importera" @@ -16221,42 +16265,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -#, fuzzy -msgid "Display" -msgstr "Ersätt Alla" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -#, fuzzy -msgid "Height" -msgstr "Höger" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -#, fuzzy -msgid "Test Width" -msgstr "Vy frÃ¥n vänster" - -#: main/main.cpp -#, fuzzy -msgid "Test Height" -msgstr "Höger" - #: main/main.cpp msgid "DPI" msgstr "" @@ -20572,6 +20580,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp #, fuzzy msgid "Build Mode" @@ -22332,7 +22345,7 @@ msgstr "" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -24516,6 +24529,11 @@ msgstr "Växla Läge" #: scene/main/node.cpp #, fuzzy +msgid "Physics Interpolation Mode" +msgstr "Interpolationsläge" + +#: scene/main/node.cpp +#, fuzzy msgid "Display Folded" msgstr "Ersätt Alla" @@ -24549,11 +24567,6 @@ msgstr "Sätt Flera:" msgid "Process Priority" msgstr "Redigera Filter" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "Interpolationsläge" - #: scene/main/scene_tree.cpp scene/main/timer.cpp #, fuzzy msgid "Time Left" @@ -25236,6 +25249,11 @@ msgstr "" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "Sektioner:" + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "Byt namn pÃ¥ Node" @@ -26029,6 +26047,11 @@ msgid "Distance Field" msgstr "Distraktionsfritt Läge" #: scene/resources/gradient.cpp +#, fuzzy +msgid "Raw Data" +msgstr "Höger" + +#: scene/resources/gradient.cpp msgid "Offsets" msgstr "" diff --git a/editor/translations/ta.po b/editor/translations/ta.po index dea2dbaa15..e51596cbfa 100644 --- a/editor/translations/ta.po +++ b/editor/translations/ta.po @@ -75,11 +75,12 @@ msgstr "" msgid "Screen Orientation" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "" @@ -87,7 +88,7 @@ msgstr "" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Fullscreen" msgstr "" @@ -99,7 +100,7 @@ msgstr "" msgid "Minimized" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -113,10 +114,11 @@ msgstr "" msgid "Position" msgstr "மாறà¯à®±à®™à¯à®•ளை இதறà¯à®•௠அமை:" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -582,6 +584,39 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +msgid "Display" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +msgid "Height" +msgstr "" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +msgid "Test Width" +msgstr "" + +#: core/project_settings.cpp +msgid "Test Height" +msgstr "" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1171,7 +1206,7 @@ msgstr "" msgid "Update Mode (How this property is set)" msgstr "" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "" @@ -5785,6 +5820,11 @@ msgstr "" msgid "Flat" msgstr "" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "à®®à¯à®Ÿà®•à¯à®•பà¯à®ªà®Ÿà¯à®Ÿà®¤à¯" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "" @@ -15364,38 +15404,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -msgid "Display" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -msgid "Height" -msgstr "" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -msgid "Test Width" -msgstr "" - -#: main/main.cpp -msgid "Test Height" -msgstr "" - #: main/main.cpp msgid "DPI" msgstr "" @@ -19451,6 +19459,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp msgid "Build Mode" msgstr "" @@ -21082,7 +21095,7 @@ msgstr "" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -23095,6 +23108,11 @@ msgid "Pause Mode" msgstr "" #: scene/main/node.cpp +#, fuzzy +msgid "Physics Interpolation Mode" +msgstr "அசைவூடà¯à®Ÿà¯ பாதை [interpolation]யை மாறà¯à®±à¯" + +#: scene/main/node.cpp msgid "Display Folded" msgstr "" @@ -23124,10 +23142,6 @@ msgstr "" msgid "Process Priority" msgstr "" -#: scene/main/node.cpp -msgid "Physics Interpolated" -msgstr "" - #: scene/main/scene_tree.cpp scene/main/timer.cpp msgid "Time Left" msgstr "" @@ -23766,6 +23780,11 @@ msgstr "" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "மாறà¯à®±à®™à¯à®•ளை இதறà¯à®•௠அமை:" + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "அனைதà¯à®¤à¯ தேரà¯à®µà¯à®•ளà¯" @@ -24510,6 +24529,10 @@ msgid "Distance Field" msgstr "" #: scene/resources/gradient.cpp +msgid "Raw Data" +msgstr "" + +#: scene/resources/gradient.cpp msgid "Offsets" msgstr "" diff --git a/editor/translations/te.po b/editor/translations/te.po index e4f9d88d87..8fbfa32f91 100644 --- a/editor/translations/te.po +++ b/editor/translations/te.po @@ -70,11 +70,12 @@ msgstr "" msgid "Screen Orientation" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "" @@ -82,7 +83,7 @@ msgstr "" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Fullscreen" msgstr "" @@ -94,7 +95,7 @@ msgstr "" msgid "Minimized" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -107,10 +108,11 @@ msgstr "" msgid "Position" msgstr "" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -566,6 +568,39 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +msgid "Display" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +msgid "Height" +msgstr "" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +msgid "Test Width" +msgstr "" + +#: core/project_settings.cpp +msgid "Test Height" +msgstr "" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1144,7 +1179,7 @@ msgstr "" msgid "Update Mode (How this property is set)" msgstr "" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "" @@ -5707,6 +5742,10 @@ msgstr "" msgid "Flat" msgstr "à°«à±à°²à°¾à°Ÿà± 1" +#: editor/editor_spin_slider.cpp +msgid "Hide Slider" +msgstr "" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "" @@ -15184,38 +15223,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -msgid "Display" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -msgid "Height" -msgstr "" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -msgid "Test Width" -msgstr "" - -#: main/main.cpp -msgid "Test Height" -msgstr "" - #: main/main.cpp msgid "DPI" msgstr "" @@ -19206,6 +19213,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp msgid "Build Mode" msgstr "" @@ -20799,7 +20811,7 @@ msgstr "" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -22766,6 +22778,11 @@ msgid "Pause Mode" msgstr "" #: scene/main/node.cpp +#, fuzzy +msgid "Physics Interpolation Mode" +msgstr "గణనలà±" + +#: scene/main/node.cpp msgid "Display Folded" msgstr "" @@ -22793,11 +22810,6 @@ msgstr "" msgid "Process Priority" msgstr "" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "గణనలà±" - #: scene/main/scene_tree.cpp scene/main/timer.cpp msgid "Time Left" msgstr "" @@ -23402,6 +23414,11 @@ msgid "Labeled Separator Right" msgstr "" #: scene/resources/default_theme/default_theme.cpp +#, fuzzy +msgid "Font Separator" +msgstr "గణనలà±" + +#: scene/resources/default_theme/default_theme.cpp msgid "Font Color Accel" msgstr "" @@ -24097,6 +24114,10 @@ msgid "Distance Field" msgstr "" #: scene/resources/gradient.cpp +msgid "Raw Data" +msgstr "" + +#: scene/resources/gradient.cpp msgid "Offsets" msgstr "" diff --git a/editor/translations/th.po b/editor/translations/th.po index d9e7bddaf7..aafef8492b 100644 --- a/editor/translations/th.po +++ b/editor/translations/th.po @@ -89,12 +89,13 @@ msgstr "ขนาดเส้นรà¸à¸šà¸£à¸¹à¸›:" msgid "Screen Orientation" msgstr "ดำเนินà¸à¸²à¸£ Screen" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp #, fuzzy msgid "Window" msgstr "หน้าต่างใหม่" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp #, fuzzy msgid "Borderless" msgstr "พิà¸à¹€à¸‹à¸¥à¸‚à¸à¸š" @@ -103,7 +104,7 @@ msgstr "พิà¸à¹€à¸‹à¸¥à¸‚à¸à¸š" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp #, fuzzy msgid "Fullscreen" msgstr "เปิด/ปิด โหมดเต็มหน้าจà¸" @@ -117,7 +118,7 @@ msgstr "" msgid "Minimized" msgstr "เริ่มต้น" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -131,10 +132,11 @@ msgstr "" msgid "Position" msgstr "ตำà¹à¸«à¸™à¹ˆà¸‡à¹à¸œà¸‡" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -632,6 +634,43 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +#, fuzzy +msgid "Display" +msgstr "à¹à¸ªà¸”งทั้งหมด" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +#, fuzzy +msgid "Height" +msgstr "à¹à¸ªà¸‡" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Width" +msgstr "ความà¸à¸§à¹‰à¸²à¸‡à¸‹à¹‰à¸²à¸¢" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Height" +msgstr "à¸à¸³à¸¥à¸±à¸‡à¸—ดสà¸à¸š" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1247,7 +1286,7 @@ msgstr "เปิด/ปิดà¹à¸—ร็à¸à¸™à¸µà¹‰" msgid "Update Mode (How this property is set)" msgstr "โหมดà¸à¸±à¸žà¹€à¸”ท (คุณสมบัตินี้ถูà¸à¸•ั้งค่าได้à¸à¸¢à¹ˆà¸²à¸‡à¹„ร)" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "โหมดà¸à¸²à¸£à¹à¸à¹‰à¹„ข" @@ -6132,6 +6171,11 @@ msgstr "" msgid "Flat" msgstr "Flat 0" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "โหมดขà¸à¸šà¹€à¸‚ตà¸à¸²à¸£à¸Šà¸™" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "เลืà¸à¸à¹‚หนดเพื่à¸à¸™à¸³à¹€à¸‚้า" @@ -16136,42 +16180,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -#, fuzzy -msgid "Display" -msgstr "à¹à¸ªà¸”งทั้งหมด" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -#, fuzzy -msgid "Height" -msgstr "à¹à¸ªà¸‡" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -#, fuzzy -msgid "Test Width" -msgstr "ความà¸à¸§à¹‰à¸²à¸‡à¸‹à¹‰à¸²à¸¢" - -#: main/main.cpp -#, fuzzy -msgid "Test Height" -msgstr "à¸à¸³à¸¥à¸±à¸‡à¸—ดสà¸à¸š" - #: main/main.cpp msgid "DPI" msgstr "" @@ -20557,6 +20565,11 @@ msgstr "โพลีà¸à¸à¸™à¹„ม่ถูà¸à¸•้à¸à¸‡ ต้à¸à¸‡à¸¡à¸µà¸ msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "โพลีà¸à¸à¸™à¹„ม่ถูà¸à¸•้à¸à¸‡ ต้à¸à¸‡à¸¡à¸µà¸à¸¢à¹ˆà¸²à¸‡à¸™à¹‰à¸à¸¢ 2 จุด ในโหมดà¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡à¹à¸šà¸š 'Segments'" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp #, fuzzy msgid "Build Mode" @@ -22370,7 +22383,7 @@ msgstr "Bake NavMesh" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -24621,6 +24634,11 @@ msgstr "โหมดมุมมà¸à¸‡" #: scene/main/node.cpp #, fuzzy +msgid "Physics Interpolation Mode" +msgstr "โหมดà¸à¸²à¸£à¹à¸à¹‰à¹„ข" + +#: scene/main/node.cpp +#, fuzzy msgid "Display Folded" msgstr "à¹à¸ªà¸”งà¹à¸šà¸šà¹„ร้เงา" @@ -24654,11 +24672,6 @@ msgstr "à¸à¸³à¸«à¸™à¸” หลายà¸à¸¢à¹ˆà¸²à¸‡:" msgid "Process Priority" msgstr "เปิดà¸à¸²à¸£à¸ˆà¸±à¸”ลำดับความสำคัà¸" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "โหมดà¸à¸²à¸£à¹à¸à¹‰à¹„ข" - #: scene/main/scene_tree.cpp scene/main/timer.cpp #, fuzzy msgid "Time Left" @@ -25365,6 +25378,11 @@ msgstr "หมวดชื่à¸" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "à¸à¸²à¸£à¸”ำเนินà¸à¸²à¸£à¸ªà¸µ" + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "ลบไà¸à¹€à¸—มคลาส" @@ -26171,6 +26189,11 @@ msgstr "โหมดไร้สิ่งรบà¸à¸§à¸™" #: scene/resources/gradient.cpp #, fuzzy +msgid "Raw Data" +msgstr "ความลึà¸" + +#: scene/resources/gradient.cpp +#, fuzzy msgid "Offsets" msgstr "เลื่à¸à¸™:" diff --git a/editor/translations/tl.po b/editor/translations/tl.po index db596952bf..7aa93a5aff 100644 --- a/editor/translations/tl.po +++ b/editor/translations/tl.po @@ -73,11 +73,12 @@ msgstr "Pinakamalaking Laki ng Window" msgid "Screen Orientation" msgstr "Pagkakatayo ng Screen" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "Walang Kuwadro" @@ -85,7 +86,7 @@ msgstr "Walang Kuwadro" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp #, fuzzy msgid "Fullscreen" msgstr "Pumalit sa Buong Tabing" @@ -99,7 +100,7 @@ msgstr "" msgid "Minimized" msgstr "Simulan" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -113,10 +114,11 @@ msgstr "" msgid "Position" msgstr "Idaong Ang Posisyon" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -604,6 +606,41 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +#, fuzzy +msgid "Display" +msgstr "Ipakita Lahat" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +msgid "Height" +msgstr "" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +msgid "Test Width" +msgstr "" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Height" +msgstr "Sinusubukan" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1200,7 +1237,7 @@ msgstr "Ipalit sa on/off ang track na ito." msgid "Update Mode (How this property is set)" msgstr "Paraan ng Pag-update (Kung papano inayos ang katangian na ito)" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "Paraang Interpolasyon" @@ -5933,6 +5970,11 @@ msgstr "" msgid "Flat" msgstr "" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "Nakikitang Collision Shapes" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "Pumili ng (mga) Node na Iaangkat" @@ -15547,40 +15589,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -#, fuzzy -msgid "Display" -msgstr "Ipakita Lahat" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -msgid "Height" -msgstr "" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -msgid "Test Width" -msgstr "" - -#: main/main.cpp -#, fuzzy -msgid "Test Height" -msgstr "Sinusubukan" - #: main/main.cpp msgid "DPI" msgstr "" @@ -19804,6 +19812,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp #, fuzzy msgid "Build Mode" @@ -21523,7 +21536,7 @@ msgstr "" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -23683,6 +23696,11 @@ msgstr "Paraan ng Pag-pan" #: scene/main/node.cpp #, fuzzy +msgid "Physics Interpolation Mode" +msgstr "Paraang Interpolasyon" + +#: scene/main/node.cpp +#, fuzzy msgid "Display Folded" msgstr "Ipakita Lahat" @@ -23716,11 +23734,6 @@ msgstr "Magtakda ng Marami:" msgid "Process Priority" msgstr "Pagpapahalaga" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "Paraang Interpolasyon" - #: scene/main/scene_tree.cpp scene/main/timer.cpp #, fuzzy msgid "Time Left" @@ -24397,6 +24410,11 @@ msgstr "" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "Animasyon" + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "Pumili ng Kulay" @@ -25190,6 +25208,11 @@ msgstr "Instance:" #: scene/resources/gradient.cpp #, fuzzy +msgid "Raw Data" +msgstr "Lalim" + +#: scene/resources/gradient.cpp +#, fuzzy msgid "Offsets" msgstr "Usog:" diff --git a/editor/translations/tr.po b/editor/translations/tr.po index 3de35b0487..cd0beeeb00 100644 --- a/editor/translations/tr.po +++ b/editor/translations/tr.po @@ -146,12 +146,13 @@ msgstr "Maksimum Ekran Boyutu" msgid "Screen Orientation" msgstr "Ekran Oryantasyonu" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp #, fuzzy msgid "Window" msgstr "Yeni Pencere" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp #, fuzzy msgid "Borderless" msgstr "Kenar Pikselleri" @@ -160,7 +161,7 @@ msgstr "Kenar Pikselleri" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp #, fuzzy msgid "Fullscreen" msgstr "Tam Ekranı Aç/Kapat" @@ -174,7 +175,7 @@ msgstr "" msgid "Minimized" msgstr "EtkinleÅŸtir" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -188,10 +189,11 @@ msgstr "" msgid "Position" msgstr "Dock Pozisyonu" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -689,6 +691,43 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +#, fuzzy +msgid "Display" +msgstr "Hepsini Görüntüle" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +#, fuzzy +msgid "Height" +msgstr "Işık" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Width" +msgstr "Soldan Görünüm" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Height" +msgstr "Deneme" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1298,7 +1337,7 @@ msgstr "Bu parçayı Aç/Kapat." msgid "Update Mode (How this property is set)" msgstr "Güncelleme Kipi (Bu özellik nasıl belirlenir)" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "Ara DeÄŸerleme Kipi" @@ -6220,6 +6259,11 @@ msgstr "" msgid "Flat" msgstr "Sade 0" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "Temas Kipi" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "Düğüm(leri) içe Aktarmak için Seç" @@ -16157,42 +16201,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -#, fuzzy -msgid "Display" -msgstr "Hepsini Görüntüle" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -#, fuzzy -msgid "Height" -msgstr "Işık" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -#, fuzzy -msgid "Test Width" -msgstr "Soldan Görünüm" - -#: main/main.cpp -#, fuzzy -msgid "Test Height" -msgstr "Deneme" - #: main/main.cpp msgid "DPI" msgstr "" @@ -20581,6 +20589,11 @@ msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" "Geçersiz çokgen. 'Segments' oluÅŸturma modunda en az 2 nokta gereklidir." +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp #, fuzzy msgid "Build Mode" @@ -22433,7 +22446,7 @@ msgstr "NavMesh'i Sabitle" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -24722,6 +24735,11 @@ msgstr "Kaydırma Biçimi" #: scene/main/node.cpp #, fuzzy +msgid "Physics Interpolation Mode" +msgstr "Ara DeÄŸerleme Kipi" + +#: scene/main/node.cpp +#, fuzzy msgid "Display Folded" msgstr "Gölgesiz Görüntüle" @@ -24755,11 +24773,6 @@ msgstr "Çoklu Ayarla:" msgid "Process Priority" msgstr "Önceliklemeyi EtkinleÅŸtir" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "Ara DeÄŸerleme Kipi" - #: scene/main/scene_tree.cpp scene/main/timer.cpp #, fuzzy msgid "Time Left" @@ -25472,6 +25485,11 @@ msgstr "İsimli Ayraç" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "Renk operatörü." + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "Renk Öğesini Yeniden Adlandır" @@ -26278,6 +26296,11 @@ msgstr "Dikkat Dağıtmayan Kip" #: scene/resources/gradient.cpp #, fuzzy +msgid "Raw Data" +msgstr "Derinlik" + +#: scene/resources/gradient.cpp +#, fuzzy msgid "Offsets" msgstr "Kaydırma:" diff --git a/editor/translations/tt.po b/editor/translations/tt.po index a7d9a7c15e..c880c08ace 100644 --- a/editor/translations/tt.po +++ b/editor/translations/tt.po @@ -70,11 +70,12 @@ msgstr "" msgid "Screen Orientation" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "" @@ -82,7 +83,7 @@ msgstr "" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Fullscreen" msgstr "" @@ -94,7 +95,7 @@ msgstr "" msgid "Minimized" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -107,10 +108,11 @@ msgstr "" msgid "Position" msgstr "" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -563,6 +565,39 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +msgid "Display" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +msgid "Height" +msgstr "" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +msgid "Test Width" +msgstr "" + +#: core/project_settings.cpp +msgid "Test Height" +msgstr "" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1140,7 +1175,7 @@ msgstr "" msgid "Update Mode (How this property is set)" msgstr "" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "" @@ -5701,6 +5736,10 @@ msgstr "" msgid "Flat" msgstr "" +#: editor/editor_spin_slider.cpp +msgid "Hide Slider" +msgstr "" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "" @@ -15168,38 +15207,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -msgid "Display" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -msgid "Height" -msgstr "" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -msgid "Test Width" -msgstr "" - -#: main/main.cpp -msgid "Test Height" -msgstr "" - #: main/main.cpp msgid "DPI" msgstr "" @@ -19162,6 +19169,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp msgid "Build Mode" msgstr "" @@ -20744,7 +20756,7 @@ msgstr "" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -22692,6 +22704,10 @@ msgid "Pause Mode" msgstr "" #: scene/main/node.cpp +msgid "Physics Interpolation Mode" +msgstr "" + +#: scene/main/node.cpp msgid "Display Folded" msgstr "" @@ -22719,10 +22735,6 @@ msgstr "" msgid "Process Priority" msgstr "" -#: scene/main/node.cpp -msgid "Physics Interpolated" -msgstr "" - #: scene/main/scene_tree.cpp scene/main/timer.cpp msgid "Time Left" msgstr "" @@ -23325,6 +23337,10 @@ msgid "Labeled Separator Right" msgstr "" #: scene/resources/default_theme/default_theme.cpp +msgid "Font Separator" +msgstr "" + +#: scene/resources/default_theme/default_theme.cpp msgid "Font Color Accel" msgstr "" @@ -24006,6 +24022,10 @@ msgid "Distance Field" msgstr "" #: scene/resources/gradient.cpp +msgid "Raw Data" +msgstr "" + +#: scene/resources/gradient.cpp msgid "Offsets" msgstr "" diff --git a/editor/translations/tzm.po b/editor/translations/tzm.po index 2139691a5f..46c5660298 100644 --- a/editor/translations/tzm.po +++ b/editor/translations/tzm.po @@ -70,11 +70,12 @@ msgstr "" msgid "Screen Orientation" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "" @@ -82,7 +83,7 @@ msgstr "" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Fullscreen" msgstr "" @@ -94,7 +95,7 @@ msgstr "" msgid "Minimized" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -107,10 +108,11 @@ msgstr "" msgid "Position" msgstr "" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -561,6 +563,39 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +msgid "Display" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +msgid "Height" +msgstr "" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +msgid "Test Width" +msgstr "" + +#: core/project_settings.cpp +msgid "Test Height" +msgstr "" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1138,7 +1173,7 @@ msgstr "" msgid "Update Mode (How this property is set)" msgstr "" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "" @@ -5699,6 +5734,10 @@ msgstr "" msgid "Flat" msgstr "" +#: editor/editor_spin_slider.cpp +msgid "Hide Slider" +msgstr "" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "" @@ -15166,38 +15205,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -msgid "Display" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -msgid "Height" -msgstr "" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -msgid "Test Width" -msgstr "" - -#: main/main.cpp -msgid "Test Height" -msgstr "" - #: main/main.cpp msgid "DPI" msgstr "" @@ -19160,6 +19167,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp msgid "Build Mode" msgstr "" @@ -20742,7 +20754,7 @@ msgstr "" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -22694,6 +22706,10 @@ msgid "Pause Mode" msgstr "" #: scene/main/node.cpp +msgid "Physics Interpolation Mode" +msgstr "" + +#: scene/main/node.cpp msgid "Display Folded" msgstr "" @@ -22721,10 +22737,6 @@ msgstr "" msgid "Process Priority" msgstr "" -#: scene/main/node.cpp -msgid "Physics Interpolated" -msgstr "" - #: scene/main/scene_tree.cpp scene/main/timer.cpp msgid "Time Left" msgstr "" @@ -23326,6 +23338,10 @@ msgid "Labeled Separator Right" msgstr "" #: scene/resources/default_theme/default_theme.cpp +msgid "Font Separator" +msgstr "" + +#: scene/resources/default_theme/default_theme.cpp msgid "Font Color Accel" msgstr "" @@ -24008,6 +24024,10 @@ msgid "Distance Field" msgstr "" #: scene/resources/gradient.cpp +msgid "Raw Data" +msgstr "" + +#: scene/resources/gradient.cpp msgid "Offsets" msgstr "" diff --git a/editor/translations/uk.po b/editor/translations/uk.po index 29dd720e91..6a1f0396e5 100644 --- a/editor/translations/uk.po +++ b/editor/translations/uk.po @@ -28,8 +28,8 @@ msgstr "" "Project-Id-Version: Ukrainian (Godot Engine)\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2022-04-28 11:12+0000\n" -"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n" +"PO-Revision-Date: 2022-05-17 17:18+0000\n" +"Last-Translator: МироÑлав <hlopukmyroslav@gmail.com>\n" "Language-Team: Ukrainian <https://hosted.weblate.org/projects/godot-engine/" "godot/uk/>\n" "Language: uk\n" @@ -38,7 +38,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\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.12.1-dev\n" +"X-Generator: Weblate 4.13-dev\n" #: core/bind/core_bind.cpp main/main.cpp msgid "Tablet Driver" @@ -92,11 +92,12 @@ msgstr "МакÑ. розмір вікна" msgid "Screen Orientation" msgstr "ÐžÑ€Ñ–Ñ”Ð½Ñ‚Ð°Ñ†Ñ–Ñ ÐµÐºÑ€Ð°Ð½Ð°" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" msgstr "Вікно" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "Без рамки" @@ -104,7 +105,7 @@ msgstr "Без рамки" msgid "Per Pixel Transparency Enabled" msgstr "Увімкнено прозоріÑть за пікÑелÑми" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Fullscreen" msgstr "Ðа веÑÑŒ екран" @@ -116,7 +117,7 @@ msgstr "МакÑимізовано" msgid "Minimized" msgstr "Мінімізовано" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "Зі зміною розміру" @@ -129,10 +130,11 @@ msgstr "Зі зміною розміру" msgid "Position" msgstr "РозташуваннÑ" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -586,6 +588,39 @@ msgstr "Ðетиповий каталог кориÑтувача" msgid "Custom User Dir Name" msgstr "Ðетипова назва каталогу кориÑтувача" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +msgid "Display" +msgstr "Показ" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "Ширина" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +msgid "Height" +msgstr "ВиÑота" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "Завжди згори" + +#: core/project_settings.cpp +msgid "Test Width" +msgstr "Перевірити ширину" + +#: core/project_settings.cpp +msgid "Test Height" +msgstr "Перевірити виÑоту" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1163,7 +1198,7 @@ msgstr "Увімкнути або вимкнути цю доріжку." msgid "Update Mode (How this property is set)" msgstr "Оновити режим (ÑпоÑіб вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ†Ñ–Ñ”Ñ— влаÑтивоÑті)" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "Режим інтерполÑції" @@ -5935,6 +5970,11 @@ msgstr "" msgid "Flat" msgstr "ПлоÑка" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "Повзунок" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "Виберіть вузол(вузли) Ð´Ð»Ñ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚Ñƒ" @@ -6880,7 +6920,7 @@ msgstr "Кліпи" #: scene/2d/particles_2d.cpp scene/3d/area.cpp scene/3d/cpu_particles.cpp #: scene/3d/particles.cpp scene/resources/environment.cpp msgid "Amount" -msgstr "Величина" +msgstr "КількіÑть" #: editor/import/resource_importer_scene.cpp #: editor/plugins/mesh_library_editor_plugin.cpp @@ -15809,38 +15849,6 @@ msgstr "Резервний GLES2" msgid "Use Nvidia Rect Flicker Workaround" msgstr "Обхідний шлÑÑ… Ð´Ð»Ñ ÑƒÑÑƒÐ²Ð°Ð½Ð½Ñ Ð±Ð»Ð¸Ð¼Ð°Ð½Ð½Ñ Ð¿Ñ€Ñмокутників на Nvidia" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -msgid "Display" -msgstr "Показ" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "Ширина" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -msgid "Height" -msgstr "ВиÑота" - -#: main/main.cpp -msgid "Always On Top" -msgstr "Завжди згори" - -#: main/main.cpp -msgid "Test Width" -msgstr "Перевірити ширину" - -#: main/main.cpp -msgid "Test Height" -msgstr "Перевірити виÑоту" - #: main/main.cpp msgid "DPI" msgstr "РоздільніÑть" @@ -19957,6 +19965,11 @@ msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" "Ðекоректний полігон. У режимі Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Â«Segments» потрібні принаймні 2 точки." +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp msgid "Build Mode" msgstr "Режим вимірюваннÑ" @@ -21435,7 +21448,7 @@ msgstr "ПлаÑкіÑть" #: scene/3d/cull_instance.cpp servers/visual_server.cpp msgid "Portals" -msgstr "Віддзеркалити портали" +msgstr "Портали" #: scene/3d/cull_instance.cpp msgid "Portal Mode" @@ -21618,9 +21631,10 @@ msgid "NavMesh" msgstr "Запекти NavMesh" #: scene/3d/navigation_obstacle.cpp +#, fuzzy msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" "NavigationObstacle призначено лише Ð´Ð»Ñ Ð·Ð°Ð±ÐµÐ·Ð¿ÐµÑ‡ÐµÐ½Ð½Ñ Ð·Ð°Ñобів ÑƒÐ½Ð¸ÐºÐ½ÐµÐ½Ð½Ñ " "Ð·Ñ–Ñ‚ÐºÐ½ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñторового об'єкта." @@ -23659,6 +23673,11 @@ msgid "Pause Mode" msgstr "Режим панорамуваннÑ" #: scene/main/node.cpp +#, fuzzy +msgid "Physics Interpolation Mode" +msgstr "Режим інтерполÑції" + +#: scene/main/node.cpp msgid "Display Folded" msgstr "ПереглÑд без тіней" @@ -23687,10 +23706,6 @@ msgstr "Ðетипові параметри гри з багатьма Ð³Ñ€Ð°Ð²Ñ msgid "Process Priority" msgstr "ПріоритетніÑть процеÑу" -#: scene/main/node.cpp -msgid "Physics Interpolated" -msgstr "Інтерпольована фізика" - #: scene/main/scene_tree.cpp scene/main/timer.cpp msgid "Time Left" msgstr "ЗалишилоÑÑŒ чаÑу" @@ -24323,6 +24338,11 @@ msgstr "Іменований роздільник" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "Колір шрифту роздільника" + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "Колір кіÑток 1" @@ -24784,7 +24804,7 @@ msgstr "Ідентифікатор Ð¶Ð¸Ð²Ð»ÐµÐ½Ð½Ñ ÐºÐ°Ð¼ÐµÑ€Ð¸" #: scene/resources/environment.cpp msgid "Ambient Light" -msgstr "Збільшити відÑтуп" +msgstr "Ðавколишнє Ñвітло" #: scene/resources/environment.cpp msgid "Sky Contribution" @@ -25027,6 +25047,11 @@ msgid "Distance Field" msgstr "Поле відÑтані" #: scene/resources/gradient.cpp +#, fuzzy +msgid "Raw Data" +msgstr "Дані карти" + +#: scene/resources/gradient.cpp msgid "Offsets" msgstr "ЗміщеннÑ" diff --git a/editor/translations/ur_PK.po b/editor/translations/ur_PK.po index 6eee3eac1b..45876f3cd6 100644 --- a/editor/translations/ur_PK.po +++ b/editor/translations/ur_PK.po @@ -77,11 +77,12 @@ msgstr "سب سکریپشن بنائیں" msgid "Screen Orientation" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "" @@ -89,7 +90,7 @@ msgstr "" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Fullscreen" msgstr "" @@ -101,7 +102,7 @@ msgstr "" msgid "Minimized" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -115,10 +116,11 @@ msgstr "" msgid "Position" msgstr ".تمام کا انتخاب" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -591,6 +593,39 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +msgid "Display" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +msgid "Height" +msgstr "" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +msgid "Test Width" +msgstr "" + +#: core/project_settings.cpp +msgid "Test Height" +msgstr "" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1179,7 +1214,7 @@ msgstr "" msgid "Update Mode (How this property is set)" msgstr "" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "" @@ -5877,6 +5912,11 @@ msgstr "" msgid "Flat" msgstr "Ùلیٹ 1" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "سب سکریپشن بنائیں" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "" @@ -15699,38 +15739,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -msgid "Display" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -msgid "Height" -msgstr "" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -msgid "Test Width" -msgstr "" - -#: main/main.cpp -msgid "Test Height" -msgstr "" - #: main/main.cpp msgid "DPI" msgstr "" @@ -19904,6 +19912,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp #, fuzzy msgid "Build Mode" @@ -21571,7 +21584,7 @@ msgstr "" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -23638,6 +23651,11 @@ msgid "Pause Mode" msgstr "ایکشن منتقل کریں" #: scene/main/node.cpp +#, fuzzy +msgid "Physics Interpolation Mode" +msgstr "گنتی" + +#: scene/main/node.cpp msgid "Display Folded" msgstr "" @@ -23668,11 +23686,6 @@ msgstr "" msgid "Process Priority" msgstr "ایکشن منتقل کریں" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "گنتی" - #: scene/main/scene_tree.cpp scene/main/timer.cpp msgid "Time Left" msgstr "" @@ -24327,6 +24340,11 @@ msgstr "" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr ".تمام کا انتخاب" + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr ".تمام کا انتخاب" @@ -25090,6 +25108,10 @@ msgid "Distance Field" msgstr "" #: scene/resources/gradient.cpp +msgid "Raw Data" +msgstr "" + +#: scene/resources/gradient.cpp msgid "Offsets" msgstr "" diff --git a/editor/translations/vi.po b/editor/translations/vi.po index 4ab12f669d..276dbc7b3a 100644 --- a/editor/translations/vi.po +++ b/editor/translations/vi.po @@ -20,13 +20,14 @@ # SyliawDeV <thanhlongstranger@gmail.com>, 2021. # IoeCmcomc <hopdaigia2004@gmail.com>, 2021, 2022. # Hung <hungthitkhia@gmail.com>, 2021. +# PaweÅ‚ Fertyk <pfertyk@pfertyk.me>, 2022. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2022-04-25 15:02+0000\n" -"Last-Translator: IoeCmcomc <hopdaigia2004@gmail.com>\n" +"PO-Revision-Date: 2022-05-10 13:14+0000\n" +"Last-Translator: PaweÅ‚ Fertyk <pfertyk@pfertyk.me>\n" "Language-Team: Vietnamese <https://hosted.weblate.org/projects/godot-engine/" "godot/vi/>\n" "Language: vi\n" @@ -34,7 +35,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.12.1-dev\n" +"X-Generator: Weblate 4.12.1\n" #: core/bind/core_bind.cpp main/main.cpp msgid "Tablet Driver" @@ -89,11 +90,12 @@ msgstr "Cỡ cá»a sổ tối Ä‘a" msgid "Screen Orientation" msgstr "Hướng xoay mà n hình" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" msgstr "Cá»a sổ" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "Trà n viá»n" @@ -101,7 +103,7 @@ msgstr "Trà n viá»n" msgid "Per Pixel Transparency Enabled" msgstr "Báºt độ trong suốt má»—i Ä‘iểm ảnh" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Fullscreen" msgstr "Toà n mà n hình" @@ -113,7 +115,7 @@ msgstr "Äã cá»±c đại hoá" msgid "Minimized" msgstr "Äã cá»±c tiểu hoá" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "Äổi kÃch cỡ được" @@ -126,10 +128,11 @@ msgstr "Äổi kÃch cỡ được" msgid "Position" msgstr "Vị trÃ" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -588,6 +591,42 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +#, fuzzy +msgid "Display" +msgstr "Hiển thị tất cả" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "Chiá»u rá»™ng" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +msgid "Height" +msgstr "Chiá»u cao" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Width" +msgstr "Rá»™ng bên trái" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Height" +msgstr "Kiểm tra" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1174,7 +1213,7 @@ msgstr "Báºt/tắt kênh nà y." msgid "Update Mode (How this property is set)" msgstr "Cáºp nháºt chế độ (Cách thuá»™c tÃnh được thiết láºp)" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "Ná»™i suy" @@ -1760,7 +1799,7 @@ msgid "" "target node." msgstr "" "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." +"táºp lệnh và o nút mục tiêu." #: editor/connections_dialog.cpp msgid "Connect to Node:" @@ -5967,6 +6006,11 @@ msgstr "Giữ Ctrl để là m tròn vá» số nguyên. Giữ Shift để sá»a t msgid "Flat" msgstr "" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "Chế độ va chạm" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "Chá»n Nút để Nháºp" @@ -14947,9 +14991,8 @@ msgid "Paste Node(s)" msgstr "Dán các nút" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Detach Script" -msgstr "ÄÃnh kèm Script" +msgstr "Tách táºp lệnh ra" #: editor/scene_tree_dock.cpp msgid "This operation can't be done on the tree root." @@ -15122,7 +15165,7 @@ msgstr "Không thể thá»±c hiện thao tác nà y trên Cảnh được khởi t #: editor/scene_tree_dock.cpp msgid "Attach Script" -msgstr "ÄÃnh kèm Script" +msgstr "ÄÃnh kèm táºp lệnh" #: editor/scene_tree_dock.cpp #, fuzzy @@ -15178,8 +15221,8 @@ msgid "" "This is probably because this editor was built with all language modules " "disabled." msgstr "" -"Không thể Ä‘Ãnh kèm tệp lệnh: Không ghi nháºn thấy ngôn ngữ nà o.\n" -"Vấn đỠcó thể là do các module ngôn ngữ bị vô hiệu hóa khi trình biên táºp " +"Không thể Ä‘Ãnh kèm táºp lệnh: Không ghi nháºn thấy ngôn ngữ nà o.\n" +"Vấn đỠcó thể là do các mô Ä‘un ngôn ngữ bị vô hiệu hóa khi trình chỉnh sá»a " "nà y được xây dá»±ng." #: editor/scene_tree_dock.cpp @@ -15231,9 +15274,8 @@ msgstr "" "Tệp tin cảnh giống như má»™t nút. Tạo má»™t cảnh kế thừa nếu nó không có nút gốc." #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Attach a new or existing script to the selected node." -msgstr "ÄÃnh kèm má»™t tệp lệnh cho nút đã chá»n." +msgstr "ÄÃnh kèm má»™t táºp lệnh cho nút đã chá»n." #: editor/scene_tree_dock.cpp #, fuzzy @@ -15514,7 +15556,7 @@ msgstr "Tệp lệnh có sẵn:" #: editor/script_create_dialog.cpp msgid "Attach Node Script" -msgstr "ÄÃnh kèm lệnh cho nút" +msgstr "ÄÃnh kèm táºp lệnh cá»§a nút" #: editor/script_editor_debugger.cpp msgid "Remote " @@ -15995,41 +16037,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -#, fuzzy -msgid "Display" -msgstr "Hiển thị tất cả" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "Chiá»u rá»™ng" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -msgid "Height" -msgstr "Chiá»u cao" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -#, fuzzy -msgid "Test Width" -msgstr "Rá»™ng bên trái" - -#: main/main.cpp -#, fuzzy -msgid "Test Height" -msgstr "Kiểm tra" - #: main/main.cpp msgid "DPI" msgstr "" @@ -17616,7 +17623,7 @@ msgstr "Tên không phải định danh hợp lệ:" #: modules/visual_script/visual_script_editor.cpp msgid "Name already in use by another func/var/signal:" -msgstr "Tên đã được sá» dụng bởi func/var/singal khác:" +msgstr "Tên đã được sá» dụng bởi func/var/signal khác:" #: modules/visual_script/visual_script_editor.cpp msgid "Rename Function" @@ -20419,6 +20426,11 @@ msgstr "Äa giác không hợp lệ. Cần Ãt nhất 3 Ä‘iểm trong chế đỠmsgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "Äa giác không hợp lệ. Cần Ãt nhất 2 Ä‘iểm trong chế độ dá»±ng 'Segments'." +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp #, fuzzy msgid "Build Mode" @@ -22237,7 +22249,7 @@ msgstr "Lưới" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -24456,6 +24468,11 @@ msgstr "Chế độ Xoay" #: scene/main/node.cpp #, fuzzy +msgid "Physics Interpolation Mode" +msgstr "Ná»™i suy" + +#: scene/main/node.cpp +#, fuzzy msgid "Display Folded" msgstr "Hiển thị tất cả" @@ -24489,11 +24506,6 @@ msgstr "Gán nhiá»u:" msgid "Process Priority" msgstr "Chỉnh độ ưu tiên cá»§a ô" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "Ná»™i suy" - #: scene/main/scene_tree.cpp scene/main/timer.cpp #, fuzzy msgid "Time Left" @@ -25193,6 +25205,11 @@ msgstr "" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "Thu phóng (theo tỉ lệ):" + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "Xóa mục Lá»›p" @@ -25993,6 +26010,11 @@ msgstr "Chế độ táºp trung" #: scene/resources/gradient.cpp #, fuzzy +msgid "Raw Data" +msgstr "Chiá»u sâu" + +#: scene/resources/gradient.cpp +#, fuzzy msgid "Offsets" msgstr "Äá»™ dá»i:" diff --git a/editor/translations/zh_CN.po b/editor/translations/zh_CN.po index e1ec7d79d6..71413f6120 100644 --- a/editor/translations/zh_CN.po +++ b/editor/translations/zh_CN.po @@ -89,7 +89,7 @@ msgstr "" "Project-Id-Version: Chinese (Simplified) (Godot Engine)\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" "POT-Creation-Date: 2018-01-20 12:15+0200\n" -"PO-Revision-Date: 2022-04-28 11:12+0000\n" +"PO-Revision-Date: 2022-05-07 05:11+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" @@ -98,7 +98,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.12.1-dev\n" +"X-Generator: Weblate 4.12.1\n" #: core/bind/core_bind.cpp main/main.cpp msgid "Tablet Driver" @@ -152,11 +152,12 @@ msgstr "çª—å£æœ€å¤§å¤§å°" msgid "Screen Orientation" msgstr "çª—å£æœå‘" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" msgstr "窗å£" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "æ— è¾¹æ¡†" @@ -164,7 +165,7 @@ msgstr "æ— è¾¹æ¡†" msgid "Per Pixel Transparency Enabled" msgstr "å¯ç”¨åƒç´ çº§é€æ˜Ž" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Fullscreen" msgstr "å…¨å±" @@ -176,7 +177,7 @@ msgstr "最大化" msgid "Minimized" msgstr "最å°åŒ–" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "å¯è°ƒæ•´å¤§å°" @@ -189,10 +190,11 @@ msgstr "å¯è°ƒæ•´å¤§å°" msgid "Position" msgstr "ä½ç½®" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -642,6 +644,39 @@ msgstr "使用自定义用户目录" msgid "Custom User Dir Name" msgstr "自定义用户目录åç§°" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +msgid "Display" +msgstr "显示" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "宽度" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +msgid "Height" +msgstr "高度" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "置顶" + +#: core/project_settings.cpp +msgid "Test Width" +msgstr "测试宽度" + +#: core/project_settings.cpp +msgid "Test Height" +msgstr "测试高度" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1219,7 +1254,7 @@ msgstr "切æ¢è¯¥è½¨é“的开关。" msgid "Update Mode (How this property is set)" msgstr "更新模å¼ï¼ˆè®¾ç½®å±žæ€§çš„æ–¹å¼ï¼‰" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "æ’值模å¼" @@ -5880,6 +5915,11 @@ msgstr "æŒ‰ä½ %s å–æ•´ã€‚ æŒ‰ä½ Shift èŽ·å–æ›´ç²¾ç¡®çš„å˜åŒ–。" msgid "Flat" msgstr "æ‰å¹³" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "滑动æ¡" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "选择è¦å¯¼å…¥çš„节点" @@ -6563,7 +6603,6 @@ msgid "Delimiter" msgstr "分隔符" #: editor/import/resource_importer_layered_texture.cpp -#, fuzzy msgid "ColorCorrect" msgstr "é¢œè‰²æ ¡æ£" @@ -6852,14 +6891,12 @@ msgid "Saving..." msgstr "ä¿å˜ä¸..." #: editor/import/resource_importer_texture.cpp -#, fuzzy msgid "2D, Detect 3D" -msgstr "检测 3D" +msgstr "2Dã€æ£€æµ‹ 3D" #: editor/import/resource_importer_texture.cpp -#, fuzzy msgid "2D Pixel" -msgstr "实体åƒç´ " +msgstr "2D åƒç´ " #: editor/import/resource_importer_texture.cpp scene/resources/texture.cpp msgid "Lossy Quality" @@ -8171,7 +8208,7 @@ msgstr "测试" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Failed to get repository configuration." -msgstr "" +msgstr "获å–仓库é…置失败。" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Assets ZIP File" @@ -9866,7 +9903,7 @@ msgstr "åŒæ¥éª¨éª¼åˆ°å¤šè¾¹å½¢" #: editor/plugins/ray_cast_2d_editor_plugin.cpp msgid "Set cast_to" -msgstr "" +msgstr "设置 cast_to" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "ERROR: Couldn't load resource!" @@ -14683,17 +14720,15 @@ msgstr "转为本地" #: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp msgid "Another node already uses this unique name in the scene." -msgstr "" +msgstr "该场景ä¸å·²æœ‰ä½¿ç”¨è¯¥å”¯ä¸€å称的节点。" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Enable Scene Unique Name" -msgstr "唯一åç§°" +msgstr "å¯ç”¨åœºæ™¯å”¯ä¸€åç§°" #: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp -#, fuzzy msgid "Disable Scene Unique Name" -msgstr "唯一åç§°" +msgstr "ç¦ç”¨åœºæ™¯å”¯ä¸€åç§°" #: editor/scene_tree_dock.cpp msgid "New Scene Root" @@ -14767,7 +14802,7 @@ msgstr "å资æº" #: editor/scene_tree_dock.cpp msgid "Access as Scene Unique Name" -msgstr "" +msgstr "作为场景唯一å称访问" #: editor/scene_tree_dock.cpp msgid "Clear Inheritance" @@ -14903,6 +14938,8 @@ msgid "" "with the '%s' prefix in a node path.\n" "Click to disable this." msgstr "" +"这个节点å¯ä»¥åœ¨åœºæ™¯ä¸çš„ä»»æ„ä½ç½®é€šè¿‡åœ¨èŠ‚ç‚¹è·¯å¾„ä¸ä¸ºå…¶åŠ ä¸Šâ€œ%sâ€å‰ç¼€æ¥è®¿é—®ã€‚\n" +"点击ç¦ç”¨ã€‚" #: editor/scene_tree_editor.cpp msgid "" @@ -15556,38 +15593,6 @@ msgstr "回退至 GLES2" msgid "Use Nvidia Rect Flicker Workaround" msgstr "使用 Nvidia 矩形闪çƒå˜é€šæŽªæ–½" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -msgid "Display" -msgstr "显示" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "宽度" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -msgid "Height" -msgstr "高度" - -#: main/main.cpp -msgid "Always On Top" -msgstr "置顶" - -#: main/main.cpp -msgid "Test Width" -msgstr "测试宽度" - -#: main/main.cpp -msgid "Test Height" -msgstr "测试高度" - #: main/main.cpp msgid "DPI" msgstr "DPI" @@ -15689,9 +15694,8 @@ msgid "Physics Interpolation" msgstr "ç‰©ç†æ’值" #: main/main.cpp -#, fuzzy msgid "Enable Warnings" -msgstr "å¯ç”¨ç›é€‰" +msgstr "å¯ç”¨è¦å‘Š" #: main/main.cpp msgid "Frame Delay Msec" @@ -19184,9 +19188,8 @@ msgid "Digest Algorithm" msgstr "摘è¦ç®—法" #: platform/windows/export/export.cpp -#, fuzzy msgid "Modify Resources" -msgstr "å¤åˆ¶èµ„æº" +msgstr "修改资æº" #: platform/windows/export/export.cpp msgid "File Version" @@ -19593,6 +19596,11 @@ msgstr "å¤šè¾¹å½¢æ— æ•ˆã€‚â€œSolidsâ€æž„建模å¼éœ€è¦è‡³å°‘三个点。" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "å¤šè¾¹å½¢æ— æ•ˆã€‚â€œSegmentsâ€æž„建模å¼éœ€è¦è‡³å°‘两个点。" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp msgid "Build Mode" msgstr "构建模å¼" @@ -21208,14 +21216,14 @@ msgstr "" "æä¾›å¯¼èˆªæ•°æ®ã€‚" #: scene/3d/navigation_mesh_instance.cpp -#, fuzzy msgid "NavMesh" -msgstr "çƒ˜ç„™å¯¼èˆªç½‘æ ¼" +msgstr "å¯¼èˆªç½‘æ ¼" #: scene/3d/navigation_obstacle.cpp +#, fuzzy msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "NavigationObstacle åªèƒ½ç”¨äºŽä¸º Spatial 对象é¿å…碰撞。" #: scene/3d/occluder.cpp @@ -23191,6 +23199,8 @@ msgid "" "Setting node name '%s' to be unique within scene for '%s', but it's already " "claimed by '%s'. This node is no longer set unique." msgstr "" +"æ£åœ¨å°†åœºæ™¯ä¸çš„唯一节点å称“%sâ€è®¾ç»™â€œ%sâ€ï¼Œä½†è¯¥å称已被“%sâ€å 用。这个节点ä¸å†å”¯" +"一。" #: scene/main/node.cpp msgid "Name Num Separator" @@ -23213,13 +23223,17 @@ msgid "Pause Mode" msgstr "æš‚åœæ¨¡å¼" #: scene/main/node.cpp +#, fuzzy +msgid "Physics Interpolation Mode" +msgstr "ç‰©ç†æ’值" + +#: scene/main/node.cpp msgid "Display Folded" msgstr "显示折å " #: scene/main/node.cpp -#, fuzzy msgid "Unique Name In Owner" -msgstr "唯一åç§°" +msgstr "所有者唯一åç§°" #: scene/main/node.cpp msgid "Filename" @@ -23241,10 +23255,6 @@ msgstr "自定义多人" msgid "Process Priority" msgstr "处ç†ä¼˜å…ˆçº§" -#: scene/main/node.cpp -msgid "Physics Interpolated" -msgstr "ç‰©ç†æ’值" - #: scene/main/scene_tree.cpp scene/main/timer.cpp msgid "Time Left" msgstr "剩余时间" @@ -23852,6 +23862,11 @@ msgid "Labeled Separator Right" msgstr "带å称分隔线å³ä¾§" #: scene/resources/default_theme/default_theme.cpp +#, fuzzy +msgid "Font Separator" +msgstr "分隔线å—体颜色" + +#: scene/resources/default_theme/default_theme.cpp msgid "Font Color Accel" msgstr "å¿«æ·é”®å—体颜色" @@ -24532,6 +24547,11 @@ msgid "Distance Field" msgstr "è·ç¦»åœº" #: scene/resources/gradient.cpp +#, fuzzy +msgid "Raw Data" +msgstr "地图数æ®" + +#: scene/resources/gradient.cpp msgid "Offsets" msgstr "åç§»" @@ -25133,7 +25153,7 @@ msgstr "扩展边è·" #: scene/resources/style_box.cpp msgid "Skew" -msgstr "" +msgstr "åæ–œ" #: scene/resources/style_box.cpp msgid "Corner Radius" diff --git a/editor/translations/zh_HK.po b/editor/translations/zh_HK.po index da22ae2254..5d38b98427 100644 --- a/editor/translations/zh_HK.po +++ b/editor/translations/zh_HK.po @@ -79,11 +79,12 @@ msgstr "下一個腳本" msgid "Screen Orientation" msgstr "開啓最近的" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "" @@ -91,7 +92,7 @@ msgstr "" msgid "Per Pixel Transparency Enabled" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp #, fuzzy msgid "Fullscreen" msgstr "全螢幕" @@ -104,7 +105,7 @@ msgstr "" msgid "Minimized" msgstr "" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "" @@ -118,10 +119,11 @@ msgstr "" msgid "Position" msgstr "åªé™é¸ä¸" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -609,6 +611,42 @@ msgstr "" msgid "Custom User Dir Name" msgstr "" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +#, fuzzy +msgid "Display" +msgstr "全部å–代" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +msgid "Height" +msgstr "" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Width" +msgstr "線性" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Height" +msgstr "測試" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1218,7 +1256,7 @@ msgstr "" msgid "Update Mode (How this property is set)" msgstr "" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "模å¼" @@ -6145,6 +6183,11 @@ msgstr "" msgid "Flat" msgstr "" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "無干擾模å¼" + #: editor/editor_sub_scene.cpp #, fuzzy msgid "Select Node(s) to Import" @@ -16368,41 +16411,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -#, fuzzy -msgid "Display" -msgstr "全部å–代" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -msgid "Height" -msgstr "" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -#, fuzzy -msgid "Test Width" -msgstr "線性" - -#: main/main.cpp -#, fuzzy -msgid "Test Height" -msgstr "測試" - #: main/main.cpp msgid "DPI" msgstr "" @@ -20720,6 +20728,11 @@ msgstr "" msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp #, fuzzy msgid "Build Mode" @@ -22435,7 +22448,7 @@ msgstr "" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -24592,6 +24605,11 @@ msgstr "鏿“‡æ¨¡å¼" #: scene/main/node.cpp #, fuzzy +msgid "Physics Interpolation Mode" +msgstr "模å¼" + +#: scene/main/node.cpp +#, fuzzy msgid "Display Folded" msgstr "全部å–代" @@ -24622,11 +24640,6 @@ msgstr "" msgid "Process Priority" msgstr "檔案" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "模å¼" - #: scene/main/scene_tree.cpp scene/main/timer.cpp #, fuzzy msgid "Time Left" @@ -25304,6 +25317,11 @@ msgstr "" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "ç¿»è¯:" + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "移除é¸é …" @@ -26094,6 +26112,11 @@ msgid "Distance Field" msgstr "無干擾模å¼" #: scene/resources/gradient.cpp +#, fuzzy +msgid "Raw Data" +msgstr "MeshLibrary..." + +#: scene/resources/gradient.cpp msgid "Offsets" msgstr "" diff --git a/editor/translations/zh_TW.po b/editor/translations/zh_TW.po index e01991c1ec..703348c019 100644 --- a/editor/translations/zh_TW.po +++ b/editor/translations/zh_TW.po @@ -105,11 +105,12 @@ msgstr "最大視窗大å°" msgid "Screen Orientation" msgstr "螢幕方å‘" -#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp +#: platform/uwp/os_uwp.cpp msgid "Window" msgstr "視窗" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" msgstr "無邊框" @@ -117,7 +118,7 @@ msgstr "無邊框" msgid "Per Pixel Transparency Enabled" msgstr "啟用單åƒç´ 逿˜Žåº¦" -#: core/bind/core_bind.cpp main/main.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp msgid "Fullscreen" msgstr "全螢幕" @@ -129,7 +130,7 @@ msgstr "最大化" msgid "Minimized" msgstr "最å°åŒ–" -#: core/bind/core_bind.cpp main/main.cpp scene/gui/dialogs.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" msgstr "å¯èª¿æ•´å¤§å°çš„" @@ -142,10 +143,11 @@ msgstr "å¯èª¿æ•´å¤§å°çš„" msgid "Position" msgstr "ä½ç½®" -#: core/bind/core_bind.cpp editor/editor_settings.cpp main/main.cpp -#: modules/gridmap/grid_map.cpp modules/visual_script/visual_script_nodes.cpp -#: scene/2d/tile_map.cpp scene/3d/camera.cpp scene/3d/light.cpp -#: scene/gui/control.cpp scene/gui/graph_edit.cpp scene/main/viewport.cpp +#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp +#: main/main.cpp modules/gridmap/grid_map.cpp +#: modules/visual_script/visual_script_nodes.cpp scene/2d/tile_map.cpp +#: scene/3d/camera.cpp scene/3d/light.cpp scene/gui/control.cpp +#: scene/gui/graph_edit.cpp scene/main/viewport.cpp #: scene/resources/dynamic_font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp @@ -617,6 +619,43 @@ msgstr "使用自訂使用者目錄" msgid "Custom User Dir Name" msgstr "自訂使用者目錄å稱" +#: core/project_settings.cpp main/main.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/os_uwp.cpp +#, fuzzy +msgid "Display" +msgstr "全部顯示" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp +#: scene/gui/text_edit.cpp scene/resources/texture.cpp +msgid "Width" +msgstr "" + +#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp +#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp +#: scene/2d/light_2d.cpp scene/resources/capsule_shape.cpp +#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp +#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp +#, fuzzy +msgid "Height" +msgstr "燈光" + +#: core/project_settings.cpp +msgid "Always On Top" +msgstr "" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Width" +msgstr "左延展" + +#: core/project_settings.cpp +#, fuzzy +msgid "Test Height" +msgstr "測試" + #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp msgid "Audio" @@ -1221,7 +1260,7 @@ msgstr "打開ï¼é—œé–‰æ¤è»Œé“。" msgid "Update Mode (How this property is set)" msgstr "更新模å¼ï¼ˆå±¬æ€§è¨å®šæ–¹æ³•)" -#: editor/animation_track_editor.cpp +#: editor/animation_track_editor.cpp scene/resources/gradient.cpp msgid "Interpolation Mode" msgstr "æ’值模å¼" @@ -6082,6 +6121,11 @@ msgstr "æŒ‰ä½ %s 以喿•´æ•¸ã€‚æŒ‰ä½ Shift 以進行更精確的更動。" msgid "Flat" msgstr "å¹³é¢0" +#: editor/editor_spin_slider.cpp +#, fuzzy +msgid "Hide Slider" +msgstr "碰撞模å¼" + #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" msgstr "鏿“‡è¦åŒ¯å…¥çš„節點" @@ -15905,42 +15949,6 @@ msgstr "" msgid "Use Nvidia Rect Flicker Workaround" msgstr "" -#: main/main.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/os_uwp.cpp -#, fuzzy -msgid "Display" -msgstr "全部顯示" - -#: main/main.cpp modules/csg/csg_shape.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp -#: scene/gui/text_edit.cpp scene/resources/texture.cpp -msgid "Width" -msgstr "" - -#: main/main.cpp modules/csg/csg_shape.cpp modules/gltf/gltf_node.cpp -#: modules/opensimplex/noise_texture.cpp scene/2d/light_2d.cpp -#: scene/resources/capsule_shape.cpp scene/resources/capsule_shape_2d.cpp -#: scene/resources/cylinder_shape.cpp scene/resources/font.cpp -#: scene/resources/navigation_mesh.cpp scene/resources/primitive_meshes.cpp -#: scene/resources/texture.cpp -#, fuzzy -msgid "Height" -msgstr "燈光" - -#: main/main.cpp -msgid "Always On Top" -msgstr "" - -#: main/main.cpp -#, fuzzy -msgid "Test Width" -msgstr "左延展" - -#: main/main.cpp -#, fuzzy -msgid "Test Height" -msgstr "測試" - #: main/main.cpp msgid "DPI" msgstr "" @@ -20309,6 +20317,11 @@ msgstr "ç„¡æ•ˆçš„å¤šé‚Šå½¢ã€‚è‡³å°‘å¿…é ˆæœ‰ä¸‰å€‹é»žç‚ºã€ŒSolidsã€å»ºæ§‹æ¨¡å¼ msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "ç„¡æ•ˆçš„å¤šé‚Šå½¢ã€‚è‡³å°‘å¿…é ˆæœ‰ 2 個點為「Segmentsã€å»ºæ§‹æ¨¡å¼ã€‚" +#: scene/2d/collision_polygon_2d.cpp scene/2d/collision_shape_2d.cpp +msgid "" +"The One Way Collision property will be ignored when the parent is an Area2D." +msgstr "" + #: scene/2d/collision_polygon_2d.cpp #, fuzzy msgid "Build Mode" @@ -22125,7 +22138,7 @@ msgstr "製作 NavMesh" #: scene/3d/navigation_obstacle.cpp msgid "" "The NavigationObstacle only serves to provide collision avoidance to a " -"spatial object." +"Spatial inheriting parent object." msgstr "" #: scene/3d/occluder.cpp @@ -24395,6 +24408,11 @@ msgstr "平移模å¼" #: scene/main/node.cpp #, fuzzy +msgid "Physics Interpolation Mode" +msgstr "æ’值模å¼" + +#: scene/main/node.cpp +#, fuzzy msgid "Display Folded" msgstr "顯示無陰影" @@ -24428,11 +24446,6 @@ msgstr "è¨å®šå¤šå€‹ï¼š" msgid "Process Priority" msgstr "啟用優先級" -#: scene/main/node.cpp -#, fuzzy -msgid "Physics Interpolated" -msgstr "æ’值模å¼" - #: scene/main/scene_tree.cpp scene/main/timer.cpp #, fuzzy msgid "Time Left" @@ -25141,6 +25154,11 @@ msgstr "帶å稱的分隔線" #: scene/resources/default_theme/default_theme.cpp #, fuzzy +msgid "Font Separator" +msgstr "色彩é‹ç®—å。" + +#: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "Font Color Accel" msgstr "釿–°å‘½åé¡è‰²é …ç›®" @@ -25949,6 +25967,11 @@ msgstr "專注模å¼" #: scene/resources/gradient.cpp #, fuzzy +msgid "Raw Data" +msgstr "深度" + +#: scene/resources/gradient.cpp +#, fuzzy msgid "Offsets" msgstr "å移:" diff --git a/main/main.cpp b/main/main.cpp index 191f4d684f..4d4173b2ee 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -2189,10 +2189,10 @@ bool Main::start() { print_line("Merging docs..."); doc.merge_from(docsrc); - for (RBSet<String>::Element *E = checked_paths.front(); E; E = E->next()) { - print_line("Erasing old docs at: " + E->get()); - err = DocTools::erase_classes(E->get()); - ERR_FAIL_COND_V_MSG(err != OK, false, "Error erasing old docs at: " + E->get() + ": " + itos(err)); + for (const String &E : checked_paths) { + print_line("Erasing old docs at: " + E); + err = DocTools::erase_classes(E); + ERR_FAIL_COND_V_MSG(err != OK, false, "Error erasing old docs at: " + E + ": " + itos(err)); } print_line("Generating new docs..."); diff --git a/modules/gdscript/gdscript.cpp b/modules/gdscript/gdscript.cpp index e400d0bf94..25f4823d92 100644 --- a/modules/gdscript/gdscript.cpp +++ b/modules/gdscript/gdscript.cpp @@ -764,8 +764,8 @@ bool GDScript::_update_exports(bool *r_err, bool p_recursive_call, PlaceHolderSc _update_exports_values(values, propnames); if (changed) { - for (RBSet<PlaceHolderScriptInstance *>::Element *E = placeholders.front(); E; E = E->next()) { - E->get()->update(propnames, values); + for (PlaceHolderScriptInstance *E : placeholders) { + E->update(propnames, values); } } else { p_instance_to_update->update(propnames, values); @@ -790,8 +790,8 @@ void GDScript::update_exports() { RBSet<ObjectID> copy = inheriters_cache; //might get modified - for (RBSet<ObjectID>::Element *E = copy.front(); E; E = E->next()) { - Object *id = ObjectDB::get_instance(E->get()); + for (const ObjectID &E : copy) { + Object *id = ObjectDB::get_instance(E); GDScript *s = Object::cast_to<GDScript>(id); if (!s) { continue; @@ -939,8 +939,8 @@ void GDScript::get_constants(HashMap<StringName, Variant> *p_constants) { void GDScript::get_members(RBSet<StringName> *p_members) { if (p_members) { - for (RBSet<StringName>::Element *E = members.front(); E; E = E->next()) { - p_members->insert(E->get()); + for (const StringName &E : members) { + p_members->insert(E); } } } diff --git a/modules/gdscript/gdscript_compiler.cpp b/modules/gdscript/gdscript_compiler.cpp index cb389fd86a..478fafc930 100644 --- a/modules/gdscript/gdscript_compiler.cpp +++ b/modules/gdscript/gdscript_compiler.cpp @@ -108,11 +108,15 @@ GDScriptDataType GDScriptCompiler::_gdtype_from_datatype(const GDScriptParser::D result.native_type = result.script_type->get_instance_base_type(); } break; case GDScriptParser::DataType::CLASS: { - // Locate class by constructing the path to it and following that path + // Locate class by constructing the path to it and following that path. GDScriptParser::ClassNode *class_type = p_datatype.class_type; if (class_type) { - const bool is_inner_by_path = (!main_script->path.is_empty()) && (class_type->fqcn.split("::")[0] == main_script->path); - const bool is_inner_by_name = (!main_script->name.is_empty()) && (class_type->fqcn.split("::")[0] == main_script->name); + result.kind = GDScriptDataType::GDSCRIPT; + result.builtin_type = p_datatype.builtin_type; + + String class_name = class_type->fqcn.split("::")[0]; + const bool is_inner_by_path = (!main_script->path.is_empty()) && (class_name == main_script->path); + const bool is_inner_by_name = (!main_script->name.is_empty()) && (class_name == main_script->name); if (is_inner_by_path || is_inner_by_name) { // Local class. List<StringName> names; @@ -131,16 +135,41 @@ GDScriptDataType GDScriptCompiler::_gdtype_from_datatype(const GDScriptParser::D script = script->subclasses[names.back()->get()]; names.pop_back(); } - result.kind = GDScriptDataType::GDSCRIPT; result.script_type = script.ptr(); result.native_type = script->get_instance_base_type(); - result.builtin_type = p_datatype.builtin_type; } else { - result.kind = GDScriptDataType::GDSCRIPT; - result.script_type_ref = GDScriptCache::get_shallow_script(p_datatype.script_path, main_script->path); + // Inner class. + PackedStringArray classes = class_type->fqcn.split("::"); + if (!classes.is_empty()) { + for (GDScript *script : parsed_classes) { + // Checking of inheritance structure of inner class to find a correct script link. + if (script->name == classes[classes.size() - 1]) { + PackedStringArray classes2 = script->fully_qualified_name.split("::"); + bool valid = true; + if (classes.size() != classes2.size()) { + valid = false; + } else { + for (int i = 0; i < classes.size(); i++) { + if (classes[i] != classes2[i]) { + valid = false; + break; + } + } + } + if (!valid) { + continue; + } + result.script_type_ref = Ref<GDScript>(script); + break; + } + } + } + if (result.script_type_ref.is_null()) { + result.script_type_ref = GDScriptCache::get_shallow_script(p_datatype.script_path, main_script->path); + } + result.script_type = result.script_type_ref.ptr(); result.native_type = p_datatype.native_type; - result.builtin_type = p_datatype.builtin_type; } } } break; diff --git a/modules/gdscript/gdscript_parser.cpp b/modules/gdscript/gdscript_parser.cpp index 8563f2b432..96d1f68f60 100644 --- a/modules/gdscript/gdscript_parser.cpp +++ b/modules/gdscript/gdscript_parser.cpp @@ -1808,7 +1808,6 @@ GDScriptParser::MatchNode *GDScriptParser::parse_match() { #ifdef DEBUG_ENABLED bool all_have_return = true; bool have_wildcard = false; - bool wildcard_has_return = false; bool have_wildcard_without_continue = false; #endif @@ -1826,9 +1825,6 @@ GDScriptParser::MatchNode *GDScriptParser::parse_match() { if (branch->has_wildcard) { have_wildcard = true; - if (branch->block->has_return) { - wildcard_has_return = true; - } if (!branch->block->has_continue) { have_wildcard_without_continue = true; } @@ -1843,7 +1839,7 @@ GDScriptParser::MatchNode *GDScriptParser::parse_match() { consume(GDScriptTokenizer::Token::DEDENT, R"(Expected an indented block after "match" statement.)"); #ifdef DEBUG_ENABLED - if (wildcard_has_return || (all_have_return && have_wildcard)) { + if (all_have_return && have_wildcard) { current_suite->has_return = true; } #endif diff --git a/modules/gdscript/language_server/gdscript_workspace.cpp b/modules/gdscript/language_server/gdscript_workspace.cpp index d9de112bb0..ffd3cfa907 100644 --- a/modules/gdscript/language_server/gdscript_workspace.cpp +++ b/modules/gdscript/language_server/gdscript_workspace.cpp @@ -794,7 +794,7 @@ GDScriptWorkspace::~GDScriptWorkspace() { cached_parsers.insert(E.key); } - for (RBSet<String>::Element *E = cached_parsers.front(); E; E = E->next()) { - remove_cache_parser(E->get()); + for (const String &E : cached_parsers) { + remove_cache_parser(E); } } diff --git a/modules/gdscript/tests/scripts/parser/warnings/unreachable_code_after_return_bug_55154.gd b/modules/gdscript/tests/scripts/parser/warnings/unreachable_code_after_return_bug_55154.gd new file mode 100644 index 0000000000..d00d483a73 --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/warnings/unreachable_code_after_return_bug_55154.gd @@ -0,0 +1,16 @@ +func test(): + var foo := "bar" + match foo: + "baz": + return + _: + pass + match foo: + "baz": + return + match foo: + "bar": + pass + _: + return + print("reached") diff --git a/modules/gdscript/tests/scripts/parser/warnings/unreachable_code_after_return_bug_55154.out b/modules/gdscript/tests/scripts/parser/warnings/unreachable_code_after_return_bug_55154.out new file mode 100644 index 0000000000..47db6b631b --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/warnings/unreachable_code_after_return_bug_55154.out @@ -0,0 +1,2 @@ +GDTEST_OK +reached diff --git a/modules/gridmap/grid_map.cpp b/modules/gridmap/grid_map.cpp index 9da137f9d5..c70a8121e8 100644 --- a/modules/gridmap/grid_map.cpp +++ b/modules/gridmap/grid_map.cpp @@ -483,15 +483,15 @@ bool GridMap::_octant_update(const OctantKey &p_key) { HashMap<int, List<Pair<Transform3D, IndexKey>>> multimesh_items; - for (RBSet<IndexKey>::Element *E = g.cells.front(); E; E = E->next()) { - ERR_CONTINUE(!cell_map.has(E->get())); - const Cell &c = cell_map[E->get()]; + for (const IndexKey &E : g.cells) { + ERR_CONTINUE(!cell_map.has(E)); + const Cell &c = cell_map[E]; if (!mesh_library.is_valid() || !mesh_library->has_item(c.item)) { continue; } - Vector3 cellpos = Vector3(E->get().x, E->get().y, E->get().z); + Vector3 cellpos = Vector3(E.x, E.y, E.z); Vector3 ofs = _get_offset(); Transform3D xform; @@ -507,7 +507,7 @@ bool GridMap::_octant_update(const OctantKey &p_key) { Pair<Transform3D, IndexKey> p; p.first = xform * mesh_library->get_item_mesh_transform(c.item); - p.second = E->get(); + p.second = E; multimesh_items[c.item].push_back(p); } } @@ -540,7 +540,7 @@ bool GridMap::_octant_update(const OctantKey &p_key) { nm.region = region; } - g.navmesh_ids[E->get()] = nm; + g.navmesh_ids[E] = nm; } } diff --git a/modules/navigation/nav_map.h b/modules/navigation/nav_map.h index 0ebdea30e1..f58a78d4ca 100644 --- a/modules/navigation/nav_map.h +++ b/modules/navigation/nav_map.h @@ -28,8 +28,8 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#ifndef RVO_SPACE_H -#define RVO_SPACE_H +#ifndef NAV_MAP_H +#define NAV_MAP_H #include "nav_rid.h" @@ -141,4 +141,4 @@ private: void clip_path(const std::vector<gd::NavigationPoly> &p_navigation_polys, Vector<Vector3> &path, const gd::NavigationPoly *from_poly, const Vector3 &p_to_point, const gd::NavigationPoly *p_to_poly) const; }; -#endif // RVO_SPACE_H +#endif // NAV_MAP_H diff --git a/modules/noise/fastnoise_lite.cpp b/modules/noise/fastnoise_lite.cpp index 914cdec24c..b21e3247d7 100644 --- a/modules/noise/fastnoise_lite.cpp +++ b/modules/noise/fastnoise_lite.cpp @@ -300,6 +300,12 @@ real_t FastNoiseLite::get_domain_warp_fractal_gain() const { // Noise interface functions. real_t FastNoiseLite::get_noise_1d(real_t p_x) const { + p_x += offset.x; + if (domain_warp_enabled) { + // Needed since DomainWarp expects a reference. + real_t y_dummy = 0; + _domain_warp_noise.DomainWarp(p_x, y_dummy); + } return get_noise_2d(p_x, 0.0); } @@ -308,10 +314,12 @@ real_t FastNoiseLite::get_noise_2dv(Vector2 p_v) const { } real_t FastNoiseLite::get_noise_2d(real_t p_x, real_t p_y) const { + p_x += offset.x; + p_y += offset.y; if (domain_warp_enabled) { _domain_warp_noise.DomainWarp(p_x, p_y); } - return _noise.GetNoise(p_x + offset.x, p_y + offset.y); + return _noise.GetNoise(p_x, p_y); } real_t FastNoiseLite::get_noise_3dv(Vector3 p_v) const { @@ -319,10 +327,13 @@ real_t FastNoiseLite::get_noise_3dv(Vector3 p_v) const { } real_t FastNoiseLite::get_noise_3d(real_t p_x, real_t p_y, real_t p_z) const { + p_x += offset.x; + p_y += offset.y; + p_z += offset.z; if (domain_warp_enabled) { _domain_warp_noise.DomainWarp(p_x, p_y, p_z); } - return _noise.GetNoise(p_x + offset.x, p_y + offset.y, p_z + offset.z); + return _noise.GetNoise(p_x, p_y, p_z); } void FastNoiseLite::_changed() { diff --git a/modules/openxr/openxr_api.cpp b/modules/openxr/openxr_api.cpp index 6e94e3b444..f42af0492f 100644 --- a/modules/openxr/openxr_api.cpp +++ b/modules/openxr/openxr_api.cpp @@ -172,7 +172,7 @@ bool OpenXRAPI::load_supported_extensions() { bool OpenXRAPI::is_extension_supported(const String &p_extension) const { for (uint32_t i = 0; i < num_supported_extensions; i++) { - if ((supported_extensions[i].extensionName == p_extension) == 0) { + if (supported_extensions[i].extensionName == p_extension) { #ifdef DEBUG print_line("OpenXR: requested extension", p_extension, "is supported"); #endif diff --git a/modules/raycast/lightmap_raycaster.cpp b/modules/raycast/lightmap_raycaster.cpp index 7e7c3f9067..fc9ac416b7 100644 --- a/modules/raycast/lightmap_raycaster.cpp +++ b/modules/raycast/lightmap_raycaster.cpp @@ -153,16 +153,16 @@ void LightmapRaycasterEmbree::commit() { } void LightmapRaycasterEmbree::set_mesh_filter(const RBSet<int> &p_mesh_ids) { - for (RBSet<int>::Element *E = p_mesh_ids.front(); E; E = E->next()) { - rtcDisableGeometry(rtcGetGeometry(embree_scene, E->get())); + for (const int &E : p_mesh_ids) { + rtcDisableGeometry(rtcGetGeometry(embree_scene, E)); } rtcCommitScene(embree_scene); filter_meshes = p_mesh_ids; } void LightmapRaycasterEmbree::clear_mesh_filter() { - for (RBSet<int>::Element *E = filter_meshes.front(); E; E = E->next()) { - rtcEnableGeometry(rtcGetGeometry(embree_scene, E->get())); + for (const int &E : filter_meshes) { + rtcEnableGeometry(rtcGetGeometry(embree_scene, E)); } rtcCommitScene(embree_scene); filter_meshes.clear(); diff --git a/modules/raycast/raycast_occlusion_cull.cpp b/modules/raycast/raycast_occlusion_cull.cpp index c165354c7b..89e75f774e 100644 --- a/modules/raycast/raycast_occlusion_cull.cpp +++ b/modules/raycast/raycast_occlusion_cull.cpp @@ -223,9 +223,9 @@ void RaycastOcclusionCull::occluder_set_mesh(RID p_occluder, const PackedVector3 occluder->vertices = p_vertices; occluder->indices = p_indices; - for (RBSet<InstanceID>::Element *E = occluder->users.front(); E; E = E->next()) { - RID scenario_rid = E->get().scenario; - RID instance_rid = E->get().instance; + for (const InstanceID &E : occluder->users) { + RID scenario_rid = E.scenario; + RID instance_rid = E.instance; ERR_CONTINUE(!scenarios.has(scenario_rid)); Scenario &scenario = scenarios[scenario_rid]; ERR_CONTINUE(!scenario.instances.has(instance_rid)); diff --git a/modules/raycast/static_raycaster.cpp b/modules/raycast/static_raycaster.cpp index f2e944a82d..5d2dedf1a4 100644 --- a/modules/raycast/static_raycaster.cpp +++ b/modules/raycast/static_raycaster.cpp @@ -95,16 +95,16 @@ void StaticRaycasterEmbree::commit() { } void StaticRaycasterEmbree::set_mesh_filter(const RBSet<int> &p_mesh_ids) { - for (RBSet<int>::Element *E = p_mesh_ids.front(); E; E = E->next()) { - rtcDisableGeometry(rtcGetGeometry(embree_scene, E->get())); + for (const int &E : p_mesh_ids) { + rtcDisableGeometry(rtcGetGeometry(embree_scene, E)); } rtcCommitScene(embree_scene); filter_meshes = p_mesh_ids; } void StaticRaycasterEmbree::clear_mesh_filter() { - for (RBSet<int>::Element *E = filter_meshes.front(); E; E = E->next()) { - rtcEnableGeometry(rtcGetGeometry(embree_scene, E->get())); + for (const int &E : filter_meshes) { + rtcEnableGeometry(rtcGetGeometry(embree_scene, E)); } rtcCommitScene(embree_scene); filter_meshes.clear(); diff --git a/modules/text_server_adv/text_server_adv.cpp b/modules/text_server_adv/text_server_adv.cpp index bd14b15561..ef7807ca5d 100644 --- a/modules/text_server_adv/text_server_adv.cpp +++ b/modules/text_server_adv/text_server_adv.cpp @@ -1691,6 +1691,8 @@ hb_font_t *TextServerAdvanced::_font_get_hb_handle(const RID &p_font_rid, int64_ } RID TextServerAdvanced::create_font() { + _THREAD_SAFE_METHOD_ + FontDataAdvanced *fd = memnew(FontDataAdvanced); return font_owner.make_rid(fd); @@ -3359,6 +3361,7 @@ void TextServerAdvanced::full_copy(ShapedTextDataAdvanced *p_shaped) { RID TextServerAdvanced::create_shaped_text(TextServer::Direction p_direction, TextServer::Orientation p_orientation) { _THREAD_SAFE_METHOD_ + ShapedTextDataAdvanced *sd = memnew(ShapedTextDataAdvanced); sd->hb_buffer = hb_buffer_create(); sd->direction = p_direction; @@ -3748,6 +3751,8 @@ void TextServerAdvanced::_realign(ShapedTextDataAdvanced *p_sd) const { } RID TextServerAdvanced::shaped_text_substr(const RID &p_shaped, int64_t p_start, int64_t p_length) const { + _THREAD_SAFE_METHOD_ + const ShapedTextDataAdvanced *sd = shaped_owner.get_or_null(p_shaped); ERR_FAIL_COND_V(!sd, RID()); diff --git a/modules/text_server_fb/text_server_fb.cpp b/modules/text_server_fb/text_server_fb.cpp index c53ca7766a..498b58175e 100644 --- a/modules/text_server_fb/text_server_fb.cpp +++ b/modules/text_server_fb/text_server_fb.cpp @@ -853,6 +853,8 @@ _FORCE_INLINE_ void TextServerFallback::_font_clear_cache(FontDataFallback *p_fo } RID TextServerFallback::create_font() { + _THREAD_SAFE_METHOD_ + FontDataFallback *fd = memnew(FontDataFallback); return font_owner.make_rid(fd); @@ -2429,6 +2431,7 @@ void TextServerFallback::full_copy(ShapedTextDataFallback *p_shaped) { RID TextServerFallback::create_shaped_text(TextServer::Direction p_direction, TextServer::Orientation p_orientation) { _THREAD_SAFE_METHOD_ + ShapedTextDataFallback *sd = memnew(ShapedTextDataFallback); sd->direction = p_direction; sd->orientation = p_orientation; @@ -2807,6 +2810,8 @@ void TextServerFallback::_realign(ShapedTextDataFallback *p_sd) const { } RID TextServerFallback::shaped_text_substr(const RID &p_shaped, int64_t p_start, int64_t p_length) const { + _THREAD_SAFE_METHOD_ + const ShapedTextDataFallback *sd = shaped_owner.get_or_null(p_shaped); ERR_FAIL_COND_V(!sd, RID()); diff --git a/modules/visual_script/editor/visual_script_editor.cpp b/modules/visual_script/editor/visual_script_editor.cpp index 4847b24f61..012e0229f3 100644 --- a/modules/visual_script/editor/visual_script_editor.cpp +++ b/modules/visual_script/editor/visual_script_editor.cpp @@ -1625,8 +1625,8 @@ void VisualScriptEditor::_remove_output_port(int p_id, int p_port) { undo_redo->add_do_method(this, "_update_graph", p_id); for (const KeyValue<int, RBSet<int>> &E : conn_map) { - for (const RBSet<int>::Element *F = E.value.front(); F; F = F->next()) { - undo_redo->add_undo_method(script.ptr(), "data_connect", p_id, p_port, E.key, F->get()); + for (const int &F : E.value) { + undo_redo->add_undo_method(script.ptr(), "data_connect", p_id, p_port, E.key, F); } } @@ -1813,14 +1813,14 @@ void VisualScriptEditor::_on_nodes_paste() { undo_redo->add_undo_method(script.ptr(), "remove_node", new_id); } - for (RBSet<VisualScript::SequenceConnection>::Element *E = clipboard->sequence_connections.front(); E; E = E->next()) { - undo_redo->add_do_method(script.ptr(), "sequence_connect", remap[E->get().from_node], E->get().from_output, remap[E->get().to_node]); - undo_redo->add_undo_method(script.ptr(), "sequence_disconnect", remap[E->get().from_node], E->get().from_output, remap[E->get().to_node]); + for (const VisualScript::SequenceConnection &E : clipboard->sequence_connections) { + undo_redo->add_do_method(script.ptr(), "sequence_connect", remap[E.from_node], E.from_output, remap[E.to_node]); + undo_redo->add_undo_method(script.ptr(), "sequence_disconnect", remap[E.from_node], E.from_output, remap[E.to_node]); } - for (RBSet<VisualScript::DataConnection>::Element *E = clipboard->data_connections.front(); E; E = E->next()) { - undo_redo->add_do_method(script.ptr(), "data_connect", remap[E->get().from_node], E->get().from_port, remap[E->get().to_node], E->get().to_port); - undo_redo->add_undo_method(script.ptr(), "data_disconnect", remap[E->get().from_node], E->get().from_port, remap[E->get().to_node], E->get().to_port); + for (const VisualScript::DataConnection &E : clipboard->data_connections) { + undo_redo->add_do_method(script.ptr(), "data_connect", remap[E.from_node], E.from_port, remap[E.to_node], E.to_port); + undo_redo->add_undo_method(script.ptr(), "data_disconnect", remap[E.from_node], E.from_port, remap[E.to_node], E.to_port); } undo_redo->add_do_method(this, "_update_graph"); @@ -1910,17 +1910,17 @@ void VisualScriptEditor::_on_nodes_duplicate() { RBSet<int> to_select; HashMap<int, int> remap; - for (RBSet<int>::Element *F = to_duplicate.front(); F; F = F->next()) { + for (const int &F : to_duplicate) { // Duplicate from the specific function but place it into the default func as it would lack the connections. - Ref<VisualScriptNode> node = script->get_node(F->get()); + Ref<VisualScriptNode> node = script->get_node(F); Ref<VisualScriptNode> dupe = node->duplicate(true); int new_id = idc++; - remap.insert(F->get(), new_id); + remap.insert(F, new_id); to_select.insert(new_id); - undo_redo->add_do_method(script.ptr(), "add_node", new_id, dupe, script->get_node_position(F->get()) + Vector2(20, 20)); + undo_redo->add_do_method(script.ptr(), "add_node", new_id, dupe, script->get_node_position(F) + Vector2(20, 20)); undo_redo->add_undo_method(script.ptr(), "remove_node", new_id); } @@ -4201,9 +4201,9 @@ void VisualScriptEditor::_menu_option(int p_what) { // If we still don't have a start node then, // run through the nodes and select the first tree node, // i.e. node without any input sequence but output sequence. - for (RBSet<int>::Element *E = nodes_from.front(); E; E = E->next()) { - if (!nodes_to.has(E->get())) { - start_node = E->get(); + for (const int &E : nodes_from) { + if (!nodes_to.has(E)) { + start_node = E; } } } @@ -4272,13 +4272,13 @@ void VisualScriptEditor::_menu_option(int p_what) { // Move the nodes. // Handles reconnection of sequence connections on undo, start here in case of issues. - for (RBSet<VisualScript::SequenceConnection>::Element *E = seqext.front(); E; E = E->next()) { - undo_redo->add_do_method(script.ptr(), "sequence_disconnect", E->get().from_node, E->get().from_output, E->get().to_node); - undo_redo->add_undo_method(script.ptr(), "sequence_connect", E->get().from_node, E->get().from_output, E->get().to_node); + for (const VisualScript::SequenceConnection &E : seqext) { + undo_redo->add_do_method(script.ptr(), "sequence_disconnect", E.from_node, E.from_output, E.to_node); + undo_redo->add_undo_method(script.ptr(), "sequence_connect", E.from_node, E.from_output, E.to_node); } - for (RBSet<VisualScript::DataConnection>::Element *E = dataext.front(); E; E = E->next()) { - undo_redo->add_do_method(script.ptr(), "data_disconnect", E->get().from_node, E->get().from_port, E->get().to_node, E->get().to_port); - undo_redo->add_undo_method(script.ptr(), "data_connect", E->get().from_node, E->get().from_port, E->get().to_node, E->get().to_port); + for (const VisualScript::DataConnection &E : dataext) { + undo_redo->add_do_method(script.ptr(), "data_disconnect", E.from_node, E.from_port, E.to_node, E.to_port); + undo_redo->add_undo_method(script.ptr(), "data_connect", E.from_node, E.from_port, E.to_node, E.to_port); } // I don't really think we need support for non sequenced functions at this moment. @@ -4286,24 +4286,24 @@ void VisualScriptEditor::_menu_option(int p_what) { // Could fail with the new changes, start here when searching for bugs in create function shortcut. int m = 1; - for (RBSet<int>::Element *G = end_nodes.front(); G; G = G->next()) { + for (const int &G : end_nodes) { Ref<VisualScriptReturn> ret_node; ret_node.instantiate(); int ret_id = fn_id + (m++); selections.insert(ret_id); - Vector2 posi = _get_available_pos(false, script->get_node_position(G->get()) + Vector2(80, -100)); + Vector2 posi = _get_available_pos(false, script->get_node_position(G) + Vector2(80, -100)); undo_redo->add_do_method(script.ptr(), "add_node", ret_id, ret_node, posi); undo_redo->add_undo_method(script.ptr(), "remove_node", ret_id); - undo_redo->add_do_method(script.ptr(), "sequence_connect", G->get(), 0, ret_id); + undo_redo->add_do_method(script.ptr(), "sequence_connect", G, 0, ret_id); // Add data outputs from each of the end_nodes. - Ref<VisualScriptNode> vsn = script->get_node(G->get()); + Ref<VisualScriptNode> vsn = script->get_node(G); if (vsn.is_valid() && vsn->get_output_value_port_count() > 0) { ret_node->set_enable_return_value(true); // Use the zeroth data port cause that's the likely one that is planned to be used. ret_node->set_return_type(vsn->get_output_value_port_info(0).type); - undo_redo->add_do_method(script.ptr(), "data_connect", G->get(), 0, ret_id, 0); + undo_redo->add_do_method(script.ptr(), "data_connect", G, 0, ret_id, 0); } } diff --git a/modules/visual_script/visual_script.cpp b/modules/visual_script/visual_script.cpp index a287b8e69f..7c15651fa2 100644 --- a/modules/visual_script/visual_script.cpp +++ b/modules/visual_script/visual_script.cpp @@ -230,12 +230,12 @@ void VisualScript::_node_ports_changed(int p_id) { { List<SequenceConnection> to_remove; - for (RBSet<SequenceConnection>::Element *E = sequence_connections.front(); E; E = E->next()) { - if (E->get().from_node == p_id && E->get().from_output >= vsn->get_output_sequence_port_count()) { - to_remove.push_back(E->get()); + for (const SequenceConnection &E : sequence_connections) { + if (E.from_node == p_id && E.from_output >= vsn->get_output_sequence_port_count()) { + to_remove.push_back(E); } - if (E->get().to_node == p_id && !vsn->has_input_sequence_port()) { - to_remove.push_back(E->get()); + if (E.to_node == p_id && !vsn->has_input_sequence_port()) { + to_remove.push_back(E); } } @@ -248,12 +248,12 @@ void VisualScript::_node_ports_changed(int p_id) { { List<DataConnection> to_remove; - for (RBSet<DataConnection>::Element *E = data_connections.front(); E; E = E->next()) { - if (E->get().from_node == p_id && E->get().from_port >= vsn->get_output_value_port_count()) { - to_remove.push_back(E->get()); + for (const DataConnection &E : data_connections) { + if (E.from_node == p_id && E.from_port >= vsn->get_output_value_port_count()) { + to_remove.push_back(E); } - if (E->get().to_node == p_id && E->get().to_port >= vsn->get_input_value_port_count()) { - to_remove.push_back(E->get()); + if (E.to_node == p_id && E.to_port >= vsn->get_input_value_port_count()) { + to_remove.push_back(E); } } @@ -292,9 +292,9 @@ void VisualScript::remove_node(int p_id) { { List<SequenceConnection> to_remove; - for (RBSet<SequenceConnection>::Element *E = sequence_connections.front(); E; E = E->next()) { - if (E->get().from_node == p_id || E->get().to_node == p_id) { - to_remove.push_back(E->get()); + for (const SequenceConnection &E : sequence_connections) { + if (E.from_node == p_id || E.to_node == p_id) { + to_remove.push_back(E); } } @@ -307,9 +307,9 @@ void VisualScript::remove_node(int p_id) { { List<DataConnection> to_remove; - for (RBSet<DataConnection>::Element *E = data_connections.front(); E; E = E->next()) { - if (E->get().from_node == p_id || E->get().to_node == p_id) { - to_remove.push_back(E->get()); + for (const DataConnection &E : data_connections) { + if (E.from_node == p_id || E.to_node == p_id) { + to_remove.push_back(E); } } @@ -384,8 +384,8 @@ bool VisualScript::has_sequence_connection(int p_from_node, int p_from_output, i } void VisualScript::get_sequence_connection_list(List<SequenceConnection> *r_connection) const { - for (const RBSet<SequenceConnection>::Element *E = sequence_connections.front(); E; E = E->next()) { - r_connection->push_back(E->get()); + for (const SequenceConnection &E : sequence_connections) { + r_connection->push_back(E); } } @@ -426,8 +426,8 @@ bool VisualScript::has_data_connection(int p_from_node, int p_from_port, int p_t } bool VisualScript::is_input_value_port_connected(int p_node, int p_port) const { - for (const RBSet<DataConnection>::Element *E = data_connections.front(); E; E = E->next()) { - if (E->get().to_node == p_node && E->get().to_port == p_port) { + for (const DataConnection &E : data_connections) { + if (E.to_node == p_node && E.to_port == p_port) { return true; } } @@ -435,10 +435,10 @@ bool VisualScript::is_input_value_port_connected(int p_node, int p_port) const { } bool VisualScript::get_input_value_port_connection_source(int p_node, int p_port, int *r_node, int *r_port) const { - for (const RBSet<DataConnection>::Element *E = data_connections.front(); E; E = E->next()) { - if (E->get().to_node == p_node && E->get().to_port == p_port) { - *r_node = E->get().from_node; - *r_port = E->get().from_port; + for (const DataConnection &E : data_connections) { + if (E.to_node == p_node && E.to_port == p_port) { + *r_node = E.from_node; + *r_port = E.from_port; return true; } } @@ -446,8 +446,8 @@ bool VisualScript::get_input_value_port_connection_source(int p_node, int p_port } void VisualScript::get_data_connection_list(List<DataConnection> *r_connection) const { - for (const RBSet<DataConnection>::Element *E = data_connections.front(); E; E = E->next()) { - r_connection->push_back(E->get()); + for (const DataConnection &E : data_connections) { + r_connection->push_back(E); } } @@ -764,8 +764,8 @@ void VisualScript::_update_placeholders() { values[p.name] = variables[E.key].default_value; } - for (RBSet<PlaceHolderScriptInstance *>::Element *E = placeholders.front(); E; E = E->next()) { - E->get()->update(pinfo, values); + for (PlaceHolderScriptInstance *E : placeholders) { + E->update(pinfo, values); } } @@ -1078,19 +1078,19 @@ Dictionary VisualScript::_get_data() const { d["nodes"] = nds; Array seqconns; - for (const RBSet<SequenceConnection>::Element *F = sequence_connections.front(); F; F = F->next()) { - seqconns.push_back(F->get().from_node); - seqconns.push_back(F->get().from_output); - seqconns.push_back(F->get().to_node); + for (const SequenceConnection &F : sequence_connections) { + seqconns.push_back(F.from_node); + seqconns.push_back(F.from_output); + seqconns.push_back(F.to_node); } d["sequence_connections"] = seqconns; Array dataconns; - for (const RBSet<DataConnection>::Element *F = data_connections.front(); F; F = F->next()) { - dataconns.push_back(F->get().from_node); - dataconns.push_back(F->get().from_port); - dataconns.push_back(F->get().to_node); - dataconns.push_back(F->get().to_port); + for (const DataConnection &F : data_connections) { + dataconns.push_back(F.from_node); + dataconns.push_back(F.from_port); + dataconns.push_back(F.to_node); + dataconns.push_back(F.to_port); } d["data_connections"] = dataconns; @@ -1869,23 +1869,23 @@ void VisualScriptInstance::create(const Ref<VisualScript> &p_script, Object *p_o List<int> nd_queue; nd_queue.push_back(function.node); while (!nd_queue.is_empty()) { - for (const RBSet<VisualScript::SequenceConnection>::Element *F = script->sequence_connections.front(); F; F = F->next()) { - if (nd_queue.front()->get() == F->get().from_node && !node_ids.has(F->get().to_node)) { - nd_queue.push_back(F->get().to_node); - node_ids.insert(F->get().to_node); + for (const VisualScript::SequenceConnection &F : script->sequence_connections) { + if (nd_queue.front()->get() == F.from_node && !node_ids.has(F.to_node)) { + nd_queue.push_back(F.to_node); + node_ids.insert(F.to_node); } - if (nd_queue.front()->get() == F->get().from_node && !seqconns.has(F->get())) { - seqconns.insert(F->get()); + if (nd_queue.front()->get() == F.from_node && !seqconns.has(F)) { + seqconns.insert(F); } } nd_queue.pop_front(); } HashMap<int, HashMap<int, Pair<int, int>>> dc_lut; // :: to -> to_port -> (from, from_port) - for (const RBSet<VisualScript::DataConnection>::Element *F = script->data_connections.front(); F; F = F->next()) { - dc_lut[F->get().to_node][F->get().to_port] = Pair<int, int>(F->get().from_node, F->get().from_port); + for (const VisualScript::DataConnection &F : script->data_connections) { + dc_lut[F.to_node][F.to_port] = Pair<int, int>(F.from_node, F.from_port); } - for (const RBSet<int>::Element *F = node_ids.front(); F; F = F->next()) { - nd_queue.push_back(F->get()); + for (const int &F : node_ids) { + nd_queue.push_back(F); } List<int> dc_keys; while (!nd_queue.is_empty()) { @@ -1907,15 +1907,15 @@ void VisualScriptInstance::create(const Ref<VisualScript> &p_script, Object *p_o //Multiple passes are required to set up this complex thing.. //First create the nodes. - for (const RBSet<int>::Element *F = node_ids.front(); F; F = F->next()) { - Ref<VisualScriptNode> node = script->nodes[F->get()].node; + for (const int &F : node_ids) { + Ref<VisualScriptNode> node = script->nodes[F].node; VisualScriptNodeInstance *instance = node->instantiate(this); // Create instance. ERR_FAIL_COND(!instance); instance->base = node.ptr(); - instance->id = F->get(); + instance->id = F; instance->input_port_count = node->get_input_value_port_count(); instance->input_ports = nullptr; instance->output_port_count = node->get_output_value_port_count(); @@ -1975,14 +1975,14 @@ void VisualScriptInstance::create(const Ref<VisualScript> &p_script, Object *p_o max_input_args = MAX(max_input_args, instance->input_port_count); max_output_args = MAX(max_output_args, instance->output_port_count); - instances[F->get()] = instance; + instances[F] = instance; } function.trash_pos = function.max_stack++; // create pos for trash // Second pass, do data connections. - for (const RBSet<VisualScript::DataConnection>::Element *F = dataconns.front(); F; F = F->next()) { - VisualScript::DataConnection dc = F->get(); + for (const VisualScript::DataConnection &F : dataconns) { + VisualScript::DataConnection dc = F; ERR_CONTINUE(!instances.has(dc.from_node)); VisualScriptNodeInstance *from = instances[dc.from_node]; ERR_CONTINUE(!instances.has(dc.to_node)); @@ -2008,8 +2008,8 @@ void VisualScriptInstance::create(const Ref<VisualScript> &p_script, Object *p_o } // Third pass, do sequence connections. - for (const RBSet<VisualScript::SequenceConnection>::Element *F = seqconns.front(); F; F = F->next()) { - VisualScript::SequenceConnection sc = F->get(); + for (const VisualScript::SequenceConnection &F : seqconns) { + VisualScript::SequenceConnection sc = F; ERR_CONTINUE(!instances.has(sc.from_node)); VisualScriptNodeInstance *from = instances[sc.from_node]; ERR_CONTINUE(!instances.has(sc.to_node)); @@ -2022,11 +2022,11 @@ void VisualScriptInstance::create(const Ref<VisualScript> &p_script, Object *p_o //fourth pass: // 1) unassigned input ports to default values // 2) connect unassigned output ports to trash - for (const RBSet<int>::Element *F = node_ids.front(); F; F = F->next()) { - ERR_CONTINUE(!instances.has(F->get())); + for (const int &F : node_ids) { + ERR_CONTINUE(!instances.has(F)); - Ref<VisualScriptNode> node = script->nodes[F->get()].node; - VisualScriptNodeInstance *instance = instances[F->get()]; + Ref<VisualScriptNode> node = script->nodes[F].node; + VisualScriptNodeInstance *instance = instances[F]; // Connect to default values. for (int i = 0; i < instance->input_port_count; i++) { diff --git a/modules/webrtc/webrtc_data_channel.h b/modules/webrtc/webrtc_data_channel.h index eac8f85a84..75e29283ec 100644 --- a/modules/webrtc/webrtc_data_channel.h +++ b/modules/webrtc/webrtc_data_channel.h @@ -33,7 +33,7 @@ #include "core/io/packet_peer.h" -#define WRTC_IN_BUF "network/limits/webrtc/max_channel_in_buffer_kb" +#define WRTC_IN_BUF PNAME("network/limits/webrtc/max_channel_in_buffer_kb") class WebRTCDataChannel : public PacketPeer { GDCLASS(WebRTCDataChannel, PacketPeer); diff --git a/platform/android/export/export_plugin.cpp b/platform/android/export/export_plugin.cpp index a893571e54..18f037ed56 100644 --- a/platform/android/export/export_plugin.cpp +++ b/platform/android/export/export_plugin.cpp @@ -207,9 +207,9 @@ static const char *SPLASH_CONFIG_PATH = "res://android/build/res/drawable/splash static const char *GDNATIVE_LIBS_PATH = "res://android/build/libs/gdnativelibs.json"; static const int icon_densities_count = 6; -static const char *launcher_icon_option = "launcher_icons/main_192x192"; -static const char *launcher_adaptive_icon_foreground_option = "launcher_icons/adaptive_foreground_432x432"; -static const char *launcher_adaptive_icon_background_option = "launcher_icons/adaptive_background_432x432"; +static const char *launcher_icon_option = PNAME("launcher_icons/main_192x192"); +static const char *launcher_adaptive_icon_foreground_option = PNAME("launcher_icons/adaptive_foreground_432x432"); +static const char *launcher_adaptive_icon_background_option = PNAME("launcher_icons/adaptive_background_432x432"); static const LauncherIcon launcher_icons[icon_densities_count] = { { "res/mipmap-xxxhdpi-v4/icon.png", 192 }, @@ -1697,7 +1697,7 @@ void EditorExportPlatformAndroid::get_export_options(List<ExportOption> *r_optio Vector<PluginConfigAndroid> plugins_configs = get_plugins(); for (int i = 0; i < plugins_configs.size(); i++) { print_verbose("Found Android plugin " + plugins_configs[i].name); - r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "plugins/" + plugins_configs[i].name), false)); + r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, vformat("%s/%s", PNAME("plugins"), plugins_configs[i].name)), false)); } plugins_changed.clear(); @@ -1707,7 +1707,7 @@ void EditorExportPlatformAndroid::get_export_options(List<ExportOption> *r_optio // All Android devices supporting Vulkan run 64-bit Android, // so there is usually no point in exporting for 32-bit Android. const bool is_default = abi == "arm64-v8a"; - r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "architectures/" + abi), is_default)); + r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, vformat("%s/%s", PNAME("architectures"), abi)), is_default)); } r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "keystore/debug", PROPERTY_HINT_GLOBAL_FILE, "*.keystore,*.jks"), "")); @@ -1758,7 +1758,7 @@ void EditorExportPlatformAndroid::get_export_options(List<ExportOption> *r_optio const char **perms = android_perms; while (*perms) { - r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "permissions/" + String(*perms).to_lower()), false)); + r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, vformat("%s/%s", PNAME("permissions"), String(*perms).to_lower())), false)); perms++; } } diff --git a/platform/iphone/export/export_plugin.cpp b/platform/iphone/export/export_plugin.cpp index 09191c958d..f28d014c07 100644 --- a/platform/iphone/export/export_plugin.cpp +++ b/platform/iphone/export/export_plugin.cpp @@ -58,18 +58,18 @@ struct LoadingScreenInfo { }; static const LoadingScreenInfo loading_screen_infos[] = { - { "landscape_launch_screens/iphone_2436x1125", "Default-Landscape-X.png", 2436, 1125, false }, - { "landscape_launch_screens/iphone_2208x1242", "Default-Landscape-736h@3x.png", 2208, 1242, false }, - { "landscape_launch_screens/ipad_1024x768", "Default-Landscape.png", 1024, 768, false }, - { "landscape_launch_screens/ipad_2048x1536", "Default-Landscape@2x.png", 2048, 1536, false }, - - { "portrait_launch_screens/iphone_640x960", "Default-480h@2x.png", 640, 960, true }, - { "portrait_launch_screens/iphone_640x1136", "Default-568h@2x.png", 640, 1136, true }, - { "portrait_launch_screens/iphone_750x1334", "Default-667h@2x.png", 750, 1334, true }, - { "portrait_launch_screens/iphone_1125x2436", "Default-Portrait-X.png", 1125, 2436, true }, - { "portrait_launch_screens/ipad_768x1024", "Default-Portrait.png", 768, 1024, true }, - { "portrait_launch_screens/ipad_1536x2048", "Default-Portrait@2x.png", 1536, 2048, true }, - { "portrait_launch_screens/iphone_1242x2208", "Default-Portrait-736h@3x.png", 1242, 2208, true } + { PNAME("landscape_launch_screens/iphone_2436x1125"), "Default-Landscape-X.png", 2436, 1125, false }, + { PNAME("landscape_launch_screens/iphone_2208x1242"), "Default-Landscape-736h@3x.png", 2208, 1242, false }, + { PNAME("landscape_launch_screens/ipad_1024x768"), "Default-Landscape.png", 1024, 768, false }, + { PNAME("landscape_launch_screens/ipad_2048x1536"), "Default-Landscape@2x.png", 2048, 1536, false }, + + { PNAME("portrait_launch_screens/iphone_640x960"), "Default-480h@2x.png", 640, 960, true }, + { PNAME("portrait_launch_screens/iphone_640x1136"), "Default-568h@2x.png", 640, 1136, true }, + { PNAME("portrait_launch_screens/iphone_750x1334"), "Default-667h@2x.png", 750, 1334, true }, + { PNAME("portrait_launch_screens/iphone_1125x2436"), "Default-Portrait-X.png", 1125, 2436, true }, + { PNAME("portrait_launch_screens/ipad_768x1024"), "Default-Portrait.png", 768, 1024, true }, + { PNAME("portrait_launch_screens/ipad_1536x2048"), "Default-Portrait@2x.png", 1536, 2048, true }, + { PNAME("portrait_launch_screens/iphone_1242x2208"), "Default-Portrait-736h@3x.png", 1242, 2208, true } }; void EditorExportPlatformIOS::get_export_options(List<ExportOption> *r_options) { @@ -78,7 +78,7 @@ void EditorExportPlatformIOS::get_export_options(List<ExportOption> *r_options) Vector<ExportArchitecture> architectures = _get_supported_architectures(); for (int i = 0; i < architectures.size(); ++i) { - r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "architectures/" + architectures[i].name), architectures[i].is_default)); + r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, vformat("%s/%s", PNAME("architectures"), architectures[i].name)), architectures[i].is_default)); } r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "application/app_store_team_id"), "")); @@ -99,7 +99,7 @@ void EditorExportPlatformIOS::get_export_options(List<ExportOption> *r_options) Vector<PluginConfigIOS> found_plugins = get_plugins(); for (int i = 0; i < found_plugins.size(); i++) { - r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "plugins/" + found_plugins[i].name), false)); + r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, vformat("%s/%s", PNAME("plugins"), found_plugins[i].name)), false)); } RBSet<String> plist_keys; @@ -1350,8 +1350,8 @@ Error EditorExportPlatformIOS::_export_ios_plugins(const Ref<EditorExportPreset> // Update Linker Flag Values { String result_linker_flags = " "; - for (RBSet<String>::Element *E = plugin_linker_flags.front(); E; E = E->next()) { - const String &flag = E->get(); + for (const String &E : plugin_linker_flags) { + const String &flag = E; if (flag.length() == 0) { continue; diff --git a/scene/2d/audio_listener_2d.cpp b/scene/2d/audio_listener_2d.cpp index eb463864e1..f7dd20d7c0 100644 --- a/scene/2d/audio_listener_2d.cpp +++ b/scene/2d/audio_listener_2d.cpp @@ -57,7 +57,7 @@ bool AudioListener2D::_get(const StringName &p_name, Variant &r_ret) const { } void AudioListener2D::_get_property_list(List<PropertyInfo> *p_list) const { - p_list->push_back(PropertyInfo(Variant::BOOL, "current")); + p_list->push_back(PropertyInfo(Variant::BOOL, PNAME("current"))); } void AudioListener2D::_notification(int p_what) { diff --git a/scene/2d/navigation_region_2d.cpp b/scene/2d/navigation_region_2d.cpp index f46453283c..260faf1d68 100644 --- a/scene/2d/navigation_region_2d.cpp +++ b/scene/2d/navigation_region_2d.cpp @@ -509,6 +509,9 @@ void NavigationRegion2D::_navpoly_changed() { if (is_inside_tree() && (Engine::get_singleton()->is_editor_hint() || get_tree()->is_debugging_navigation_hint())) { update(); } + if (navpoly.is_valid()) { + NavigationServer2D::get_singleton()->region_set_navpoly(region, navpoly); + } } void NavigationRegion2D::_map_changed(RID p_map) { if (enabled && get_world_2d()->get_navigation_map() == p_map) { diff --git a/scene/2d/physics_body_2d.cpp b/scene/2d/physics_body_2d.cpp index f345d8c3c9..9d9db0d6b4 100644 --- a/scene/2d/physics_body_2d.cpp +++ b/scene/2d/physics_body_2d.cpp @@ -56,13 +56,11 @@ PhysicsBody2D::~PhysicsBody2D() { Ref<KinematicCollision2D> PhysicsBody2D::_move(const Vector2 &p_distance, bool p_test_only, real_t p_margin) { PhysicsServer2D::MotionParameters parameters(get_global_transform(), p_distance, p_margin); + parameters.recovery_as_collision = false; // Don't report collisions generated only from recovery. PhysicsServer2D::MotionResult result; - bool collided = move_and_collide(parameters, result, p_test_only); - - // Don't report collision when the whole motion is done. - if (collided && result.collision_safe_fraction < 1) { + if (move_and_collide(parameters, result, p_test_only)) { // Create a new instance when the cached reference is invalid or still in use in script. if (motion_cache.is_null() || motion_cache->reference_get_count() > 1) { motion_cache.instantiate(); @@ -143,15 +141,9 @@ bool PhysicsBody2D::test_move(const Transform2D &p_from, const Vector2 &p_distan } PhysicsServer2D::MotionParameters parameters(p_from, p_distance, p_margin); + parameters.recovery_as_collision = false; // Don't report collisions generated only from recovery. - bool colliding = PhysicsServer2D::get_singleton()->body_test_motion(get_rid(), parameters, r); - - if (colliding) { - // Don't report collision when the whole motion is done. - return (r->collision_safe_fraction < 1.0); - } else { - return false; - } + return PhysicsServer2D::get_singleton()->body_test_motion(get_rid(), parameters, r); } TypedArray<PhysicsBody2D> PhysicsBody2D::get_collision_exceptions() { @@ -1145,6 +1137,7 @@ bool CharacterBody2D::move_and_slide() { if (!current_platform_velocity.is_equal_approx(Vector2())) { PhysicsServer2D::MotionParameters parameters(get_global_transform(), current_platform_velocity * delta, margin); + parameters.recovery_as_collision = true; // Also report collisions generated only from recovery. parameters.exclude_bodies.insert(platform_rid); if (platform_object_id.is_valid()) { parameters.exclude_objects.insert(platform_object_id); @@ -1203,6 +1196,7 @@ void CharacterBody2D::_move_and_slide_grounded(double p_delta, bool p_was_on_flo for (int iteration = 0; iteration < max_slides; ++iteration) { PhysicsServer2D::MotionParameters parameters(get_global_transform(), motion, margin); + parameters.recovery_as_collision = true; // Also report collisions generated only from recovery. Vector2 prev_position = parameters.from.columns[2]; @@ -1359,6 +1353,7 @@ void CharacterBody2D::_move_and_slide_floating(double p_delta) { bool first_slide = true; for (int iteration = 0; iteration < max_slides; ++iteration) { PhysicsServer2D::MotionParameters parameters(get_global_transform(), motion, margin); + parameters.recovery_as_collision = true; // Also report collisions generated only from recovery. PhysicsServer2D::MotionResult result; bool collided = move_and_collide(parameters, result, false, false); @@ -1405,6 +1400,7 @@ void CharacterBody2D::_snap_on_floor(bool p_was_on_floor, bool p_vel_dir_facing_ real_t length = MAX(floor_snap_length, margin); PhysicsServer2D::MotionParameters parameters(get_global_transform(), -up_direction * length, margin); + parameters.recovery_as_collision = true; // Also report collisions generated only from recovery. parameters.collide_separation_ray = true; PhysicsServer2D::MotionResult result; @@ -1440,6 +1436,7 @@ bool CharacterBody2D::_on_floor_if_snapped(bool p_was_on_floor, bool p_vel_dir_f real_t length = MAX(floor_snap_length, margin); PhysicsServer2D::MotionParameters parameters(get_global_transform(), -up_direction * length, margin); + parameters.recovery_as_collision = true; // Also report collisions generated only from recovery. parameters.collide_separation_ray = true; PhysicsServer2D::MotionResult result; diff --git a/scene/2d/skeleton_2d.cpp b/scene/2d/skeleton_2d.cpp index aa039e07ee..377d51cad7 100644 --- a/scene/2d/skeleton_2d.cpp +++ b/scene/2d/skeleton_2d.cpp @@ -81,14 +81,14 @@ bool Bone2D::_get(const StringName &p_path, Variant &r_ret) const { } void Bone2D::_get_property_list(List<PropertyInfo> *p_list) const { - p_list->push_back(PropertyInfo(Variant::BOOL, "auto_calculate_length_and_angle", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT)); + p_list->push_back(PropertyInfo(Variant::BOOL, PNAME("auto_calculate_length_and_angle"), PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT)); if (!autocalculate_length_and_angle) { - p_list->push_back(PropertyInfo(Variant::FLOAT, "length", PROPERTY_HINT_RANGE, "1, 1024, 1", PROPERTY_USAGE_DEFAULT)); - p_list->push_back(PropertyInfo(Variant::FLOAT, "bone_angle", PROPERTY_HINT_RANGE, "-360, 360, 0.01", PROPERTY_USAGE_DEFAULT)); + p_list->push_back(PropertyInfo(Variant::FLOAT, PNAME("length"), PROPERTY_HINT_RANGE, "1, 1024, 1", PROPERTY_USAGE_DEFAULT)); + p_list->push_back(PropertyInfo(Variant::FLOAT, PNAME("bone_angle"), PROPERTY_HINT_RANGE, "-360, 360, 0.01", PROPERTY_USAGE_DEFAULT)); } #ifdef TOOLS_ENABLED - p_list->push_back(PropertyInfo(Variant::BOOL, "editor_settings/show_bone_gizmo", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT)); + p_list->push_back(PropertyInfo(Variant::BOOL, PNAME("editor_settings/show_bone_gizmo"), PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT)); #endif // TOOLS_ENABLED } @@ -560,7 +560,7 @@ bool Skeleton2D::_get(const StringName &p_path, Variant &r_ret) const { void Skeleton2D::_get_property_list(List<PropertyInfo> *p_list) const { p_list->push_back( - PropertyInfo(Variant::OBJECT, "modification_stack", + PropertyInfo(Variant::OBJECT, PNAME("modification_stack"), PROPERTY_HINT_RESOURCE_TYPE, "SkeletonModificationStack2D", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_DEFERRED_SET_RESOURCE | PROPERTY_USAGE_DO_NOT_SHARE_ON_DUPLICATE)); diff --git a/scene/2d/tile_map.cpp b/scene/2d/tile_map.cpp index 19c341c1e1..c4b923ff34 100644 --- a/scene/2d/tile_map.cpp +++ b/scene/2d/tile_map.cpp @@ -810,8 +810,8 @@ void TileMap::_update_dirty_quadrants() { for (SelfList<TileMapQuadrant> *q = dirty_quadrant_list.first(); q; q = q->next()) { q->self()->map_to_world.clear(); q->self()->world_to_map.clear(); - for (RBSet<Vector2i>::Element *E = q->self()->cells.front(); E; E = E->next()) { - Vector2i pk = E->get(); + for (const Vector2i &E : q->self()->cells) { + Vector2i pk = E; Vector2i pk_world_coords = map_to_world(pk); q->self()->map_to_world[pk] = pk_world_coords; q->self()->world_to_map[pk_world_coords] = pk; @@ -1250,8 +1250,8 @@ void TileMap::_rendering_draw_quadrant_debug(TileMapQuadrant *p_quadrant) { // Draw a placeholder for scenes needing one. RenderingServer *rs = RenderingServer::get_singleton(); Vector2 quadrant_pos = map_to_world(p_quadrant->coords * get_effective_quadrant_size(p_quadrant->layer)); - for (RBSet<Vector2i>::Element *E_cell = p_quadrant->cells.front(); E_cell; E_cell = E_cell->next()) { - const TileMapCell &c = get_cell(p_quadrant->layer, E_cell->get(), true); + for (const Vector2i &E_cell : p_quadrant->cells) { + const TileMapCell &c = get_cell(p_quadrant->layer, E_cell, true); TileSetSource *source; if (tile_set->has_source(c.source_id)) { @@ -1281,7 +1281,7 @@ void TileMap::_rendering_draw_quadrant_debug(TileMapQuadrant *p_quadrant) { // Draw a placeholder tile. Transform2D xform; - xform.set_origin(map_to_world(E_cell->get()) - quadrant_pos); + xform.set_origin(map_to_world(E_cell) - quadrant_pos); rs->canvas_item_add_set_transform(p_quadrant->debug_canvas_item, xform); rs->canvas_item_add_circle(p_quadrant->debug_canvas_item, Vector2(), MIN(tile_set->get_tile_size().x, tile_set->get_tile_size().y) / 4.0, color); } @@ -1464,8 +1464,8 @@ void TileMap::_physics_update_dirty_quadrants(SelfList<TileMapQuadrant>::List &r q.bodies.clear(); // Recreate bodies and shapes. - for (RBSet<Vector2i>::Element *E_cell = q.cells.front(); E_cell; E_cell = E_cell->next()) { - TileMapCell c = get_cell(q.layer, E_cell->get(), true); + for (const Vector2i &E_cell : q.cells) { + TileMapCell c = get_cell(q.layer, E_cell, true); TileSetSource *source; if (tile_set->has_source(c.source_id)) { @@ -1478,8 +1478,8 @@ void TileMap::_physics_update_dirty_quadrants(SelfList<TileMapQuadrant>::List &r TileSetAtlasSource *atlas_source = Object::cast_to<TileSetAtlasSource>(source); if (atlas_source) { const TileData *tile_data; - if (q.runtime_tile_data_cache.has(E_cell->get())) { - tile_data = q.runtime_tile_data_cache[E_cell->get()]; + if (q.runtime_tile_data_cache.has(E_cell)) { + tile_data = q.runtime_tile_data_cache[E_cell]; } else { tile_data = atlas_source->get_tile_data(c.get_atlas_coords(), c.alternative_tile); } @@ -1490,12 +1490,12 @@ void TileMap::_physics_update_dirty_quadrants(SelfList<TileMapQuadrant>::List &r // Create the body. RID body = ps->body_create(); - bodies_coords[body] = E_cell->get(); + bodies_coords[body] = E_cell; ps->body_set_mode(body, collision_animatable ? PhysicsServer2D::BODY_MODE_KINEMATIC : PhysicsServer2D::BODY_MODE_STATIC); ps->body_set_space(body, space); Transform2D xform; - xform.set_origin(map_to_world(E_cell->get())); + xform.set_origin(map_to_world(E_cell)); xform = global_transform * xform; ps->body_set_state(body, PhysicsServer2D::BODY_STATE_TRANSFORM, xform); @@ -1661,8 +1661,8 @@ void TileMap::_navigation_update_dirty_quadrants(SelfList<TileMapQuadrant>::List q.navigation_regions.clear(); // Get the navigation polygons and create regions. - for (RBSet<Vector2i>::Element *E_cell = q.cells.front(); E_cell; E_cell = E_cell->next()) { - TileMapCell c = get_cell(q.layer, E_cell->get(), true); + for (const Vector2i &E_cell : q.cells) { + TileMapCell c = get_cell(q.layer, E_cell, true); TileSetSource *source; if (tile_set->has_source(c.source_id)) { @@ -1675,12 +1675,12 @@ void TileMap::_navigation_update_dirty_quadrants(SelfList<TileMapQuadrant>::List TileSetAtlasSource *atlas_source = Object::cast_to<TileSetAtlasSource>(source); if (atlas_source) { const TileData *tile_data; - if (q.runtime_tile_data_cache.has(E_cell->get())) { - tile_data = q.runtime_tile_data_cache[E_cell->get()]; + if (q.runtime_tile_data_cache.has(E_cell)) { + tile_data = q.runtime_tile_data_cache[E_cell]; } else { tile_data = atlas_source->get_tile_data(c.get_atlas_coords(), c.alternative_tile); } - q.navigation_regions[E_cell->get()].resize(tile_set->get_navigation_layers_count()); + q.navigation_regions[E_cell].resize(tile_set->get_navigation_layers_count()); for (int layer_index = 0; layer_index < tile_set->get_navigation_layers_count(); layer_index++) { Ref<NavigationPolygon> navpoly; @@ -1688,13 +1688,13 @@ void TileMap::_navigation_update_dirty_quadrants(SelfList<TileMapQuadrant>::List if (navpoly.is_valid()) { Transform2D tile_transform; - tile_transform.set_origin(map_to_world(E_cell->get())); + tile_transform.set_origin(map_to_world(E_cell)); RID region = NavigationServer2D::get_singleton()->region_create(); NavigationServer2D::get_singleton()->region_set_map(region, get_world_2d()->get_navigation_map()); NavigationServer2D::get_singleton()->region_set_transform(region, tilemap_xform * tile_transform); NavigationServer2D::get_singleton()->region_set_navpoly(region, navpoly); - q.navigation_regions[E_cell->get()].write[layer_index] = region; + q.navigation_regions[E_cell].write[layer_index] = region; } } } @@ -1750,8 +1750,8 @@ void TileMap::_navigation_draw_quadrant_debug(TileMapQuadrant *p_quadrant) { Vector2 quadrant_pos = map_to_world(p_quadrant->coords * get_effective_quadrant_size(p_quadrant->layer)); - for (RBSet<Vector2i>::Element *E_cell = p_quadrant->cells.front(); E_cell; E_cell = E_cell->next()) { - TileMapCell c = get_cell(p_quadrant->layer, E_cell->get(), true); + for (const Vector2i &E_cell : p_quadrant->cells) { + TileMapCell c = get_cell(p_quadrant->layer, E_cell, true); TileSetSource *source; if (tile_set->has_source(c.source_id)) { @@ -1764,14 +1764,14 @@ void TileMap::_navigation_draw_quadrant_debug(TileMapQuadrant *p_quadrant) { TileSetAtlasSource *atlas_source = Object::cast_to<TileSetAtlasSource>(source); if (atlas_source) { const TileData *tile_data; - if (p_quadrant->runtime_tile_data_cache.has(E_cell->get())) { - tile_data = p_quadrant->runtime_tile_data_cache[E_cell->get()]; + if (p_quadrant->runtime_tile_data_cache.has(E_cell)) { + tile_data = p_quadrant->runtime_tile_data_cache[E_cell]; } else { tile_data = atlas_source->get_tile_data(c.get_atlas_coords(), c.alternative_tile); } Transform2D xform; - xform.set_origin(map_to_world(E_cell->get()) - quadrant_pos); + xform.set_origin(map_to_world(E_cell) - quadrant_pos); rs->canvas_item_add_set_transform(p_quadrant->debug_canvas_item, xform); for (int layer_index = 0; layer_index < tile_set->get_navigation_layers_count(); layer_index++) { @@ -1825,8 +1825,8 @@ void TileMap::_scenes_update_dirty_quadrants(SelfList<TileMapQuadrant>::List &r_ q.scenes.clear(); // Recreate the scenes. - for (RBSet<Vector2i>::Element *E_cell = q.cells.front(); E_cell; E_cell = E_cell->next()) { - const TileMapCell &c = get_cell(q.layer, E_cell->get(), true); + for (const Vector2i &E_cell : q.cells) { + const TileMapCell &c = get_cell(q.layer, E_cell, true); TileSetSource *source; if (tile_set->has_source(c.source_id)) { @@ -1845,13 +1845,13 @@ void TileMap::_scenes_update_dirty_quadrants(SelfList<TileMapQuadrant>::List &r_ Control *scene_as_control = Object::cast_to<Control>(scene); Node2D *scene_as_node2d = Object::cast_to<Node2D>(scene); if (scene_as_control) { - scene_as_control->set_position(map_to_world(E_cell->get()) + scene_as_control->get_position()); + scene_as_control->set_position(map_to_world(E_cell) + scene_as_control->get_position()); } else if (scene_as_node2d) { Transform2D xform; - xform.set_origin(map_to_world(E_cell->get())); + xform.set_origin(map_to_world(E_cell)); scene_as_node2d->set_transform(xform * scene_as_node2d->get_transform()); } - q.scenes[E_cell->get()] = scene->get_name(); + q.scenes[E_cell] = scene->get_name(); } } } @@ -1883,8 +1883,8 @@ void TileMap::_scenes_draw_quadrant_debug(TileMapQuadrant *p_quadrant) { // Draw a placeholder for scenes needing one. RenderingServer *rs = RenderingServer::get_singleton(); Vector2 quadrant_pos = map_to_world(p_quadrant->coords * get_effective_quadrant_size(p_quadrant->layer)); - for (RBSet<Vector2i>::Element *E_cell = p_quadrant->cells.front(); E_cell; E_cell = E_cell->next()) { - const TileMapCell &c = get_cell(p_quadrant->layer, E_cell->get(), true); + for (const Vector2i &E_cell : p_quadrant->cells) { + const TileMapCell &c = get_cell(p_quadrant->layer, E_cell, true); TileSetSource *source; if (tile_set->has_source(c.source_id)) { @@ -1912,7 +1912,7 @@ void TileMap::_scenes_draw_quadrant_debug(TileMapQuadrant *p_quadrant) { // Draw a placeholder tile. Transform2D xform; - xform.set_origin(map_to_world(E_cell->get()) - quadrant_pos); + xform.set_origin(map_to_world(E_cell) - quadrant_pos); rs->canvas_item_add_set_transform(p_quadrant->debug_canvas_item, xform); rs->canvas_item_add_circle(p_quadrant->debug_canvas_item, Vector2(), MIN(tile_set->get_tile_size().x, tile_set->get_tile_size().y) / 4.0, color); } @@ -2189,19 +2189,19 @@ RBSet<TileMap::TerrainConstraint> TileMap::get_terrain_constraints_from_removed_ // Build a set of dummy constraints get the constrained points. RBSet<TerrainConstraint> dummy_constraints; - for (RBSet<Vector2i>::Element *E = p_to_replace.front(); E; E = E->next()) { + for (const Vector2i &E : p_to_replace) { for (int i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) { // Iterates over sides. TileSet::CellNeighbor bit = TileSet::CellNeighbor(i); if (tile_set->is_valid_peering_bit_terrain(p_terrain_set, bit)) { - dummy_constraints.insert(TerrainConstraint(this, E->get(), bit, -1)); + dummy_constraints.insert(TerrainConstraint(this, E, bit, -1)); } } } // For each constrained point, we get all overlapping tiles, and select the most adequate terrain for it. RBSet<TerrainConstraint> constraints; - for (RBSet<TerrainConstraint>::Element *E = dummy_constraints.front(); E; E = E->next()) { - TerrainConstraint c = E->get(); + for (const TerrainConstraint &E : dummy_constraints) { + TerrainConstraint c = E; HashMap<int, int> terrain_count; @@ -2348,8 +2348,8 @@ HashMap<Vector2i, TileSet::TerrainsPattern> TileMap::terrain_wave_function_colla // Add the new constraints from the added tiles. RBSet<TerrainConstraint> new_constraints = get_terrain_constraints_from_added_tile(selected_cell_to_replace, p_terrain_set, selected_terrain_tile_pattern); - for (RBSet<TerrainConstraint>::Element *E_constraint = new_constraints.front(); E_constraint; E_constraint = E_constraint->next()) { - constraints.insert(E_constraint->get()); + for (const TerrainConstraint &E_constraint : new_constraints) { + constraints.insert(E_constraint); } // Compute valid tiles again for neighbors. @@ -2425,8 +2425,8 @@ void TileMap::fix_invalid_tiles() { coords.insert(E.key); } } - for (RBSet<Vector2i>::Element *E = coords.front(); E; E = E->next()) { - set_cell(i, E->get(), TileSet::INVALID_SOURCE, TileSetSource::INVALID_ATLAS_COORDS, TileSetSource::INVALID_TILE_ALTERNATIVE); + for (const Vector2i &E : coords) { + set_cell(i, E, TileSet::INVALID_SOURCE, TileSetSource::INVALID_ATLAS_COORDS, TileSetSource::INVALID_TILE_ALTERNATIVE); } } } @@ -3524,11 +3524,11 @@ void TileMap::draw_cells_outline(Control *p_control, RBSet<Vector2i> p_cells, Co Vector<Vector2> polygon = tile_set->get_tile_shape_polygon(); TileSet::TileShape shape = tile_set->get_tile_shape(); - for (RBSet<Vector2i>::Element *E = p_cells.front(); E; E = E->next()) { - Vector2 center = map_to_world(E->get()); + for (const Vector2i &E : p_cells) { + Vector2 center = map_to_world(E); #define DRAW_SIDE_IF_NEEDED(side, polygon_index_from, polygon_index_to) \ - if (!p_cells.has(get_neighbor_cell(E->get(), side))) { \ + if (!p_cells.has(get_neighbor_cell(E, side))) { \ Vector2 from = p_transform.xform(center + polygon[polygon_index_from] * tile_size); \ Vector2 to = p_transform.xform(center + polygon[polygon_index_to] * tile_size); \ p_control->draw_line(from, to, p_color); \ diff --git a/scene/3d/audio_listener_3d.cpp b/scene/3d/audio_listener_3d.cpp index 1ead9bb384..4f3f403ab7 100644 --- a/scene/3d/audio_listener_3d.cpp +++ b/scene/3d/audio_listener_3d.cpp @@ -68,7 +68,7 @@ bool AudioListener3D::_get(const StringName &p_name, Variant &r_ret) const { } void AudioListener3D::_get_property_list(List<PropertyInfo> *p_list) const { - p_list->push_back(PropertyInfo(Variant::BOOL, "current")); + p_list->push_back(PropertyInfo(Variant::BOOL, PNAME("current"))); } void AudioListener3D::_update_listener() { diff --git a/scene/3d/collision_object_3d.cpp b/scene/3d/collision_object_3d.cpp index 70cab77eda..a36357555a 100644 --- a/scene/3d/collision_object_3d.cpp +++ b/scene/3d/collision_object_3d.cpp @@ -345,9 +345,9 @@ void CollisionObject3D::_update_debug_shapes() { return; } - for (RBSet<uint32_t>::Element *shapedata_idx = debug_shapes_to_update.front(); shapedata_idx; shapedata_idx = shapedata_idx->next()) { - if (shapes.has(shapedata_idx->get())) { - ShapeData &shapedata = shapes[shapedata_idx->get()]; + for (const uint32_t &shapedata_idx : debug_shapes_to_update) { + if (shapes.has(shapedata_idx)) { + ShapeData &shapedata = shapes[shapedata_idx]; ShapeData::ShapeBase *shapes = shapedata.shapes.ptrw(); for (int i = 0; i < shapedata.shapes.size(); i++) { ShapeData::ShapeBase &s = shapes[i]; diff --git a/scene/3d/mesh_instance_3d.cpp b/scene/3d/mesh_instance_3d.cpp index 189ab7fc3b..31993f898d 100644 --- a/scene/3d/mesh_instance_3d.cpp +++ b/scene/3d/mesh_instance_3d.cpp @@ -97,7 +97,7 @@ void MeshInstance3D::_get_property_list(List<PropertyInfo> *p_list) const { if (mesh.is_valid()) { for (int i = 0; i < mesh->get_surface_count(); i++) { - p_list->push_back(PropertyInfo(Variant::OBJECT, "surface_material_override/" + itos(i), PROPERTY_HINT_RESOURCE_TYPE, "BaseMaterial3D,ShaderMaterial", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_DEFERRED_SET_RESOURCE)); + p_list->push_back(PropertyInfo(Variant::OBJECT, vformat("%s/%d", PNAME("surface_material_override"), i), PROPERTY_HINT_RESOURCE_TYPE, "BaseMaterial3D,ShaderMaterial", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_DEFERRED_SET_RESOURCE)); } } } diff --git a/scene/3d/node_3d.cpp b/scene/3d/node_3d.cpp index bbc977647e..ad1ba83c9d 100644 --- a/scene/3d/node_3d.cpp +++ b/scene/3d/node_3d.cpp @@ -180,7 +180,7 @@ void Node3D::_notification(int p_what) { #ifdef TOOLS_ENABLED if (Engine::get_singleton()->is_editor_hint() && get_tree()->is_node_being_edited(this)) { - get_tree()->call_group_flags(0, SceneStringNames::get_singleton()->_spatial_editor_group, SceneStringNames::get_singleton()->_request_gizmo, this); + get_tree()->call_group_flags(SceneTree::GROUP_CALL_DEFERRED, SceneStringNames::get_singleton()->_spatial_editor_group, SceneStringNames::get_singleton()->_request_gizmo, this); } #endif } break; @@ -418,7 +418,7 @@ void Node3D::update_gizmos() { } if (data.gizmos.is_empty()) { - get_tree()->call_group_flags(0, SceneStringNames::get_singleton()->_spatial_editor_group, SceneStringNames::get_singleton()->_request_gizmo, this); + get_tree()->call_group_flags(SceneTree::GROUP_CALL_DEFERRED, SceneStringNames::get_singleton()->_spatial_editor_group, SceneStringNames::get_singleton()->_request_gizmo, this); return; } if (data.gizmos_dirty) { @@ -436,7 +436,7 @@ void Node3D::set_subgizmo_selection(Ref<Node3DGizmo> p_gizmo, int p_id, Transfor } if (Engine::get_singleton()->is_editor_hint() && get_tree()->is_node_being_edited(this)) { - get_tree()->call_group_flags(0, SceneStringNames::get_singleton()->_spatial_editor_group, SceneStringNames::get_singleton()->_set_subgizmo_selection, this, p_gizmo, p_id, p_transform); + get_tree()->call_group_flags(SceneTree::GROUP_CALL_DEFERRED, SceneStringNames::get_singleton()->_spatial_editor_group, SceneStringNames::get_singleton()->_set_subgizmo_selection, this, p_gizmo, p_id, p_transform); } #endif } @@ -452,7 +452,7 @@ void Node3D::clear_subgizmo_selection() { } if (Engine::get_singleton()->is_editor_hint() && get_tree()->is_node_being_edited(this)) { - get_tree()->call_group_flags(0, SceneStringNames::get_singleton()->_spatial_editor_group, SceneStringNames::get_singleton()->_clear_subgizmo_selection, this); + get_tree()->call_group_flags(SceneTree::GROUP_CALL_DEFERRED, SceneStringNames::get_singleton()->_spatial_editor_group, SceneStringNames::get_singleton()->_clear_subgizmo_selection, this); } #endif } diff --git a/scene/3d/physics_body_3d.cpp b/scene/3d/physics_body_3d.cpp index 94cd5400db..370ffef19d 100644 --- a/scene/3d/physics_body_3d.cpp +++ b/scene/3d/physics_body_3d.cpp @@ -94,13 +94,11 @@ void PhysicsBody3D::remove_collision_exception_with(Node *p_node) { Ref<KinematicCollision3D> PhysicsBody3D::_move(const Vector3 &p_distance, bool p_test_only, real_t p_margin, int p_max_collisions) { PhysicsServer3D::MotionParameters parameters(get_global_transform(), p_distance, p_margin); parameters.max_collisions = p_max_collisions; + parameters.recovery_as_collision = false; // Don't report collisions generated only from recovery. PhysicsServer3D::MotionResult result; - bool collided = move_and_collide(parameters, result, p_test_only); - - // Don't report collision when the whole motion is done. - if (collided && result.collision_safe_fraction < 1) { + if (move_and_collide(parameters, result, p_test_only)) { // Create a new instance when the cached reference is invalid or still in use in script. if (motion_cache.is_null() || motion_cache->reference_get_count() > 1) { motion_cache.instantiate(); @@ -184,15 +182,9 @@ bool PhysicsBody3D::test_move(const Transform3D &p_from, const Vector3 &p_distan } PhysicsServer3D::MotionParameters parameters(p_from, p_distance, p_margin); + parameters.recovery_as_collision = false; // Don't report collisions generated only from recovery. - bool colliding = PhysicsServer3D::get_singleton()->body_test_motion(get_rid(), parameters, r); - - if (colliding) { - // Don't report collision when the whole motion is done. - return (r->collision_safe_fraction < 1.0); - } else { - return false; - } + return PhysicsServer3D::get_singleton()->body_test_motion(get_rid(), parameters, r); } void PhysicsBody3D::set_axis_lock(PhysicsServer3D::BodyAxis p_axis, bool p_lock) { @@ -1214,6 +1206,8 @@ bool CharacterBody3D::move_and_slide() { if (!current_platform_velocity.is_equal_approx(Vector3())) { PhysicsServer3D::MotionParameters parameters(get_global_transform(), current_platform_velocity * delta, margin); + parameters.recovery_as_collision = true; // Also report collisions generated only from recovery. + parameters.exclude_bodies.insert(platform_rid); if (platform_object_id.is_valid()) { parameters.exclude_objects.insert(platform_object_id); @@ -1277,6 +1271,7 @@ void CharacterBody3D::_move_and_slide_grounded(double p_delta, bool p_was_on_flo for (int iteration = 0; iteration < max_slides; ++iteration) { PhysicsServer3D::MotionParameters parameters(get_global_transform(), motion, margin); parameters.max_collisions = 4; + parameters.recovery_as_collision = true; // Also report collisions generated only from recovery. PhysicsServer3D::MotionResult result; bool collided = move_and_collide(parameters, result, false, !sliding_enabled); @@ -1521,6 +1516,7 @@ void CharacterBody3D::_move_and_slide_floating(double p_delta) { bool first_slide = true; for (int iteration = 0; iteration < max_slides; ++iteration) { PhysicsServer3D::MotionParameters parameters(get_global_transform(), motion, margin); + parameters.recovery_as_collision = true; // Also report collisions generated only from recovery. PhysicsServer3D::MotionResult result; bool collided = move_and_collide(parameters, result, false, false); @@ -1575,6 +1571,7 @@ void CharacterBody3D::_snap_on_floor(bool p_was_on_floor, bool p_vel_dir_facing_ PhysicsServer3D::MotionParameters parameters(get_global_transform(), -up_direction * length, margin); parameters.max_collisions = 4; + parameters.recovery_as_collision = true; // Also report collisions generated only from recovery. parameters.collide_separation_ray = true; PhysicsServer3D::MotionResult result; @@ -1610,6 +1607,7 @@ bool CharacterBody3D::_on_floor_if_snapped(bool p_was_on_floor, bool p_vel_dir_f PhysicsServer3D::MotionParameters parameters(get_global_transform(), -up_direction * length, margin); parameters.max_collisions = 4; + parameters.recovery_as_collision = true; // Also report collisions generated only from recovery. parameters.collide_separation_ray = true; PhysicsServer3D::MotionResult result; @@ -2263,9 +2261,9 @@ bool PhysicalBone3D::PinJointData::_get(const StringName &p_name, Variant &r_ret void PhysicalBone3D::PinJointData::_get_property_list(List<PropertyInfo> *p_list) const { JointData::_get_property_list(p_list); - p_list->push_back(PropertyInfo(Variant::FLOAT, "joint_constraints/bias", PROPERTY_HINT_RANGE, "0.01,0.99,0.01")); - p_list->push_back(PropertyInfo(Variant::FLOAT, "joint_constraints/damping", PROPERTY_HINT_RANGE, "0.01,8.0,0.01")); - p_list->push_back(PropertyInfo(Variant::FLOAT, "joint_constraints/impulse_clamp", PROPERTY_HINT_RANGE, "0.0,64.0,0.01")); + p_list->push_back(PropertyInfo(Variant::FLOAT, PNAME("joint_constraints/bias"), PROPERTY_HINT_RANGE, "0.01,0.99,0.01")); + p_list->push_back(PropertyInfo(Variant::FLOAT, PNAME("joint_constraints/damping"), PROPERTY_HINT_RANGE, "0.01,8.0,0.01")); + p_list->push_back(PropertyInfo(Variant::FLOAT, PNAME("joint_constraints/impulse_clamp"), PROPERTY_HINT_RANGE, "0.0,64.0,0.01")); } bool PhysicalBone3D::ConeJointData::_set(const StringName &p_name, const Variant &p_value, RID j) { @@ -2335,11 +2333,11 @@ bool PhysicalBone3D::ConeJointData::_get(const StringName &p_name, Variant &r_re void PhysicalBone3D::ConeJointData::_get_property_list(List<PropertyInfo> *p_list) const { JointData::_get_property_list(p_list); - p_list->push_back(PropertyInfo(Variant::FLOAT, "joint_constraints/swing_span", PROPERTY_HINT_RANGE, "-180,180,0.01")); - p_list->push_back(PropertyInfo(Variant::FLOAT, "joint_constraints/twist_span", PROPERTY_HINT_RANGE, "-40000,40000,0.1,or_lesser,or_greater")); - p_list->push_back(PropertyInfo(Variant::FLOAT, "joint_constraints/bias", PROPERTY_HINT_RANGE, "0.01,16.0,0.01")); - p_list->push_back(PropertyInfo(Variant::FLOAT, "joint_constraints/softness", PROPERTY_HINT_RANGE, "0.01,16.0,0.01")); - p_list->push_back(PropertyInfo(Variant::FLOAT, "joint_constraints/relaxation", PROPERTY_HINT_RANGE, "0.01,16.0,0.01")); + p_list->push_back(PropertyInfo(Variant::FLOAT, PNAME("joint_constraints/swing_span"), PROPERTY_HINT_RANGE, "-180,180,0.01")); + p_list->push_back(PropertyInfo(Variant::FLOAT, PNAME("joint_constraints/twist_span"), PROPERTY_HINT_RANGE, "-40000,40000,0.1,or_lesser,or_greater")); + p_list->push_back(PropertyInfo(Variant::FLOAT, PNAME("joint_constraints/bias"), PROPERTY_HINT_RANGE, "0.01,16.0,0.01")); + p_list->push_back(PropertyInfo(Variant::FLOAT, PNAME("joint_constraints/softness"), PROPERTY_HINT_RANGE, "0.01,16.0,0.01")); + p_list->push_back(PropertyInfo(Variant::FLOAT, PNAME("joint_constraints/relaxation"), PROPERTY_HINT_RANGE, "0.01,16.0,0.01")); } bool PhysicalBone3D::HingeJointData::_set(const StringName &p_name, const Variant &p_value, RID j) { @@ -2417,12 +2415,12 @@ bool PhysicalBone3D::HingeJointData::_get(const StringName &p_name, Variant &r_r void PhysicalBone3D::HingeJointData::_get_property_list(List<PropertyInfo> *p_list) const { JointData::_get_property_list(p_list); - p_list->push_back(PropertyInfo(Variant::BOOL, "joint_constraints/angular_limit_enabled")); - p_list->push_back(PropertyInfo(Variant::FLOAT, "joint_constraints/angular_limit_upper", PROPERTY_HINT_RANGE, "-180,180,0.01")); - p_list->push_back(PropertyInfo(Variant::FLOAT, "joint_constraints/angular_limit_lower", PROPERTY_HINT_RANGE, "-180,180,0.01")); - p_list->push_back(PropertyInfo(Variant::FLOAT, "joint_constraints/angular_limit_bias", PROPERTY_HINT_RANGE, "0.01,0.99,0.01")); - p_list->push_back(PropertyInfo(Variant::FLOAT, "joint_constraints/angular_limit_softness", PROPERTY_HINT_RANGE, "0.01,16,0.01")); - p_list->push_back(PropertyInfo(Variant::FLOAT, "joint_constraints/angular_limit_relaxation", PROPERTY_HINT_RANGE, "0.01,16,0.01")); + p_list->push_back(PropertyInfo(Variant::BOOL, PNAME("joint_constraints/angular_limit_enabled"))); + p_list->push_back(PropertyInfo(Variant::FLOAT, PNAME("joint_constraints/angular_limit_upper"), PROPERTY_HINT_RANGE, "-180,180,0.01")); + p_list->push_back(PropertyInfo(Variant::FLOAT, PNAME("joint_constraints/angular_limit_lower"), PROPERTY_HINT_RANGE, "-180,180,0.01")); + p_list->push_back(PropertyInfo(Variant::FLOAT, PNAME("joint_constraints/angular_limit_bias"), PROPERTY_HINT_RANGE, "0.01,0.99,0.01")); + p_list->push_back(PropertyInfo(Variant::FLOAT, PNAME("joint_constraints/angular_limit_softness"), PROPERTY_HINT_RANGE, "0.01,16,0.01")); + p_list->push_back(PropertyInfo(Variant::FLOAT, PNAME("joint_constraints/angular_limit_relaxation"), PROPERTY_HINT_RANGE, "0.01,16,0.01")); } bool PhysicalBone3D::SliderJointData::_set(const StringName &p_name, const Variant &p_value, RID j) { @@ -2532,17 +2530,17 @@ bool PhysicalBone3D::SliderJointData::_get(const StringName &p_name, Variant &r_ void PhysicalBone3D::SliderJointData::_get_property_list(List<PropertyInfo> *p_list) const { JointData::_get_property_list(p_list); - p_list->push_back(PropertyInfo(Variant::FLOAT, "joint_constraints/linear_limit_upper")); - p_list->push_back(PropertyInfo(Variant::FLOAT, "joint_constraints/linear_limit_lower")); - p_list->push_back(PropertyInfo(Variant::FLOAT, "joint_constraints/linear_limit_softness", PROPERTY_HINT_RANGE, "0.01,16.0,0.01")); - p_list->push_back(PropertyInfo(Variant::FLOAT, "joint_constraints/linear_limit_restitution", PROPERTY_HINT_RANGE, "0.01,16.0,0.01")); - p_list->push_back(PropertyInfo(Variant::FLOAT, "joint_constraints/linear_limit_damping", PROPERTY_HINT_RANGE, "0,16.0,0.01")); + p_list->push_back(PropertyInfo(Variant::FLOAT, PNAME("joint_constraints/linear_limit_upper"))); + p_list->push_back(PropertyInfo(Variant::FLOAT, PNAME("joint_constraints/linear_limit_lower"))); + p_list->push_back(PropertyInfo(Variant::FLOAT, PNAME("joint_constraints/linear_limit_softness"), PROPERTY_HINT_RANGE, "0.01,16.0,0.01")); + p_list->push_back(PropertyInfo(Variant::FLOAT, PNAME("joint_constraints/linear_limit_restitution"), PROPERTY_HINT_RANGE, "0.01,16.0,0.01")); + p_list->push_back(PropertyInfo(Variant::FLOAT, PNAME("joint_constraints/linear_limit_damping"), PROPERTY_HINT_RANGE, "0,16.0,0.01")); - p_list->push_back(PropertyInfo(Variant::FLOAT, "joint_constraints/angular_limit_upper", PROPERTY_HINT_RANGE, "-180,180,0.01")); - p_list->push_back(PropertyInfo(Variant::FLOAT, "joint_constraints/angular_limit_lower", PROPERTY_HINT_RANGE, "-180,180,0.01")); - p_list->push_back(PropertyInfo(Variant::FLOAT, "joint_constraints/angular_limit_softness", PROPERTY_HINT_RANGE, "0.01,16.0,0.01")); - p_list->push_back(PropertyInfo(Variant::FLOAT, "joint_constraints/angular_limit_restitution", PROPERTY_HINT_RANGE, "0.01,16.0,0.01")); - p_list->push_back(PropertyInfo(Variant::FLOAT, "joint_constraints/angular_limit_damping", PROPERTY_HINT_RANGE, "0,16.0,0.01")); + p_list->push_back(PropertyInfo(Variant::FLOAT, PNAME("joint_constraints/angular_limit_upper"), PROPERTY_HINT_RANGE, "-180,180,0.01")); + p_list->push_back(PropertyInfo(Variant::FLOAT, PNAME("joint_constraints/angular_limit_lower"), PROPERTY_HINT_RANGE, "-180,180,0.01")); + p_list->push_back(PropertyInfo(Variant::FLOAT, PNAME("joint_constraints/angular_limit_softness"), PROPERTY_HINT_RANGE, "0.01,16.0,0.01")); + p_list->push_back(PropertyInfo(Variant::FLOAT, PNAME("joint_constraints/angular_limit_restitution"), PROPERTY_HINT_RANGE, "0.01,16.0,0.01")); + p_list->push_back(PropertyInfo(Variant::FLOAT, PNAME("joint_constraints/angular_limit_damping"), PROPERTY_HINT_RANGE, "0,16.0,0.01")); } bool PhysicalBone3D::SixDOFJointData::_set(const StringName &p_name, const Variant &p_value, RID j) { @@ -2782,29 +2780,30 @@ bool PhysicalBone3D::SixDOFJointData::_get(const StringName &p_name, Variant &r_ } void PhysicalBone3D::SixDOFJointData::_get_property_list(List<PropertyInfo> *p_list) const { - const StringName axis_names[] = { "x", "y", "z" }; + const StringName axis_names[] = { PNAME("x"), PNAME("y"), PNAME("z") }; for (int i = 0; i < 3; ++i) { - p_list->push_back(PropertyInfo(Variant::BOOL, "joint_constraints/" + axis_names[i] + "/linear_limit_enabled")); - p_list->push_back(PropertyInfo(Variant::FLOAT, "joint_constraints/" + axis_names[i] + "/linear_limit_upper")); - p_list->push_back(PropertyInfo(Variant::FLOAT, "joint_constraints/" + axis_names[i] + "/linear_limit_lower")); - p_list->push_back(PropertyInfo(Variant::FLOAT, "joint_constraints/" + axis_names[i] + "/linear_limit_softness", PROPERTY_HINT_RANGE, "0.01,16,0.01")); - p_list->push_back(PropertyInfo(Variant::BOOL, "joint_constraints/" + axis_names[i] + "/linear_spring_enabled")); - p_list->push_back(PropertyInfo(Variant::FLOAT, "joint_constraints/" + axis_names[i] + "/linear_spring_stiffness")); - p_list->push_back(PropertyInfo(Variant::FLOAT, "joint_constraints/" + axis_names[i] + "/linear_spring_damping")); - p_list->push_back(PropertyInfo(Variant::FLOAT, "joint_constraints/" + axis_names[i] + "/linear_equilibrium_point")); - p_list->push_back(PropertyInfo(Variant::FLOAT, "joint_constraints/" + axis_names[i] + "/linear_restitution", PROPERTY_HINT_RANGE, "0.01,16,0.01")); - p_list->push_back(PropertyInfo(Variant::FLOAT, "joint_constraints/" + axis_names[i] + "/linear_damping", PROPERTY_HINT_RANGE, "0.01,16,0.01")); - p_list->push_back(PropertyInfo(Variant::BOOL, "joint_constraints/" + axis_names[i] + "/angular_limit_enabled")); - p_list->push_back(PropertyInfo(Variant::FLOAT, "joint_constraints/" + axis_names[i] + "/angular_limit_upper", PROPERTY_HINT_RANGE, "-180,180,0.01")); - p_list->push_back(PropertyInfo(Variant::FLOAT, "joint_constraints/" + axis_names[i] + "/angular_limit_lower", PROPERTY_HINT_RANGE, "-180,180,0.01")); - p_list->push_back(PropertyInfo(Variant::FLOAT, "joint_constraints/" + axis_names[i] + "/angular_limit_softness", PROPERTY_HINT_RANGE, "0.01,16,0.01")); - p_list->push_back(PropertyInfo(Variant::FLOAT, "joint_constraints/" + axis_names[i] + "/angular_restitution", PROPERTY_HINT_RANGE, "0.01,16,0.01")); - p_list->push_back(PropertyInfo(Variant::FLOAT, "joint_constraints/" + axis_names[i] + "/angular_damping", PROPERTY_HINT_RANGE, "0.01,16,0.01")); - p_list->push_back(PropertyInfo(Variant::FLOAT, "joint_constraints/" + axis_names[i] + "/erp")); - p_list->push_back(PropertyInfo(Variant::BOOL, "joint_constraints/" + axis_names[i] + "/angular_spring_enabled")); - p_list->push_back(PropertyInfo(Variant::FLOAT, "joint_constraints/" + axis_names[i] + "/angular_spring_stiffness")); - p_list->push_back(PropertyInfo(Variant::FLOAT, "joint_constraints/" + axis_names[i] + "/angular_spring_damping")); - p_list->push_back(PropertyInfo(Variant::FLOAT, "joint_constraints/" + axis_names[i] + "/angular_equilibrium_point")); + const String prefix = vformat("%s/%s/", PNAME("joint_constraints"), axis_names[i]); + p_list->push_back(PropertyInfo(Variant::BOOL, prefix + PNAME("linear_limit_enabled"))); + p_list->push_back(PropertyInfo(Variant::FLOAT, prefix + PNAME("linear_limit_upper"))); + p_list->push_back(PropertyInfo(Variant::FLOAT, prefix + PNAME("linear_limit_lower"))); + p_list->push_back(PropertyInfo(Variant::FLOAT, prefix + PNAME("linear_limit_softness"), PROPERTY_HINT_RANGE, "0.01,16,0.01")); + p_list->push_back(PropertyInfo(Variant::BOOL, prefix + PNAME("linear_spring_enabled"))); + p_list->push_back(PropertyInfo(Variant::FLOAT, prefix + PNAME("linear_spring_stiffness"))); + p_list->push_back(PropertyInfo(Variant::FLOAT, prefix + PNAME("linear_spring_damping"))); + p_list->push_back(PropertyInfo(Variant::FLOAT, prefix + PNAME("linear_equilibrium_point"))); + p_list->push_back(PropertyInfo(Variant::FLOAT, prefix + PNAME("linear_restitution"), PROPERTY_HINT_RANGE, "0.01,16,0.01")); + p_list->push_back(PropertyInfo(Variant::FLOAT, prefix + PNAME("linear_damping"), PROPERTY_HINT_RANGE, "0.01,16,0.01")); + p_list->push_back(PropertyInfo(Variant::BOOL, prefix + PNAME("angular_limit_enabled"))); + p_list->push_back(PropertyInfo(Variant::FLOAT, prefix + PNAME("angular_limit_upper"), PROPERTY_HINT_RANGE, "-180,180,0.01")); + p_list->push_back(PropertyInfo(Variant::FLOAT, prefix + PNAME("angular_limit_lower"), PROPERTY_HINT_RANGE, "-180,180,0.01")); + p_list->push_back(PropertyInfo(Variant::FLOAT, prefix + PNAME("angular_limit_softness"), PROPERTY_HINT_RANGE, "0.01,16,0.01")); + p_list->push_back(PropertyInfo(Variant::FLOAT, prefix + PNAME("angular_restitution"), PROPERTY_HINT_RANGE, "0.01,16,0.01")); + p_list->push_back(PropertyInfo(Variant::FLOAT, prefix + PNAME("angular_damping"), PROPERTY_HINT_RANGE, "0.01,16,0.01")); + p_list->push_back(PropertyInfo(Variant::FLOAT, prefix + PNAME("erp"))); + p_list->push_back(PropertyInfo(Variant::BOOL, prefix + PNAME("angular_spring_enabled"))); + p_list->push_back(PropertyInfo(Variant::FLOAT, prefix + PNAME("angular_spring_stiffness"))); + p_list->push_back(PropertyInfo(Variant::FLOAT, prefix + PNAME("angular_spring_damping"))); + p_list->push_back(PropertyInfo(Variant::FLOAT, prefix + PNAME("angular_equilibrium_point"))); } } @@ -2851,9 +2850,9 @@ void PhysicalBone3D::_get_property_list(List<PropertyInfo> *p_list) const { names += parent->get_bone_name(i); } - p_list->push_back(PropertyInfo(Variant::STRING_NAME, "bone_name", PROPERTY_HINT_ENUM, names)); + p_list->push_back(PropertyInfo(Variant::STRING_NAME, PNAME("bone_name"), PROPERTY_HINT_ENUM, names)); } else { - p_list->push_back(PropertyInfo(Variant::STRING_NAME, "bone_name")); + p_list->push_back(PropertyInfo(Variant::STRING_NAME, PNAME("bone_name"))); } if (joint_data) { diff --git a/scene/3d/skeleton_3d.cpp b/scene/3d/skeleton_3d.cpp index f4a7767c44..ba2029788e 100644 --- a/scene/3d/skeleton_3d.cpp +++ b/scene/3d/skeleton_3d.cpp @@ -153,14 +153,14 @@ bool Skeleton3D::_get(const StringName &p_path, Variant &r_ret) const { void Skeleton3D::_get_property_list(List<PropertyInfo> *p_list) const { for (int i = 0; i < bones.size(); i++) { - String prep = "bones/" + itos(i) + "/"; - p_list->push_back(PropertyInfo(Variant::STRING, prep + "name", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR)); - p_list->push_back(PropertyInfo(Variant::INT, prep + "parent", PROPERTY_HINT_RANGE, "-1," + itos(bones.size() - 1) + ",1", PROPERTY_USAGE_NO_EDITOR)); - p_list->push_back(PropertyInfo(Variant::TRANSFORM3D, prep + "rest", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR)); - p_list->push_back(PropertyInfo(Variant::BOOL, prep + "enabled", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR)); - p_list->push_back(PropertyInfo(Variant::VECTOR3, prep + "position", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR)); - p_list->push_back(PropertyInfo(Variant::QUATERNION, prep + "rotation", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR)); - p_list->push_back(PropertyInfo(Variant::VECTOR3, prep + "scale", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR)); + const String prep = vformat("%s/%d/", PNAME("bones"), i); + p_list->push_back(PropertyInfo(Variant::STRING, prep + PNAME("name"), PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR)); + p_list->push_back(PropertyInfo(Variant::INT, prep + PNAME("parent"), PROPERTY_HINT_RANGE, "-1," + itos(bones.size() - 1) + ",1", PROPERTY_USAGE_NO_EDITOR)); + p_list->push_back(PropertyInfo(Variant::TRANSFORM3D, prep + PNAME("rest"), PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR)); + p_list->push_back(PropertyInfo(Variant::BOOL, prep + PNAME("enabled"), PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR)); + p_list->push_back(PropertyInfo(Variant::VECTOR3, prep + PNAME("position"), PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR)); + p_list->push_back(PropertyInfo(Variant::QUATERNION, prep + PNAME("rotation"), PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR)); + p_list->push_back(PropertyInfo(Variant::VECTOR3, prep + PNAME("scale"), PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR)); } #ifndef _3D_DISABLED @@ -263,19 +263,19 @@ void Skeleton3D::_notification(int p_what) { force_update_all_bone_transforms(); // Update skins. - for (RBSet<SkinReference *>::Element *E = skin_bindings.front(); E; E = E->next()) { - const Skin *skin = E->get()->skin.operator->(); - RID skeleton = E->get()->skeleton; + for (SkinReference *E : skin_bindings) { + const Skin *skin = E->skin.operator->(); + RID skeleton = E->skeleton; uint32_t bind_count = skin->get_bind_count(); - if (E->get()->bind_count != bind_count) { + if (E->bind_count != bind_count) { RS::get_singleton()->skeleton_allocate_data(skeleton, bind_count); - E->get()->bind_count = bind_count; - E->get()->skin_bone_indices.resize(bind_count); - E->get()->skin_bone_indices_ptrs = E->get()->skin_bone_indices.ptrw(); + E->bind_count = bind_count; + E->skin_bone_indices.resize(bind_count); + E->skin_bone_indices_ptrs = E->skin_bone_indices.ptrw(); } - if (E->get()->skeleton_version != version) { + if (E->skeleton_version != version) { for (uint32_t i = 0; i < bind_count; i++) { StringName bind_name = skin->get_bind_name(i); @@ -284,7 +284,7 @@ void Skeleton3D::_notification(int p_what) { bool found = false; for (int j = 0; j < len; j++) { if (bonesptr[j].name == bind_name) { - E->get()->skin_bone_indices_ptrs[i] = j; + E->skin_bone_indices_ptrs[i] = j; found = true; break; } @@ -292,27 +292,27 @@ void Skeleton3D::_notification(int p_what) { if (!found) { ERR_PRINT("Skin bind #" + itos(i) + " contains named bind '" + String(bind_name) + "' but Skeleton3D has no bone by that name."); - E->get()->skin_bone_indices_ptrs[i] = 0; + E->skin_bone_indices_ptrs[i] = 0; } } else if (skin->get_bind_bone(i) >= 0) { int bind_index = skin->get_bind_bone(i); if (bind_index >= len) { ERR_PRINT("Skin bind #" + itos(i) + " contains bone index bind: " + itos(bind_index) + " , which is greater than the skeleton bone count: " + itos(len) + "."); - E->get()->skin_bone_indices_ptrs[i] = 0; + E->skin_bone_indices_ptrs[i] = 0; } else { - E->get()->skin_bone_indices_ptrs[i] = bind_index; + E->skin_bone_indices_ptrs[i] = bind_index; } } else { ERR_PRINT("Skin bind #" + itos(i) + " does not contain a name nor a bone index."); - E->get()->skin_bone_indices_ptrs[i] = 0; + E->skin_bone_indices_ptrs[i] = 0; } } - E->get()->skeleton_version = version; + E->skeleton_version = version; } for (uint32_t i = 0; i < bind_count; i++) { - uint32_t bone_index = E->get()->skin_bone_indices_ptrs[i]; + uint32_t bone_index = E->skin_bone_indices_ptrs[i]; ERR_CONTINUE(bone_index >= (uint32_t)len); rs->skeleton_bone_set_transform(skeleton, i, bonesptr[bone_index].pose_global * skin->get_bind_pose(i)); } @@ -1000,9 +1000,9 @@ Ref<Skin> Skeleton3D::create_skin_from_rest_transforms() { Ref<SkinReference> Skeleton3D::register_skin(const Ref<Skin> &p_skin) { ERR_FAIL_COND_V(p_skin.is_null(), Ref<SkinReference>()); - for (RBSet<SkinReference *>::Element *E = skin_bindings.front(); E; E = E->next()) { - if (E->get()->skin == p_skin) { - return Ref<SkinReference>(E->get()); + for (const SkinReference *E : skin_bindings) { + if (E->skin == p_skin) { + return Ref<SkinReference>(E); } } @@ -1303,7 +1303,7 @@ Skeleton3D::Skeleton3D() { Skeleton3D::~Skeleton3D() { // Some skins may remain bound. - for (RBSet<SkinReference *>::Element *E = skin_bindings.front(); E; E = E->next()) { - E->get()->skeleton_node = nullptr; + for (SkinReference *E : skin_bindings) { + E->skeleton_node = nullptr; } } diff --git a/scene/3d/soft_dynamic_body_3d.cpp b/scene/3d/soft_dynamic_body_3d.cpp index 7d786a41bf..5816c0650f 100644 --- a/scene/3d/soft_dynamic_body_3d.cpp +++ b/scene/3d/soft_dynamic_body_3d.cpp @@ -162,12 +162,13 @@ bool SoftDynamicBody3D::_get(const StringName &p_name, Variant &r_ret) const { void SoftDynamicBody3D::_get_property_list(List<PropertyInfo> *p_list) const { const int pinned_points_indices_size = pinned_points.size(); - p_list->push_back(PropertyInfo(Variant::PACKED_INT32_ARRAY, "pinned_points")); + p_list->push_back(PropertyInfo(Variant::PACKED_INT32_ARRAY, PNAME("pinned_points"))); for (int i = 0; i < pinned_points_indices_size; ++i) { - p_list->push_back(PropertyInfo(Variant::INT, "attachments/" + itos(i) + "/point_index")); - p_list->push_back(PropertyInfo(Variant::NODE_PATH, "attachments/" + itos(i) + "/spatial_attachment_path")); - p_list->push_back(PropertyInfo(Variant::VECTOR3, "attachments/" + itos(i) + "/offset")); + const String prefix = vformat("%s/%d", PNAME("attachments"), i); + p_list->push_back(PropertyInfo(Variant::INT, prefix + PNAME("point_index"))); + p_list->push_back(PropertyInfo(Variant::NODE_PATH, prefix + PNAME("spatial_attachment_path"))); + p_list->push_back(PropertyInfo(Variant::VECTOR3, prefix + PNAME("offset"))); } } diff --git a/scene/animation/animation_blend_space_1d.cpp b/scene/animation/animation_blend_space_1d.cpp index 849316c568..594f98410e 100644 --- a/scene/animation/animation_blend_space_1d.cpp +++ b/scene/animation/animation_blend_space_1d.cpp @@ -219,14 +219,14 @@ void AnimationNodeBlendSpace1D::_add_blend_point(int p_index, const Ref<Animatio } } -double AnimationNodeBlendSpace1D::process(double p_time, bool p_seek) { +double AnimationNodeBlendSpace1D::process(double p_time, bool p_seek, bool p_seek_root) { if (blend_points_used == 0) { return 0.0; } if (blend_points_used == 1) { // only one point available, just play that animation - return blend_node(blend_points[0].name, blend_points[0].node, p_time, p_seek, 1.0, FILTER_IGNORE, false); + return blend_node(blend_points[0].name, blend_points[0].node, p_time, p_seek, p_seek_root, 1.0, FILTER_IGNORE, false); } double blend_pos = get_parameter(blend_position); @@ -295,7 +295,7 @@ double AnimationNodeBlendSpace1D::process(double p_time, bool p_seek) { double max_time_remaining = 0.0; for (int i = 0; i < blend_points_used; i++) { - double remaining = blend_node(blend_points[i].name, blend_points[i].node, p_time, p_seek, weights[i], FILTER_IGNORE, false); + double remaining = blend_node(blend_points[i].name, blend_points[i].node, p_time, p_seek, p_seek_root, weights[i], FILTER_IGNORE, false); max_time_remaining = MAX(max_time_remaining, remaining); } diff --git a/scene/animation/animation_blend_space_1d.h b/scene/animation/animation_blend_space_1d.h index 7038cece06..b2075c8c93 100644 --- a/scene/animation/animation_blend_space_1d.h +++ b/scene/animation/animation_blend_space_1d.h @@ -93,7 +93,7 @@ public: void set_value_label(const String &p_label); String get_value_label() const; - double process(double p_time, bool p_seek) override; + double process(double p_time, bool p_seek, bool p_seek_root) override; String get_caption() const override; Ref<AnimationNode> get_child_by_name(const StringName &p_name) override; diff --git a/scene/animation/animation_blend_space_2d.cpp b/scene/animation/animation_blend_space_2d.cpp index a3aa3f6cc8..acdce2d7de 100644 --- a/scene/animation/animation_blend_space_2d.cpp +++ b/scene/animation/animation_blend_space_2d.cpp @@ -432,7 +432,7 @@ void AnimationNodeBlendSpace2D::_blend_triangle(const Vector2 &p_pos, const Vect r_weights[2] = w; } -double AnimationNodeBlendSpace2D::process(double p_time, bool p_seek) { +double AnimationNodeBlendSpace2D::process(double p_time, bool p_seek, bool p_seek_root) { _update_triangles(); Vector2 blend_pos = get_parameter(blend_position); @@ -502,7 +502,7 @@ double AnimationNodeBlendSpace2D::process(double p_time, bool p_seek) { for (int j = 0; j < 3; j++) { if (i == triangle_points[j]) { //blend with the given weight - double t = blend_node(blend_points[i].name, blend_points[i].node, p_time, p_seek, blend_weights[j], FILTER_IGNORE, false); + double t = blend_node(blend_points[i].name, blend_points[i].node, p_time, p_seek, p_seek_root, blend_weights[j], FILTER_IGNORE, false); if (first || t < mind) { mind = t; first = false; @@ -514,7 +514,7 @@ double AnimationNodeBlendSpace2D::process(double p_time, bool p_seek) { if (!found) { //ignore - blend_node(blend_points[i].name, blend_points[i].node, p_time, p_seek, 0, FILTER_IGNORE, false); + blend_node(blend_points[i].name, blend_points[i].node, p_time, p_seek, p_seek_root, 0, FILTER_IGNORE, false); } } } else { @@ -539,16 +539,16 @@ double AnimationNodeBlendSpace2D::process(double p_time, bool p_seek) { na_n->set_backward(na_c->is_backward()); } //see how much animation remains - from = length_internal - blend_node(blend_points[closest].name, blend_points[closest].node, p_time, false, 0.0, FILTER_IGNORE, false); + from = length_internal - blend_node(blend_points[closest].name, blend_points[closest].node, p_time, false, p_seek_root, 0.0, FILTER_IGNORE, false); } - mind = blend_node(blend_points[new_closest].name, blend_points[new_closest].node, from, true, 1.0, FILTER_IGNORE, false); + mind = blend_node(blend_points[new_closest].name, blend_points[new_closest].node, from, true, p_seek_root, 1.0, FILTER_IGNORE, false); length_internal = from + mind; closest = new_closest; } else { - mind = blend_node(blend_points[closest].name, blend_points[closest].node, p_time, p_seek, 1.0, FILTER_IGNORE, false); + mind = blend_node(blend_points[closest].name, blend_points[closest].node, p_time, p_seek, p_seek_root, 1.0, FILTER_IGNORE, false); } } diff --git a/scene/animation/animation_blend_space_2d.h b/scene/animation/animation_blend_space_2d.h index 1356656bf8..01f53ed25a 100644 --- a/scene/animation/animation_blend_space_2d.h +++ b/scene/animation/animation_blend_space_2d.h @@ -126,7 +126,7 @@ public: void set_y_label(const String &p_label); String get_y_label() const; - virtual double process(double p_time, bool p_seek) override; + virtual double process(double p_time, bool p_seek, bool p_seek_root) override; virtual String get_caption() const override; Vector2 get_closest_point(const Vector2 &p_point); diff --git a/scene/animation/animation_blend_tree.cpp b/scene/animation/animation_blend_tree.cpp index 433f21f91f..17a99ed034 100644 --- a/scene/animation/animation_blend_tree.cpp +++ b/scene/animation/animation_blend_tree.cpp @@ -64,7 +64,7 @@ void AnimationNodeAnimation::_validate_property(PropertyInfo &property) const { } } -double AnimationNodeAnimation::process(double p_time, bool p_seek) { +double AnimationNodeAnimation::process(double p_time, bool p_seek, bool p_seek_root) { AnimationPlayer *ap = state->player; ERR_FAIL_COND_V(!ap, 0); @@ -101,8 +101,8 @@ double AnimationNodeAnimation::process(double p_time, bool p_seek) { } } - if (anim->get_loop_mode() == Animation::LoopMode::LOOP_PINGPONG) { - if (anim_size) { + if (anim->get_loop_mode() == Animation::LOOP_PINGPONG) { + if (!Math::is_zero_approx(anim_size)) { if ((int)Math::floor(abs(time - prev_time) / anim_size) % 2 == 0) { if (prev_time > 0 && time <= 0) { backward = !backward; @@ -116,22 +116,24 @@ double AnimationNodeAnimation::process(double p_time, bool p_seek) { time = Math::pingpong(time, anim_size); } } else { - if (anim->get_loop_mode() == Animation::LoopMode::LOOP_LINEAR) { - if (anim_size) { + if (anim->get_loop_mode() == Animation::LOOP_LINEAR) { + if (!Math::is_zero_approx(anim_size)) { time = Math::fposmod(time, anim_size); } } else if (time < 0) { + step += time; time = 0; } else if (time > anim_size) { + step += anim_size - time; time = anim_size; } backward = false; } if (play_mode == PLAY_MODE_FORWARD) { - blend_animation(animation, time, step, p_seek, 1.0, pingponged); + blend_animation(animation, time, step, p_seek, p_seek_root, 1.0, pingponged); } else { - blend_animation(animation, anim_size - time, -step, p_seek, 1.0, pingponged); + blend_animation(animation, anim_size - time, -step, p_seek, p_seek_root, 1.0, pingponged); } set_parameter(this->time, time); @@ -251,7 +253,7 @@ bool AnimationNodeOneShot::has_filter() const { return true; } -double AnimationNodeOneShot::process(double p_time, bool p_seek) { +double AnimationNodeOneShot::process(double p_time, bool p_seek, bool p_seek_root) { bool active = get_parameter(this->active); bool prev_active = get_parameter(this->prev_active); double time = get_parameter(this->time); @@ -274,7 +276,7 @@ double AnimationNodeOneShot::process(double p_time, bool p_seek) { } if (!active) { - return blend_input(0, p_time, p_seek, 1.0, FILTER_IGNORE, !sync); + return blend_input(0, p_time, p_seek, p_seek_root, 1.0, FILTER_IGNORE, !sync); } } @@ -311,12 +313,12 @@ double AnimationNodeOneShot::process(double p_time, bool p_seek) { double main_rem; if (mix == MIX_MODE_ADD) { - main_rem = blend_input(0, p_time, p_seek, 1.0, FILTER_IGNORE, !sync); + main_rem = blend_input(0, p_time, p_seek, p_seek_root, 1.0, FILTER_IGNORE, !sync); } else { - main_rem = blend_input(0, p_time, p_seek, 1.0 - blend, FILTER_BLEND, !sync); + main_rem = blend_input(0, p_time, p_seek, p_seek_root, 1.0 - blend, FILTER_BLEND, !sync); } - double 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, p_seek_root, blend, FILTER_PASS, false); if (do_start) { remaining = os_rem; @@ -420,10 +422,10 @@ bool AnimationNodeAdd2::has_filter() const { return true; } -double AnimationNodeAdd2::process(double p_time, bool p_seek) { +double AnimationNodeAdd2::process(double p_time, bool p_seek, bool p_seek_root) { double amount = get_parameter(add_amount); - double rem0 = blend_input(0, p_time, p_seek, 1.0, FILTER_IGNORE, !sync); - blend_input(1, p_time, p_seek, amount, FILTER_PASS, !sync); + double rem0 = blend_input(0, p_time, p_seek, p_seek_root, 1.0, FILTER_IGNORE, !sync); + blend_input(1, p_time, p_seek, p_seek_root, amount, FILTER_PASS, !sync); return rem0; } @@ -466,11 +468,11 @@ bool AnimationNodeAdd3::has_filter() const { return true; } -double AnimationNodeAdd3::process(double p_time, bool p_seek) { +double AnimationNodeAdd3::process(double p_time, bool p_seek, bool p_seek_root) { double amount = get_parameter(add_amount); - blend_input(0, p_time, p_seek, MAX(0, -amount), FILTER_PASS, !sync); - double rem0 = blend_input(1, p_time, p_seek, 1.0, FILTER_IGNORE, !sync); - blend_input(2, p_time, p_seek, MAX(0, amount), FILTER_PASS, !sync); + blend_input(0, p_time, p_seek, p_seek_root, MAX(0, -amount), FILTER_PASS, !sync); + double rem0 = blend_input(1, p_time, p_seek, p_seek_root, 1.0, FILTER_IGNORE, !sync); + blend_input(2, p_time, p_seek, p_seek_root, MAX(0, amount), FILTER_PASS, !sync); return rem0; } @@ -502,11 +504,11 @@ String AnimationNodeBlend2::get_caption() const { return "Blend2"; } -double AnimationNodeBlend2::process(double p_time, bool p_seek) { +double AnimationNodeBlend2::process(double p_time, bool p_seek, bool p_seek_root) { double amount = get_parameter(blend_amount); - double rem0 = blend_input(0, p_time, p_seek, 1.0 - amount, FILTER_BLEND, !sync); - double rem1 = blend_input(1, p_time, p_seek, amount, FILTER_PASS, !sync); + double rem0 = blend_input(0, p_time, p_seek, p_seek_root, 1.0 - amount, FILTER_BLEND, !sync); + double rem1 = blend_input(1, p_time, p_seek, p_seek_root, amount, FILTER_PASS, !sync); return amount > 0.5 ? rem1 : rem0; //hacky but good enough } @@ -557,11 +559,11 @@ bool AnimationNodeBlend3::is_using_sync() const { return sync; } -double AnimationNodeBlend3::process(double p_time, bool p_seek) { +double AnimationNodeBlend3::process(double p_time, bool p_seek, bool p_seek_root) { double amount = get_parameter(blend_amount); - double rem0 = blend_input(0, p_time, p_seek, MAX(0, -amount), FILTER_IGNORE, !sync); - double rem1 = blend_input(1, p_time, p_seek, 1.0 - ABS(amount), FILTER_IGNORE, !sync); - double rem2 = blend_input(2, p_time, p_seek, MAX(0, amount), FILTER_IGNORE, !sync); + double rem0 = blend_input(0, p_time, p_seek, p_seek_root, MAX(0, -amount), FILTER_IGNORE, !sync); + double rem1 = blend_input(1, p_time, p_seek, p_seek_root, 1.0 - ABS(amount), FILTER_IGNORE, !sync); + double rem2 = blend_input(2, p_time, p_seek, p_seek_root, MAX(0, amount), FILTER_IGNORE, !sync); return amount > 0.5 ? rem2 : (amount < -0.5 ? rem0 : rem1); //hacky but good enough } @@ -574,7 +576,6 @@ void AnimationNodeBlend3::_bind_methods() { } AnimationNodeBlend3::AnimationNodeBlend3() { - blend_amount = "blend_amount"; add_input("-blend"); add_input("in"); add_input("+blend"); @@ -595,12 +596,12 @@ String AnimationNodeTimeScale::get_caption() const { return "TimeScale"; } -double AnimationNodeTimeScale::process(double p_time, bool p_seek) { +double AnimationNodeTimeScale::process(double p_time, bool p_seek, bool p_seek_root) { double scale = get_parameter(this->scale); if (p_seek) { - return blend_input(0, p_time, true, 1.0, FILTER_IGNORE, false); + return blend_input(0, p_time, true, p_seek_root, 1.0, FILTER_IGNORE, false); } else { - return blend_input(0, p_time * scale, false, 1.0, FILTER_IGNORE, false); + return blend_input(0, p_time * scale, false, p_seek_root, 1.0, FILTER_IGNORE, false); } } @@ -625,16 +626,16 @@ String AnimationNodeTimeSeek::get_caption() const { return "Seek"; } -double AnimationNodeTimeSeek::process(double p_time, bool p_seek) { +double AnimationNodeTimeSeek::process(double p_time, bool p_seek, bool p_seek_root) { double seek_pos = get_parameter(this->seek_pos); if (p_seek) { - return blend_input(0, p_time, true, 1.0, FILTER_IGNORE, false); + return blend_input(0, p_time, true, p_seek_root, 1.0, FILTER_IGNORE, false); } else if (seek_pos >= 0) { - double ret = blend_input(0, seek_pos, true, 1.0, FILTER_IGNORE, false); + double ret = blend_input(0, seek_pos, true, true, 1.0, FILTER_IGNORE, false); set_parameter(this->seek_pos, -1.0); //reset return ret; } else { - return blend_input(0, p_time, false, 1.0, FILTER_IGNORE, false); + return blend_input(0, p_time, false, p_seek_root, 1.0, FILTER_IGNORE, false); } } @@ -726,7 +727,7 @@ float AnimationNodeTransition::get_cross_fade_time() const { return xfade; } -double AnimationNodeTransition::process(double p_time, bool p_seek) { +double AnimationNodeTransition::process(double p_time, bool p_seek, bool p_seek_root) { int current = get_parameter(this->current); int prev = get_parameter(this->prev); int prev_current = get_parameter(this->prev_current); @@ -754,7 +755,7 @@ double AnimationNodeTransition::process(double p_time, bool p_seek) { if (prev < 0) { // process current animation, check for transition - rem = blend_input(current, p_time, p_seek, 1.0, FILTER_IGNORE, false); + rem = blend_input(current, p_time, p_seek, p_seek_root, 1.0, FILTER_IGNORE, false); if (p_seek) { time = p_time; @@ -772,16 +773,16 @@ double AnimationNodeTransition::process(double p_time, bool p_seek) { if (!p_seek && switched) { //just switched, seek to start of current - rem = blend_input(current, 0, true, 1.0 - blend, FILTER_IGNORE, false); + rem = blend_input(current, 0, true, p_seek_root, 1.0 - blend, FILTER_IGNORE, false); } else { - rem = blend_input(current, p_time, p_seek, 1.0 - blend, FILTER_IGNORE, false); + rem = blend_input(current, p_time, p_seek, p_seek_root, 1.0 - blend, FILTER_IGNORE, false); } if (p_seek) { // don't seek prev animation - blend_input(prev, 0, false, blend, FILTER_IGNORE, false); + blend_input(prev, 0, false, p_seek_root, blend, FILTER_IGNORE, false); time = p_time; } else { - blend_input(prev, p_time, false, blend, FILTER_IGNORE, false); + blend_input(prev, p_time, false, p_seek_root, blend, FILTER_IGNORE, false); time += p_time; prev_xfading -= p_time; if (prev_xfading < 0) { @@ -844,8 +845,8 @@ String AnimationNodeOutput::get_caption() const { return "Output"; } -double AnimationNodeOutput::process(double p_time, bool p_seek) { - return blend_input(0, p_time, p_seek, 1.0); +double AnimationNodeOutput::process(double p_time, bool p_seek, bool p_seek_root) { + return blend_input(0, p_time, p_seek, p_seek_root, 1.0); } AnimationNodeOutput::AnimationNodeOutput() { @@ -1057,9 +1058,9 @@ String AnimationNodeBlendTree::get_caption() const { return "BlendTree"; } -double AnimationNodeBlendTree::process(double p_time, bool p_seek) { +double AnimationNodeBlendTree::process(double p_time, bool p_seek, bool p_seek_root) { Ref<AnimationNodeOutput> output = nodes[SceneStringNames::get_singleton()->output].node; - return _blend_node("output", nodes[SceneStringNames::get_singleton()->output].connections, this, output, p_time, p_seek, 1.0); + return _blend_node("output", nodes[SceneStringNames::get_singleton()->output].connections, this, output, p_time, p_seek, p_seek_root, 1.0); } void AnimationNodeBlendTree::get_node_list(List<StringName> *r_list) { diff --git a/scene/animation/animation_blend_tree.h b/scene/animation/animation_blend_tree.h index 73bde633cb..0a2305b8d6 100644 --- a/scene/animation/animation_blend_tree.h +++ b/scene/animation/animation_blend_tree.h @@ -53,7 +53,7 @@ public: static Vector<String> (*get_editable_animation_list)(); virtual String get_caption() const override; - virtual double process(double p_time, bool p_seek) override; + virtual double process(double p_time, bool p_seek, bool p_seek_root) override; void set_animation(const StringName &p_name); StringName get_animation() const; @@ -87,8 +87,8 @@ public: }; private: - float fade_in = 0.1; - float fade_out = 0.1; + float fade_in = 0.0; + float fade_out = 0.0; bool autorestart = false; float autorestart_delay = 1.0; @@ -102,7 +102,7 @@ private: float time; float remaining;*/ - StringName active = "active"; + StringName active = PNAME("active"); StringName prev_active = "prev_active"; StringName time = "time"; StringName remaining = "remaining"; @@ -138,7 +138,7 @@ public: bool is_using_sync() const; virtual bool has_filter() const override; - virtual double process(double p_time, bool p_seek) override; + virtual double process(double p_time, bool p_seek, bool p_seek_root) override; AnimationNodeOneShot(); }; @@ -148,7 +148,7 @@ VARIANT_ENUM_CAST(AnimationNodeOneShot::MixMode) class AnimationNodeAdd2 : public AnimationNode { GDCLASS(AnimationNodeAdd2, AnimationNode); - StringName add_amount = "add_amount"; + StringName add_amount = PNAME("add_amount"); bool sync = false; protected: @@ -164,7 +164,7 @@ public: bool is_using_sync() const; virtual bool has_filter() const override; - virtual double process(double p_time, bool p_seek) override; + virtual double process(double p_time, bool p_seek, bool p_seek_root) override; AnimationNodeAdd2(); }; @@ -172,7 +172,7 @@ public: class AnimationNodeAdd3 : public AnimationNode { GDCLASS(AnimationNodeAdd3, AnimationNode); - StringName add_amount = "add_amount"; + StringName add_amount = PNAME("add_amount"); bool sync = false; protected: @@ -188,7 +188,7 @@ public: bool is_using_sync() const; virtual bool has_filter() const override; - virtual double process(double p_time, bool p_seek) override; + virtual double process(double p_time, bool p_seek, bool p_seek_root) override; AnimationNodeAdd3(); }; @@ -196,7 +196,7 @@ public: class AnimationNodeBlend2 : public AnimationNode { GDCLASS(AnimationNodeBlend2, AnimationNode); - StringName blend_amount = "blend_amount"; + StringName blend_amount = PNAME("blend_amount"); bool sync = false; protected: @@ -207,7 +207,7 @@ public: virtual Variant get_parameter_default_value(const StringName &p_parameter) const override; virtual String get_caption() const override; - virtual double process(double p_time, bool p_seek) override; + virtual double process(double p_time, bool p_seek, bool p_seek_root) override; void set_use_sync(bool p_sync); bool is_using_sync() const; @@ -219,7 +219,7 @@ public: class AnimationNodeBlend3 : public AnimationNode { GDCLASS(AnimationNodeBlend3, AnimationNode); - StringName blend_amount; + StringName blend_amount = PNAME("blend_amount"); bool sync; protected: @@ -234,14 +234,14 @@ public: void set_use_sync(bool p_sync); bool is_using_sync() const; - double process(double p_time, bool p_seek) override; + double process(double p_time, bool p_seek, bool p_seek_root) override; AnimationNodeBlend3(); }; class AnimationNodeTimeScale : public AnimationNode { GDCLASS(AnimationNodeTimeScale, AnimationNode); - StringName scale = "scale"; + StringName scale = PNAME("scale"); protected: static void _bind_methods(); @@ -252,7 +252,7 @@ public: virtual String get_caption() const override; - double process(double p_time, bool p_seek) override; + double process(double p_time, bool p_seek, bool p_seek_root) override; AnimationNodeTimeScale(); }; @@ -260,7 +260,7 @@ public: class AnimationNodeTimeSeek : public AnimationNode { GDCLASS(AnimationNodeTimeSeek, AnimationNode); - StringName seek_pos = "seek_position"; + StringName seek_pos = PNAME("seek_position"); protected: static void _bind_methods(); @@ -271,7 +271,7 @@ public: virtual String get_caption() const override; - double process(double p_time, bool p_seek) override; + double process(double p_time, bool p_seek, bool p_seek_root) override; AnimationNodeTimeSeek(); }; @@ -300,7 +300,7 @@ class AnimationNodeTransition : public AnimationNode { StringName prev_xfading = "prev_xfading"; StringName prev = "prev"; StringName time = "time"; - StringName current = "current"; + StringName current = PNAME("current"); StringName prev_current = "prev_current"; float xfade = 0.0; @@ -329,7 +329,7 @@ public: void set_cross_fade_time(float p_fade); float get_cross_fade_time() const; - double process(double p_time, bool p_seek) override; + double process(double p_time, bool p_seek, bool p_seek_root) override; AnimationNodeTransition(); }; @@ -339,7 +339,7 @@ class AnimationNodeOutput : public AnimationNode { public: virtual String get_caption() const override; - virtual double process(double p_time, bool p_seek) override; + virtual double process(double p_time, bool p_seek, bool p_seek_root) override; AnimationNodeOutput(); }; @@ -408,7 +408,7 @@ public: void get_node_connections(List<NodeConnection> *r_connections) const; virtual String get_caption() const override; - virtual double process(double p_time, bool p_seek) override; + virtual double process(double p_time, bool p_seek, bool p_seek_root) override; void get_node_list(List<StringName> *r_list); diff --git a/scene/animation/animation_node_state_machine.cpp b/scene/animation/animation_node_state_machine.cpp index 81df12791c..39849a0b00 100644 --- a/scene/animation/animation_node_state_machine.cpp +++ b/scene/animation/animation_node_state_machine.cpp @@ -292,7 +292,7 @@ bool AnimationNodeStateMachinePlayback::_travel(AnimationNodeStateMachine *p_sta return true; } -double AnimationNodeStateMachinePlayback::process(AnimationNodeStateMachine *p_state_machine, double p_time, bool p_seek) { +double AnimationNodeStateMachinePlayback::process(AnimationNodeStateMachine *p_state_machine, double p_time, bool p_seek, bool p_seek_root) { //if not playing and it can restart, then restart if (!playing && start_request == StringName()) { if (!stop_request && p_state_machine->start_node) { @@ -356,7 +356,7 @@ double AnimationNodeStateMachinePlayback::process(AnimationNodeStateMachine *p_s current = p_state_machine->start_node; } - len_current = p_state_machine->blend_node(current, p_state_machine->states[current].node, 0, true, 1.0, AnimationNode::FILTER_IGNORE, false); + len_current = p_state_machine->blend_node(current, p_state_machine->states[current].node, 0, true, p_seek_root, 1.0, AnimationNode::FILTER_IGNORE, false); pos_current = 0; } @@ -381,10 +381,10 @@ double AnimationNodeStateMachinePlayback::process(AnimationNodeStateMachine *p_s } } - float rem = p_state_machine->blend_node(current, p_state_machine->states[current].node, p_time, p_seek, fade_blend, AnimationNode::FILTER_IGNORE, false); + float rem = p_state_machine->blend_node(current, p_state_machine->states[current].node, p_time, p_seek, p_seek_root, fade_blend, AnimationNode::FILTER_IGNORE, false); if (fading_from != StringName()) { - p_state_machine->blend_node(fading_from, p_state_machine->states[fading_from].node, p_time, p_seek, 1.0 - fade_blend, AnimationNode::FILTER_IGNORE, false); + p_state_machine->blend_node(fading_from, p_state_machine->states[fading_from].node, p_time, p_seek, p_seek_root, 1.0 - fade_blend, AnimationNode::FILTER_IGNORE, false); } //guess playback position @@ -538,12 +538,12 @@ double AnimationNodeStateMachinePlayback::process(AnimationNodeStateMachine *p_s } current = next; if (switch_mode == AnimationNodeStateMachineTransition::SWITCH_MODE_SYNC) { - len_current = p_state_machine->blend_node(current, p_state_machine->states[current].node, 0, true, 0, AnimationNode::FILTER_IGNORE, false); + len_current = p_state_machine->blend_node(current, p_state_machine->states[current].node, 0, true, p_seek_root, 0, AnimationNode::FILTER_IGNORE, false); pos_current = MIN(pos_current, len_current); - p_state_machine->blend_node(current, p_state_machine->states[current].node, pos_current, true, 0, AnimationNode::FILTER_IGNORE, false); + p_state_machine->blend_node(current, p_state_machine->states[current].node, pos_current, true, p_seek_root, 0, AnimationNode::FILTER_IGNORE, false); } else { - len_current = p_state_machine->blend_node(current, p_state_machine->states[current].node, 0, true, 0, AnimationNode::FILTER_IGNORE, false); + len_current = p_state_machine->blend_node(current, p_state_machine->states[current].node, 0, true, p_seek_root, 0, AnimationNode::FILTER_IGNORE, false); pos_current = 0; } @@ -1071,11 +1071,11 @@ Vector2 AnimationNodeStateMachine::get_graph_offset() const { return graph_offset; } -double AnimationNodeStateMachine::process(double p_time, bool p_seek) { +double AnimationNodeStateMachine::process(double p_time, bool p_seek, bool p_seek_root) { Ref<AnimationNodeStateMachinePlayback> playback = get_parameter(this->playback); ERR_FAIL_COND_V(playback.is_null(), 0.0); - return playback->process(this, p_time, p_seek); + return playback->process(this, p_time, p_seek, p_seek_root); } String AnimationNodeStateMachine::get_caption() const { diff --git a/scene/animation/animation_node_state_machine.h b/scene/animation/animation_node_state_machine.h index 07d0579533..9eeac6a183 100644 --- a/scene/animation/animation_node_state_machine.h +++ b/scene/animation/animation_node_state_machine.h @@ -120,7 +120,7 @@ class AnimationNodeStateMachinePlayback : public Resource { bool _travel(AnimationNodeStateMachine *p_state_machine, const StringName &p_travel); - double process(AnimationNodeStateMachine *p_state_machine, double p_time, bool p_seek); + double process(AnimationNodeStateMachine *p_state_machine, double p_time, bool p_seek, bool p_seek_root); bool _check_advance_condition(const Ref<AnimationNodeStateMachine> p_state_machine, const Ref<AnimationNodeStateMachineTransition> p_transition) const; @@ -226,7 +226,7 @@ public: void set_graph_offset(const Vector2 &p_offset); Vector2 get_graph_offset() const; - virtual double process(double p_time, bool p_seek) override; + virtual double process(double p_time, bool p_seek, bool p_seek_root) override; virtual String get_caption() const override; virtual Ref<AnimationNode> get_child_by_name(const StringName &p_name) override; diff --git a/scene/animation/animation_player.cpp b/scene/animation/animation_player.cpp index 9ace6db505..921a06b73c 100644 --- a/scene/animation/animation_player.cpp +++ b/scene/animation/animation_player.cpp @@ -832,7 +832,7 @@ void AnimationPlayer::_animation_process_animation(AnimationData *p_anim, double nc->audio_start = p_time; } } else if (nc->audio_playing) { - bool loop = a->get_loop_mode() != Animation::LoopMode::LOOP_NONE; + bool loop = a->get_loop_mode() != Animation::LOOP_NONE; bool stop = false; @@ -883,15 +883,15 @@ void AnimationPlayer::_animation_process_animation(AnimationData *p_anim, double double at_anim_pos = 0.0; switch (anim->get_loop_mode()) { - case Animation::LoopMode::LOOP_NONE: { + case Animation::LOOP_NONE: { at_anim_pos = MIN((double)anim->get_length(), p_time - pos); //seek to end } break; - case Animation::LoopMode::LOOP_LINEAR: { + case Animation::LOOP_LINEAR: { at_anim_pos = Math::fposmod(p_time - pos, (double)anim->get_length()); //seek to loop } break; - case Animation::LoopMode::LOOP_PINGPONG: { + case Animation::LOOP_PINGPONG: { at_anim_pos = Math::pingpong(p_time - pos, (double)anim->get_length()); } break; @@ -944,7 +944,7 @@ void AnimationPlayer::_animation_process_data(PlaybackData &cd, double p_delta, int pingponged = 0; switch (cd.from->animation->get_loop_mode()) { - case Animation::LoopMode::LOOP_NONE: { + case Animation::LOOP_NONE: { if (next_pos < 0) { next_pos = 0; } else if (next_pos > len) { @@ -969,7 +969,7 @@ void AnimationPlayer::_animation_process_data(PlaybackData &cd, double p_delta, } } break; - case Animation::LoopMode::LOOP_LINEAR: { + case Animation::LOOP_LINEAR: { double looped_next_pos = Math::fposmod(next_pos, (double)len); if (looped_next_pos == 0 && next_pos != 0) { // Loop multiples of the length to it, rather than 0 @@ -980,7 +980,7 @@ void AnimationPlayer::_animation_process_data(PlaybackData &cd, double p_delta, } } break; - case Animation::LoopMode::LOOP_PINGPONG: { + case Animation::LOOP_PINGPONG: { if ((int)Math::floor(abs(next_pos - cd.pos) / len) % 2 == 0) { if (next_pos < 0 && cd.pos >= 0) { cd.speed_scale *= -1.0; @@ -1766,12 +1766,12 @@ void AnimationPlayer::_animation_changed() { } void AnimationPlayer::_stop_playing_caches() { - for (RBSet<TrackNodeCache *>::Element *E = playing_caches.front(); E; E = E->next()) { - if (E->get()->node && E->get()->audio_playing) { - E->get()->node->call(SNAME("stop")); + for (TrackNodeCache *E : playing_caches) { + if (E->node && E->audio_playing) { + E->node->call(SNAME("stop")); } - if (E->get()->node && E->get()->animation_playing) { - AnimationPlayer *player = Object::cast_to<AnimationPlayer>(E->get()->node); + if (E->node && E->animation_playing) { + AnimationPlayer *player = Object::cast_to<AnimationPlayer>(E->node); if (!player) { continue; } diff --git a/scene/animation/animation_tree.cpp b/scene/animation/animation_tree.cpp index 92af15d5d3..d34e8db093 100644 --- a/scene/animation/animation_tree.cpp +++ b/scene/animation/animation_tree.cpp @@ -88,7 +88,7 @@ void AnimationNode::get_child_nodes(List<ChildNode> *r_child_nodes) { } } -void AnimationNode::blend_animation(const StringName &p_animation, double p_time, double p_delta, bool p_seeked, real_t p_blend, int p_pingponged) { +void AnimationNode::blend_animation(const StringName &p_animation, double p_time, double p_delta, bool p_seeked, bool p_seek_root, real_t p_blend, int p_pingponged) { ERR_FAIL_COND(!state); ERR_FAIL_COND(!state->player->has_animation(p_animation)); @@ -115,17 +115,18 @@ void AnimationNode::blend_animation(const StringName &p_animation, double p_time anim_state.animation = animation; anim_state.seeked = p_seeked; anim_state.pingponged = p_pingponged; + anim_state.seek_root = p_seek_root; state->animation_states.push_back(anim_state); } -double AnimationNode::_pre_process(const StringName &p_base_path, AnimationNode *p_parent, State *p_state, double p_time, bool p_seek, const Vector<StringName> &p_connections) { +double AnimationNode::_pre_process(const StringName &p_base_path, AnimationNode *p_parent, State *p_state, double p_time, bool p_seek, bool p_seek_root, const Vector<StringName> &p_connections) { base_path = p_base_path; parent = p_parent; connections = p_connections; state = p_state; - double t = process(p_time, p_seek); + double t = process(p_time, p_seek, p_seek_root); state = nullptr; parent = nullptr; @@ -144,7 +145,7 @@ void AnimationNode::make_invalid(const String &p_reason) { state->invalid_reasons += String::utf8("• ") + p_reason; } -double AnimationNode::blend_input(int p_input, double p_time, bool p_seek, real_t p_blend, FilterAction p_filter, bool p_optimize) { +double AnimationNode::blend_input(int p_input, double p_time, bool p_seek, bool p_seek_root, real_t p_blend, FilterAction p_filter, bool p_optimize) { ERR_FAIL_INDEX_V(p_input, inputs.size(), 0); ERR_FAIL_COND_V(!state, 0); @@ -163,7 +164,7 @@ double AnimationNode::blend_input(int p_input, double p_time, bool p_seek, real_ //inputs.write[p_input].last_pass = state->last_pass; real_t activity = 0.0; - double ret = _blend_node(node_name, blend_tree->get_node_connection_array(node_name), nullptr, node, p_time, p_seek, p_blend, p_filter, p_optimize, &activity); + double ret = _blend_node(node_name, blend_tree->get_node_connection_array(node_name), nullptr, node, p_time, p_seek, p_seek_root, p_blend, p_filter, p_optimize, &activity); Vector<AnimationTree::Activity> *activity_ptr = state->tree->input_activity_map.getptr(base_path); @@ -174,11 +175,11 @@ double AnimationNode::blend_input(int p_input, double p_time, bool p_seek, real_ return ret; } -double AnimationNode::blend_node(const StringName &p_sub_path, Ref<AnimationNode> p_node, double p_time, bool p_seek, real_t p_blend, FilterAction p_filter, bool p_optimize) { - return _blend_node(p_sub_path, Vector<StringName>(), this, p_node, p_time, p_seek, p_blend, p_filter, p_optimize); +double AnimationNode::blend_node(const StringName &p_sub_path, Ref<AnimationNode> p_node, double p_time, bool p_seek, bool p_seek_root, real_t p_blend, FilterAction p_filter, bool p_optimize) { + return _blend_node(p_sub_path, Vector<StringName>(), this, p_node, p_time, p_seek, p_seek_root, p_blend, p_filter, p_optimize); } -double AnimationNode::_blend_node(const StringName &p_subpath, const Vector<StringName> &p_connections, AnimationNode *p_new_parent, Ref<AnimationNode> p_node, double p_time, bool p_seek, real_t p_blend, FilterAction p_filter, bool p_optimize, real_t *r_max) { +double AnimationNode::_blend_node(const StringName &p_subpath, const Vector<StringName> &p_connections, AnimationNode *p_new_parent, Ref<AnimationNode> p_node, double p_time, bool p_seek, bool p_seek_root, real_t p_blend, FilterAction p_filter, bool p_optimize, real_t *r_max) { ERR_FAIL_COND_V(!p_node.is_valid(), 0); ERR_FAIL_COND_V(!state, 0); @@ -286,9 +287,9 @@ double AnimationNode::_blend_node(const StringName &p_subpath, const Vector<Stri } if (!p_seek && p_optimize && !any_valid) { - return p_node->_pre_process(new_path, new_parent, state, 0, p_seek, p_connections); + return p_node->_pre_process(new_path, new_parent, state, 0, p_seek, p_seek_root, p_connections); } - return p_node->_pre_process(new_path, new_parent, state, p_time, p_seek, p_connections); + return p_node->_pre_process(new_path, new_parent, state, p_time, p_seek, p_seek_root, p_connections); } int AnimationNode::get_input_count() const { @@ -332,9 +333,9 @@ void AnimationNode::remove_input(int p_index) { emit_changed(); } -double AnimationNode::process(double p_time, bool p_seek) { +double AnimationNode::process(double p_time, bool p_seek, bool p_seek_root) { double ret; - if (GDVIRTUAL_CALL(_process, p_time, p_seek, ret)) { + if (GDVIRTUAL_CALL(_process, p_time, p_seek, p_seek_root, ret)) { return ret; } @@ -418,9 +419,9 @@ void AnimationNode::_bind_methods() { ClassDB::bind_method(D_METHOD("_set_filters", "filters"), &AnimationNode::_set_filters); ClassDB::bind_method(D_METHOD("_get_filters"), &AnimationNode::_get_filters); - ClassDB::bind_method(D_METHOD("blend_animation", "animation", "time", "delta", "seeked", "blend", "pingponged"), &AnimationNode::blend_animation, DEFVAL(0)); - ClassDB::bind_method(D_METHOD("blend_node", "name", "node", "time", "seek", "blend", "filter", "optimize"), &AnimationNode::blend_node, DEFVAL(FILTER_IGNORE), DEFVAL(true)); - ClassDB::bind_method(D_METHOD("blend_input", "input_index", "time", "seek", "blend", "filter", "optimize"), &AnimationNode::blend_input, DEFVAL(FILTER_IGNORE), DEFVAL(true)); + ClassDB::bind_method(D_METHOD("blend_animation", "animation", "time", "delta", "seeked", "seek_root", "blend", "pingponged"), &AnimationNode::blend_animation, DEFVAL(0)); + ClassDB::bind_method(D_METHOD("blend_node", "name", "node", "time", "seek", "seek_root", "blend", "filter", "optimize"), &AnimationNode::blend_node, DEFVAL(FILTER_IGNORE), DEFVAL(true)); + ClassDB::bind_method(D_METHOD("blend_input", "input_index", "time", "seek", "seek_root", "blend", "filter", "optimize"), &AnimationNode::blend_input, DEFVAL(FILTER_IGNORE), DEFVAL(true)); ClassDB::bind_method(D_METHOD("set_parameter", "name", "value"), &AnimationNode::set_parameter); ClassDB::bind_method(D_METHOD("get_parameter", "name"), &AnimationNode::get_parameter); @@ -432,7 +433,7 @@ void AnimationNode::_bind_methods() { GDVIRTUAL_BIND(_get_parameter_list); GDVIRTUAL_BIND(_get_child_by_name, "name"); GDVIRTUAL_BIND(_get_parameter_default_value, "parameter"); - GDVIRTUAL_BIND(_process, "time", "seek"); + GDVIRTUAL_BIND(_process, "time", "seek", "seek_root"); GDVIRTUAL_BIND(_get_caption); GDVIRTUAL_BIND(_has_filter); @@ -486,9 +487,9 @@ void AnimationTree::set_active(bool p_active) { } if (!active && is_inside_tree()) { - for (RBSet<TrackCache *>::Element *E = playing_caches.front(); E; E = E->next()) { - if (ObjectDB::get_instance(E->get()->object_id)) { - E->get()->object->call(SNAME("stop")); + for (const TrackCache *E : playing_caches) { + if (ObjectDB::get_instance(E->object_id)) { + E->object->call(SNAME("stop")); } } @@ -859,7 +860,6 @@ void AnimationTree::_process_graph(double p_delta) { _update_properties(); //if properties need updating, update them //check all tracks, see if they need modification - root_motion_transform = Transform3D(); if (!root.is_valid()) { @@ -938,11 +938,11 @@ void AnimationTree::_process_graph(double p_delta) { { if (started) { //if started, seek - root->_pre_process(SceneStringNames::get_singleton()->parameters_base_path, nullptr, &state, 0, true, Vector<StringName>()); + root->_pre_process(SceneStringNames::get_singleton()->parameters_base_path, nullptr, &state, 0, true, false, Vector<StringName>()); started = false; } - root->_pre_process(SceneStringNames::get_singleton()->parameters_base_path, nullptr, &state, p_delta, false, Vector<StringName>()); + root->_pre_process(SceneStringNames::get_singleton()->parameters_base_path, nullptr, &state, p_delta, false, false, Vector<StringName>()); } if (!state.valid) { @@ -962,6 +962,7 @@ void AnimationTree::_process_graph(double p_delta) { int pingponged = as.pingponged; #ifndef _3D_DISABLED bool backward = signbit(delta); + bool calc_root = !seeked || as.seek_root; #endif // _3D_DISABLED for (int i = 0; i < a->get_track_count(); i++) { @@ -990,7 +991,7 @@ void AnimationTree::_process_graph(double p_delta) { case Animation::TYPE_POSITION_3D: { #ifndef _3D_DISABLED TrackCacheTransform *t = static_cast<TrackCacheTransform *>(track); - if (track->root_motion) { + if (track->root_motion && calc_root) { if (t->process_pass != process_pass) { t->process_pass = process_pass; t->loc = Vector3(0, 0, 0); @@ -1052,7 +1053,7 @@ void AnimationTree::_process_graph(double p_delta) { } a->position_track_interpolate(i, 0, &loc[1]); t->loc += (loc[1] - loc[0]) * blend; - prev_time = 0; + prev_time = (double)a->get_length(); } } @@ -1086,7 +1087,7 @@ void AnimationTree::_process_graph(double p_delta) { case Animation::TYPE_ROTATION_3D: { #ifndef _3D_DISABLED TrackCacheTransform *t = static_cast<TrackCacheTransform *>(track); - if (track->root_motion) { + if (track->root_motion && calc_root) { if (t->process_pass != process_pass) { t->process_pass = process_pass; t->loc = Vector3(0, 0, 0); @@ -1148,7 +1149,7 @@ void AnimationTree::_process_graph(double p_delta) { } a->rotation_track_interpolate(i, 0, &rot[1]); t->rot = (t->rot * Quaternion().slerp(rot[0].inverse() * rot[1], blend)).normalized(); - prev_time = 0; + prev_time = (double)a->get_length(); } } @@ -1182,7 +1183,7 @@ void AnimationTree::_process_graph(double p_delta) { case Animation::TYPE_SCALE_3D: { #ifndef _3D_DISABLED TrackCacheTransform *t = static_cast<TrackCacheTransform *>(track); - if (track->root_motion) { + if (track->root_motion && calc_root) { if (t->process_pass != process_pass) { t->process_pass = process_pass; t->loc = Vector3(0, 0, 0); @@ -1244,7 +1245,7 @@ void AnimationTree::_process_graph(double p_delta) { } a->scale_track_interpolate(i, 0, &scale[1]); t->scale += (scale[1] - scale[0]) * blend; - prev_time = 0; + prev_time = (double)a->get_length(); } } @@ -1301,8 +1302,7 @@ void AnimationTree::_process_graph(double p_delta) { Animation::UpdateMode update_mode = a->value_track_get_update_mode(i); - if (update_mode == Animation::UPDATE_CONTINUOUS || update_mode == Animation::UPDATE_CAPTURE) { //delta == 0 means seek - + if (update_mode == Animation::UPDATE_CONTINUOUS || update_mode == Animation::UPDATE_CAPTURE) { Variant value = a->value_track_interpolate(i, time); if (value == Variant()) { @@ -1443,7 +1443,7 @@ void AnimationTree::_process_graph(double p_delta) { t->start = time; } } else if (t->playing) { - bool loop = a->get_loop_mode() != Animation::LoopMode::LOOP_NONE; + bool loop = a->get_loop_mode() != Animation::LOOP_NONE; bool stop = false; @@ -1512,13 +1512,13 @@ void AnimationTree::_process_graph(double p_delta) { double at_anim_pos = 0.0; switch (anim->get_loop_mode()) { - case Animation::LoopMode::LOOP_NONE: { + case Animation::LOOP_NONE: { at_anim_pos = MAX((double)anim->get_length(), time - pos); //seek to end } break; - case Animation::LoopMode::LOOP_LINEAR: { + case Animation::LOOP_LINEAR: { at_anim_pos = Math::fposmod(time - pos, (double)anim->get_length()); //seek to loop } break; - case Animation::LoopMode::LOOP_PINGPONG: { + case Animation::LOOP_PINGPONG: { at_anim_pos = Math::pingpong(time - pos, (double)a->get_length()); } break; default: diff --git a/scene/animation/animation_tree.h b/scene/animation/animation_tree.h index d40d4ccbbd..37cd22568a 100644 --- a/scene/animation/animation_tree.h +++ b/scene/animation/animation_tree.h @@ -68,6 +68,7 @@ public: const Vector<real_t> *track_blends = nullptr; real_t blend = 0.0; bool seeked = false; + bool seek_root = false; int pingponged = 0; }; @@ -85,7 +86,7 @@ public: Vector<real_t> blends; State *state = nullptr; - double _pre_process(const StringName &p_base_path, AnimationNode *p_parent, State *p_state, double p_time, bool p_seek, const Vector<StringName> &p_connections); + double _pre_process(const StringName &p_base_path, AnimationNode *p_parent, State *p_state, double p_time, bool p_seek, bool p_seek_root, const Vector<StringName> &p_connections); //all this is temporary StringName base_path; @@ -98,12 +99,12 @@ public: Array _get_filters() const; void _set_filters(const Array &p_filters); friend class AnimationNodeBlendTree; - double _blend_node(const StringName &p_subpath, const Vector<StringName> &p_connections, AnimationNode *p_new_parent, Ref<AnimationNode> p_node, double p_time, bool p_seek, real_t p_blend, FilterAction p_filter = FILTER_IGNORE, bool p_optimize = true, real_t *r_max = nullptr); + double _blend_node(const StringName &p_subpath, const Vector<StringName> &p_connections, AnimationNode *p_new_parent, Ref<AnimationNode> p_node, double p_time, bool p_seek, bool p_seek_root, real_t p_blend, FilterAction p_filter = FILTER_IGNORE, bool p_optimize = true, real_t *r_max = nullptr); protected: - void blend_animation(const StringName &p_animation, double p_time, double p_delta, bool p_seeked, real_t p_blend, int p_pingponged = 0); - double blend_node(const StringName &p_sub_path, Ref<AnimationNode> p_node, double p_time, bool p_seek, real_t p_blend, FilterAction p_filter = FILTER_IGNORE, bool p_optimize = true); - double blend_input(int p_input, double p_time, bool p_seek, real_t p_blend, FilterAction p_filter = FILTER_IGNORE, bool p_optimize = true); + void blend_animation(const StringName &p_animation, double p_time, double p_delta, bool p_seeked, bool p_seek_root, real_t p_blend, int p_pingponged = 0); + double blend_node(const StringName &p_sub_path, Ref<AnimationNode> p_node, double p_time, bool p_seek, bool p_seek_root, real_t p_blend, FilterAction p_filter = FILTER_IGNORE, bool p_optimize = true); + double blend_input(int p_input, double p_time, bool p_seek, bool p_seek_root, real_t p_blend, FilterAction p_filter = FILTER_IGNORE, bool p_optimize = true); void make_invalid(const String &p_reason); @@ -115,7 +116,7 @@ protected: GDVIRTUAL0RC(Array, _get_parameter_list) GDVIRTUAL1RC(Ref<AnimationNode>, _get_child_by_name, StringName) GDVIRTUAL1RC(Variant, _get_parameter_default_value, StringName) - GDVIRTUAL2RC(double, _process, double, bool) + GDVIRTUAL3RC(double, _process, double, bool, bool) GDVIRTUAL0RC(String, _get_caption) GDVIRTUAL0RC(bool, _has_filter) @@ -133,7 +134,7 @@ public: virtual void get_child_nodes(List<ChildNode> *r_child_nodes); - virtual double process(double p_time, bool p_seek); + virtual double process(double p_time, bool p_seek, bool p_seek_root); virtual String get_caption() const; int get_input_count() const; diff --git a/scene/debugger/scene_debugger.cpp b/scene/debugger/scene_debugger.cpp index b792b11dbc..dfad91ecd5 100644 --- a/scene/debugger/scene_debugger.cpp +++ b/scene/debugger/scene_debugger.cpp @@ -436,11 +436,11 @@ void SceneDebuggerObject::_parse_script_properties(Script *p_script, ScriptInsta // Members for (KeyValue<const Script *, RBSet<StringName>> sm : members) { - for (RBSet<StringName>::Element *E = sm.value.front(); E; E = E->next()) { + for (const StringName &E : sm.value) { Variant m; - if (p_instance->get(E->get(), m)) { + if (p_instance->get(E, m)) { String script_path = sm.key == p_script ? "" : sm.key->get_path().get_file() + "/"; - PropertyInfo pi(m.get_type(), "Members/" + script_path + E->get()); + PropertyInfo pi(m.get_type(), "Members/" + script_path + E); properties.push_back(SceneDebuggerProperty(pi, m)); } } @@ -629,8 +629,8 @@ void LiveEditor::_node_set_func(int p_id, const StringName &p_prop, const Varian return; //scene not editable } - for (RBSet<Node *>::Element *F = E->value.front(); F; F = F->next()) { - Node *n = F->get(); + for (Node *F : E->value) { + Node *n = F; if (base && !base->is_ancestor_of(n)) { continue; @@ -673,8 +673,8 @@ void LiveEditor::_node_call_func(int p_id, const StringName &p_method, const Var return; //scene not editable } - for (RBSet<Node *>::Element *F = E->value.front(); F; F = F->next()) { - Node *n = F->get(); + for (Node *F : E->value) { + Node *n = F; if (base && !base->is_ancestor_of(n)) { continue; @@ -758,8 +758,8 @@ void LiveEditor::_create_node_func(const NodePath &p_parent, const String &p_typ return; //scene not editable } - for (RBSet<Node *>::Element *F = E->value.front(); F; F = F->next()) { - Node *n = F->get(); + for (Node *F : E->value) { + Node *n = F; if (base && !base->is_ancestor_of(n)) { continue; @@ -802,8 +802,8 @@ void LiveEditor::_instance_node_func(const NodePath &p_parent, const String &p_p return; //scene not editable } - for (RBSet<Node *>::Element *F = E->value.front(); F; F = F->next()) { - Node *n = F->get(); + for (Node *F : E->value) { + Node *n = F; if (base && !base->is_ancestor_of(n)) { continue; @@ -968,8 +968,8 @@ void LiveEditor::_duplicate_node_func(const NodePath &p_at, const String &p_new_ return; //scene not editable } - for (RBSet<Node *>::Element *F = E->value.front(); F; F = F->next()) { - Node *n = F->get(); + for (Node *F : E->value) { + Node *n = F; if (base && !base->is_ancestor_of(n)) { continue; @@ -1007,8 +1007,8 @@ void LiveEditor::_reparent_node_func(const NodePath &p_at, const NodePath &p_new return; //scene not editable } - for (RBSet<Node *>::Element *F = E->value.front(); F; F = F->next()) { - Node *n = F->get(); + for (Node *F : E->value) { + Node *n = F; if (base && !base->is_ancestor_of(n)) { continue; diff --git a/scene/gui/base_button.cpp b/scene/gui/base_button.cpp index 595f0cbea7..776623f7ce 100644 --- a/scene/gui/base_button.cpp +++ b/scene/gui/base_button.cpp @@ -43,12 +43,12 @@ void BaseButton::_unpress_group() { status.pressed = true; } - for (RBSet<BaseButton *>::Element *E = button_group->buttons.front(); E; E = E->next()) { - if (E->get() == this) { + for (BaseButton *E : button_group->buttons) { + if (E == this) { continue; } - E->get()->set_pressed(false); + E->set_pressed(false); } } @@ -485,24 +485,24 @@ BaseButton::~BaseButton() { } void ButtonGroup::get_buttons(List<BaseButton *> *r_buttons) { - for (RBSet<BaseButton *>::Element *E = buttons.front(); E; E = E->next()) { - r_buttons->push_back(E->get()); + for (BaseButton *E : buttons) { + r_buttons->push_back(E); } } Array ButtonGroup::_get_buttons() { Array btns; - for (RBSet<BaseButton *>::Element *E = buttons.front(); E; E = E->next()) { - btns.push_back(E->get()); + for (const BaseButton *E : buttons) { + btns.push_back(E); } return btns; } BaseButton *ButtonGroup::get_pressed_button() { - for (RBSet<BaseButton *>::Element *E = buttons.front(); E; E = E->next()) { - if (E->get()->is_pressed()) { - return E->get(); + for (BaseButton *E : buttons) { + if (E->is_pressed()) { + return E; } } diff --git a/scene/gui/code_edit.cpp b/scene/gui/code_edit.cpp index 197c9005c3..22e9763929 100644 --- a/scene/gui/code_edit.cpp +++ b/scene/gui/code_edit.cpp @@ -740,8 +740,8 @@ void CodeEdit::set_auto_indent_prefixes(const TypedArray<String> &p_prefixes) { TypedArray<String> CodeEdit::get_auto_indent_prefixes() const { TypedArray<String> prefixes; - for (const RBSet<char32_t>::Element *E = auto_indent_prefixes.front(); E; E = E->next()) { - prefixes.push_back(String::chr(E->get())); + for (const char32_t &E : auto_indent_prefixes) { + prefixes.push_back(String::chr(E)); } return prefixes; } @@ -1752,8 +1752,8 @@ void CodeEdit::set_code_completion_prefixes(const TypedArray<String> &p_prefixes TypedArray<String> CodeEdit::get_code_completion_prefixes() const { TypedArray<String> prefixes; - for (const RBSet<char32_t>::Element *E = code_completion_prefixes.front(); E; E = E->next()) { - prefixes.push_back(String::chr(E->get())); + for (const char32_t &E : code_completion_prefixes) { + prefixes.push_back(String::chr(E)); } return prefixes; } diff --git a/scene/gui/control.cpp b/scene/gui/control.cpp index a0104387c9..5c5b2683a4 100644 --- a/scene/gui/control.cpp +++ b/scene/gui/control.cpp @@ -471,6 +471,13 @@ void Control::_validate_property(PropertyInfo &property) const { property.hint_string = hint_string; } + if (property.name == "mouse_force_pass_scroll_events") { + // Disable force pass if the control is not stopping the event. + if (data.mouse_filter != MOUSE_FILTER_STOP) { + property.usage |= PROPERTY_USAGE_READ_ONLY; + } + } + // Validate which positioning properties should be displayed depending on the parent and the layout mode. Node *parent_node = get_parent_control(); if (!parent_node) { @@ -2921,6 +2928,7 @@ int Control::get_v_size_flags() const { void Control::set_mouse_filter(MouseFilter p_filter) { ERR_FAIL_INDEX(p_filter, 3); data.mouse_filter = p_filter; + notify_property_list_changed(); update_configuration_warnings(); } @@ -2928,6 +2936,14 @@ Control::MouseFilter Control::get_mouse_filter() const { return data.mouse_filter; } +void Control::set_force_pass_scroll_events(bool p_force_pass_scroll_events) { + data.force_pass_scroll_events = p_force_pass_scroll_events; +} + +bool Control::is_force_pass_scroll_events() const { + return data.force_pass_scroll_events; +} + void Control::warp_mouse(const Point2 &p_position) { ERR_FAIL_COND(!is_inside_tree()); get_viewport()->warp_mouse(get_global_transform_with_canvas().xform(p_position)); @@ -3240,6 +3256,9 @@ void Control::_bind_methods() { ClassDB::bind_method(D_METHOD("set_mouse_filter", "filter"), &Control::set_mouse_filter); ClassDB::bind_method(D_METHOD("get_mouse_filter"), &Control::get_mouse_filter); + ClassDB::bind_method(D_METHOD("set_force_pass_scroll_events", "force_pass_scroll_events"), &Control::set_force_pass_scroll_events); + ClassDB::bind_method(D_METHOD("is_force_pass_scroll_events"), &Control::is_force_pass_scroll_events); + ClassDB::bind_method(D_METHOD("set_clip_contents", "enable"), &Control::set_clip_contents); ClassDB::bind_method(D_METHOD("is_clipping_contents"), &Control::is_clipping_contents); @@ -3321,6 +3340,7 @@ void Control::_bind_methods() { ADD_GROUP("Mouse", "mouse_"); ADD_PROPERTY(PropertyInfo(Variant::INT, "mouse_filter", PROPERTY_HINT_ENUM, "Stop,Pass,Ignore"), "set_mouse_filter", "get_mouse_filter"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "mouse_force_pass_scroll_events"), "set_force_pass_scroll_events", "is_force_pass_scroll_events"); ADD_PROPERTY(PropertyInfo(Variant::INT, "mouse_default_cursor_shape", PROPERTY_HINT_ENUM, "Arrow,I-Beam,Pointing Hand,Cross,Wait,Busy,Drag,Can Drop,Forbidden,Vertical Resize,Horizontal Resize,Secondary Diagonal Resize,Main Diagonal Resize,Move,Vertical Split,Horizontal Split,Help"), "set_default_cursor_shape", "get_default_cursor_shape"); ADD_GROUP("Theme", "theme_"); diff --git a/scene/gui/control.h b/scene/gui/control.h index 65b71d74f8..f18dd99bff 100644 --- a/scene/gui/control.h +++ b/scene/gui/control.h @@ -190,6 +190,7 @@ private: Point2 custom_minimum_size; MouseFilter mouse_filter = MOUSE_FILTER_STOP; + bool force_pass_scroll_events = true; bool clip_contents = false; @@ -216,12 +217,12 @@ private: NodePath focus_prev; bool bulk_theme_override = false; - HashMap<StringName, Ref<Texture2D>> icon_override; - HashMap<StringName, Ref<StyleBox>> style_override; - HashMap<StringName, Ref<Font>> font_override; - HashMap<StringName, int> font_size_override; - HashMap<StringName, Color> color_override; - HashMap<StringName, int> constant_override; + Theme::ThemeIconMap icon_override; + Theme::ThemeStyleMap style_override; + Theme::ThemeFontMap font_override; + Theme::ThemeFontSizeMap font_size_override; + Theme::ThemeColorMap color_override; + Theme::ThemeConstantMap constant_override; } data; @@ -468,6 +469,9 @@ public: void set_mouse_filter(MouseFilter p_filter); MouseFilter get_mouse_filter() const; + void set_force_pass_scroll_events(bool p_force_pass_scroll_events); + bool is_force_pass_scroll_events() const; + /* SKINNING */ void begin_bulk_theme_override(); diff --git a/scene/gui/graph_edit.cpp b/scene/gui/graph_edit.cpp index 0ed9a4e989..ccf7e2828a 100644 --- a/scene/gui/graph_edit.cpp +++ b/scene/gui/graph_edit.cpp @@ -1699,8 +1699,8 @@ void GraphEdit::set_warped_panning(bool p_warped) { int GraphEdit::_set_operations(SET_OPERATIONS p_operation, RBSet<StringName> &r_u, const RBSet<StringName> &r_v) { switch (p_operation) { case GraphEdit::IS_EQUAL: { - for (RBSet<StringName>::Element *E = r_u.front(); E; E = E->next()) { - if (!r_v.has(E->get())) { + for (const StringName &E : r_u) { + if (!r_v.has(E)) { return 0; } } @@ -1710,8 +1710,8 @@ int GraphEdit::_set_operations(SET_OPERATIONS p_operation, RBSet<StringName> &r_ if (r_u.size() == r_v.size() && !r_u.size()) { return 1; } - for (RBSet<StringName>::Element *E = r_u.front(); E; E = E->next()) { - if (!r_v.has(E->get())) { + for (const StringName &E : r_u) { + if (!r_v.has(E)) { return 0; } } @@ -1726,9 +1726,9 @@ int GraphEdit::_set_operations(SET_OPERATIONS p_operation, RBSet<StringName> &r_ return r_u.size(); } break; case GraphEdit::UNION: { - for (RBSet<StringName>::Element *E = r_v.front(); E; E = E->next()) { - if (!r_u.has(E->get())) { - r_u.insert(E->get()); + for (const StringName &E : r_v) { + if (!r_u.has(E)) { + r_u.insert(E); } } return r_u.size(); @@ -1748,11 +1748,11 @@ HashMap<int, Vector<StringName>> GraphEdit::_layering(const RBSet<StringName> &r while (!_set_operations(GraphEdit::IS_EQUAL, q, u)) { _set_operations(GraphEdit::DIFFERENCE, p, u); - for (const RBSet<StringName>::Element *E = p.front(); E; E = E->next()) { - RBSet<StringName> n = r_upper_neighbours[E->get()]; + for (const StringName &E : p) { + RBSet<StringName> n = r_upper_neighbours[E]; if (_set_operations(GraphEdit::IS_SUBSET, n, z)) { Vector<StringName> t; - t.push_back(E->get()); + t.push_back(E); if (!l.has(current_layer)) { l.insert(current_layer, Vector<StringName>{}); } @@ -1760,7 +1760,7 @@ HashMap<int, Vector<StringName>> GraphEdit::_layering(const RBSet<StringName> &r t.append_array(l[current_layer]); l.insert(current_layer, t); RBSet<StringName> V; - V.insert(E->get()); + V.insert(E); _set_operations(GraphEdit::UNION, u, V); } } @@ -1802,9 +1802,9 @@ Vector<StringName> GraphEdit::_split(const Vector<StringName> &r_layer, const Ha } void GraphEdit::_horizontal_alignment(Dictionary &r_root, Dictionary &r_align, const HashMap<int, Vector<StringName>> &r_layers, const HashMap<StringName, RBSet<StringName>> &r_upper_neighbours, const RBSet<StringName> &r_selected_nodes) { - for (const RBSet<StringName>::Element *E = r_selected_nodes.front(); E; E = E->next()) { - r_root[E->get()] = E->get(); - r_align[E->get()] = E->get(); + for (const StringName &E : r_selected_nodes) { + r_root[E] = E; + r_align[E] = E; } if (r_layers.size() == 1) { @@ -1880,9 +1880,9 @@ void GraphEdit::_crossing_minimisation(HashMap<int, Vector<StringName>> &r_layer } void GraphEdit::_calculate_inner_shifts(Dictionary &r_inner_shifts, const Dictionary &r_root, const Dictionary &r_node_names, const Dictionary &r_align, const RBSet<StringName> &r_block_heads, const HashMap<StringName, Pair<int, int>> &r_port_info) { - for (const RBSet<StringName>::Element *E = r_block_heads.front(); E; E = E->next()) { + for (const StringName &E : r_block_heads) { real_t left = 0; - StringName u = E->get(); + StringName u = E; StringName v = r_align[u]; while (u != v && (StringName)r_root[u] != v) { String _connection = String(u) + " " + String(v); @@ -1903,11 +1903,11 @@ void GraphEdit::_calculate_inner_shifts(Dictionary &r_inner_shifts, const Dictio v = (StringName)r_align[v]; } - u = E->get(); + u = E; do { r_inner_shifts[u] = (real_t)r_inner_shifts[u] - left; u = (StringName)r_align[u]; - } while (u != E->get()); + } while (u != E); } } @@ -2117,33 +2117,33 @@ void GraphEdit::arrange_nodes() { Dictionary inner_shift; RBSet<StringName> block_heads; - for (const RBSet<StringName>::Element *E = selected_nodes.front(); E; E = E->next()) { - inner_shift[E->get()] = 0.0f; - sink[E->get()] = E->get(); - shift[E->get()] = FLT_MAX; - new_positions.insert(E->get(), default_position); - if ((StringName)root[E->get()] == E->get()) { - block_heads.insert(E->get()); + for (const StringName &E : selected_nodes) { + inner_shift[E] = 0.0f; + sink[E] = E; + shift[E] = FLT_MAX; + new_positions.insert(E, default_position); + if ((StringName)root[E] == E) { + block_heads.insert(E); } } _calculate_inner_shifts(inner_shift, root, node_names, align, block_heads, port_info); - for (const RBSet<StringName>::Element *E = block_heads.front(); E; E = E->next()) { - _place_block(E->get(), gap_v, layers, root, align, node_names, inner_shift, sink, shift, new_positions); + for (const StringName &E : block_heads) { + _place_block(E, gap_v, layers, root, align, node_names, inner_shift, sink, shift, new_positions); } origin.y = Object::cast_to<GraphNode>(node_names[layers[0][0]])->get_position_offset().y - (new_positions[layers[0][0]].y + (float)inner_shift[layers[0][0]]); origin.x = Object::cast_to<GraphNode>(node_names[layers[0][0]])->get_position_offset().x; - for (const RBSet<StringName>::Element *E = block_heads.front(); E; E = E->next()) { - StringName u = E->get(); - float start_from = origin.y + new_positions[E->get()].y; + for (const StringName &E : block_heads) { + StringName u = E; + float start_from = origin.y + new_positions[E].y; do { Vector2 cal_pos; cal_pos.y = start_from + (real_t)inner_shift[u]; new_positions.insert(u, cal_pos); u = align[u]; - } while (u != E->get()); + } while (u != E); } // Compute horizontal coordinates individually for layers to get uniform gap. @@ -2181,10 +2181,10 @@ void GraphEdit::arrange_nodes() { } emit_signal(SNAME("begin_node_move")); - for (const RBSet<StringName>::Element *E = selected_nodes.front(); E; E = E->next()) { - GraphNode *gn = Object::cast_to<GraphNode>(node_names[E->get()]); + for (const StringName &E : selected_nodes) { + GraphNode *gn = Object::cast_to<GraphNode>(node_names[E]); gn->set_drag(true); - Vector2 pos = (new_positions[E->get()]); + Vector2 pos = (new_positions[E]); if (is_using_snap()) { const int snap = get_snap(); diff --git a/scene/gui/grid_container.cpp b/scene/gui/grid_container.cpp index ec33018da0..5d9484806b 100644 --- a/scene/gui/grid_container.cpp +++ b/scene/gui/grid_container.cpp @@ -104,11 +104,11 @@ void GridContainer::_notification(int p_what) { // Check if all minwidth constraints are OK if we use the remaining space. can_fit = true; int max_index = col_expanded.front()->get(); - for (RBSet<int>::Element *E = col_expanded.front(); E; E = E->next()) { - if (col_minw[E->get()] > col_minw[max_index]) { - max_index = E->get(); + for (const int &E : col_expanded) { + if (col_minw[E] > col_minw[max_index]) { + max_index = E; } - if (can_fit && (remaining_space.width / col_expanded.size()) < col_minw[E->get()]) { + if (can_fit && (remaining_space.width / col_expanded.size()) < col_minw[E]) { can_fit = false; } } @@ -125,11 +125,11 @@ void GridContainer::_notification(int p_what) { // Check if all minheight constraints are OK if we use the remaining space. can_fit = true; int max_index = row_expanded.front()->get(); - for (RBSet<int>::Element *E = row_expanded.front(); E; E = E->next()) { - if (row_minh[E->get()] > row_minh[max_index]) { - max_index = E->get(); + for (const int &E : row_expanded) { + if (row_minh[E] > row_minh[max_index]) { + max_index = E; } - if (can_fit && (remaining_space.height / row_expanded.size()) < row_minh[E->get()]) { + if (can_fit && (remaining_space.height / row_expanded.size()) < row_minh[E]) { can_fit = false; } } diff --git a/scene/gui/range.cpp b/scene/gui/range.cpp index 73f19a8eda..fae6688452 100644 --- a/scene/gui/range.cpp +++ b/scene/gui/range.cpp @@ -50,8 +50,8 @@ void Range::_value_changed_notify() { } void Range::Shared::emit_value_changed() { - for (RBSet<Range *>::Element *E = owners.front(); E; E = E->next()) { - Range *r = E->get(); + for (Range *E : owners) { + Range *r = E; if (!r->is_inside_tree()) { continue; } @@ -70,8 +70,8 @@ void Range::_validate_values() { } void Range::Shared::emit_changed(const char *p_what) { - for (RBSet<Range *>::Element *E = owners.front(); E; E = E->next()) { - Range *r = E->get(); + for (Range *E : owners) { + Range *r = E; if (!r->is_inside_tree()) { continue; } diff --git a/scene/gui/rich_text_label.cpp b/scene/gui/rich_text_label.cpp index fa0c2ce12c..78fd682c35 100644 --- a/scene/gui/rich_text_label.cpp +++ b/scene/gui/rich_text_label.cpp @@ -209,9 +209,10 @@ String RichTextLabel::_letters(int p_num, bool p_capitalize) const { void RichTextLabel::_update_line_font(ItemFrame *p_frame, int p_line, const Ref<Font> &p_base_font, int p_base_font_size) { ERR_FAIL_COND(p_frame == nullptr); - ERR_FAIL_COND(p_line < 0 || p_line >= p_frame->lines.size()); + ERR_FAIL_COND(p_line < 0 || p_line >= (int)p_frame->lines.size()); - Line &l = p_frame->lines.write[p_line]; + Line &l = p_frame->lines[p_line]; + MutexLock lock(l.text_buf->get_mutex()); RID t = l.text_buf->get_rid(); int spans = TS->shaped_get_span_count(t); @@ -231,7 +232,7 @@ void RichTextLabel::_update_line_font(ItemFrame *p_frame, int p_line, const Ref< } } - Item *it_to = (p_line + 1 < p_frame->lines.size()) ? p_frame->lines[p_line + 1].from : nullptr; + Item *it_to = (p_line + 1 < (int)p_frame->lines.size()) ? p_frame->lines[p_line + 1].from : nullptr; for (Item *it = l.from; it && it != it_to; it = _get_next_item(it)) { switch (it->type) { case ITEM_TABLE: { @@ -239,7 +240,7 @@ void RichTextLabel::_update_line_font(ItemFrame *p_frame, int p_line, const Ref< for (Item *E : table->subitems) { ERR_CONTINUE(E->type != ITEM_FRAME); // Children should all be frames. ItemFrame *frame = static_cast<ItemFrame *>(E); - for (int i = 0; i < frame->lines.size(); i++) { + for (int i = 0; i < (int)frame->lines.size(); i++) { _update_line_font(frame, i, p_base_font, p_base_font_size); } } @@ -250,11 +251,12 @@ void RichTextLabel::_update_line_font(ItemFrame *p_frame, int p_line, const Ref< } } -void RichTextLabel::_resize_line(ItemFrame *p_frame, int p_line, const Ref<Font> &p_base_font, int p_base_font_size, int p_width) { - ERR_FAIL_COND(p_frame == nullptr); - ERR_FAIL_COND(p_line < 0 || p_line >= p_frame->lines.size()); +float RichTextLabel::_resize_line(ItemFrame *p_frame, int p_line, const Ref<Font> &p_base_font, int p_base_font_size, int p_width, float p_h) { + ERR_FAIL_COND_V(p_frame == nullptr, p_h); + ERR_FAIL_COND_V(p_line < 0 || p_line >= (int)p_frame->lines.size(), p_h); - Line &l = p_frame->lines.write[p_line]; + Line &l = p_frame->lines[p_line]; + MutexLock lock(l.text_buf->get_mutex()); l.offset.x = _find_margin(l.from, p_base_font, p_base_font_size); l.text_buf->set_width(p_width - l.offset.x); @@ -265,7 +267,7 @@ void RichTextLabel::_resize_line(ItemFrame *p_frame, int p_line, const Ref<Font> l.text_buf->tab_align(tabs); } - Item *it_to = (p_line + 1 < p_frame->lines.size()) ? p_frame->lines[p_line + 1].from : nullptr; + Item *it_to = (p_line + 1 < (int)p_frame->lines.size()) ? p_frame->lines[p_line + 1].from : nullptr; for (Item *it = l.from; it && it != it_to; it = _get_next_item(it)) { switch (it->type) { case ITEM_TABLE: { @@ -275,16 +277,18 @@ void RichTextLabel::_resize_line(ItemFrame *p_frame, int p_line, const Ref<Font> int col_count = table->columns.size(); for (int i = 0; i < col_count; i++) { - table->columns.write[i].width = 0; + table->columns[i].width = 0; } int idx = 0; for (Item *E : table->subitems) { ERR_CONTINUE(E->type != ITEM_FRAME); // Children should all be frames. ItemFrame *frame = static_cast<ItemFrame *>(E); - for (int i = 0; i < frame->lines.size(); i++) { + float prev_h = 0; + for (int i = 0; i < (int)frame->lines.size(); i++) { + MutexLock sub_lock(frame->lines[i].text_buf->get_mutex()); int w = _find_margin(frame->lines[i].from, p_base_font, p_base_font_size) + 1; - _resize_line(frame, i, p_base_font, p_base_font_size, w); + prev_h = _resize_line(frame, i, p_base_font, p_base_font_size, w, prev_h); } idx++; } @@ -300,7 +304,7 @@ void RichTextLabel::_resize_line(ItemFrame *p_frame, int p_line, const Ref<Font> for (int i = 0; i < col_count; i++) { remaining_width -= table->columns[i].min_width; if (table->columns[i].max_width > table->columns[i].min_width) { - table->columns.write[i].expand = true; + table->columns[i].expand = true; } if (table->columns[i].expand) { total_ratio += table->columns[i].expand_ratio; @@ -309,9 +313,9 @@ void RichTextLabel::_resize_line(ItemFrame *p_frame, int p_line, const Ref<Font> // Assign actual widths. for (int i = 0; i < col_count; i++) { - table->columns.write[i].width = table->columns[i].min_width; + table->columns[i].width = table->columns[i].min_width; if (table->columns[i].expand && total_ratio > 0 && remaining_width > 0) { - table->columns.write[i].width += table->columns[i].expand_ratio * remaining_width / total_ratio; + table->columns[i].width += table->columns[i].expand_ratio * remaining_width / total_ratio; } table->total_width += table->columns[i].width + hseparation; } @@ -328,7 +332,7 @@ void RichTextLabel::_resize_line(ItemFrame *p_frame, int p_line, const Ref<Font> int dif = table->columns[i].width - table->columns[i].max_width; if (dif > 0) { table_need_fit = true; - table->columns.write[i].width = table->columns[i].max_width; + table->columns[i].width = table->columns[i].max_width; table->total_width -= dif; total_ratio -= table->columns[i].expand_ratio; } @@ -342,7 +346,7 @@ void RichTextLabel::_resize_line(ItemFrame *p_frame, int p_line, const Ref<Font> if (dif > 0) { int slice = table->columns[i].expand_ratio * remaining_width / total_ratio; int incr = MIN(dif, slice); - table->columns.write[i].width += incr; + table->columns[i].width += incr; table->total_width += incr; } } @@ -366,16 +370,14 @@ void RichTextLabel::_resize_line(ItemFrame *p_frame, int p_line, const Ref<Font> offset.x += frame->padding.position.x; float yofs = frame->padding.position.y; - for (int i = 0; i < frame->lines.size(); i++) { - frame->lines.write[i].text_buf->set_width(table->columns[column].width); - table->columns.write[column].width = MAX(table->columns.write[column].width, ceil(frame->lines[i].text_buf->get_size().x)); + float prev_h = 0; + for (int i = 0; i < (int)frame->lines.size(); i++) { + MutexLock sub_lock(frame->lines[i].text_buf->get_mutex()); + frame->lines[i].text_buf->set_width(table->columns[column].width); + table->columns[column].width = MAX(table->columns[column].width, ceil(frame->lines[i].text_buf->get_size().x)); - if (i > 0) { - frame->lines.write[i].offset.y = frame->lines[i - 1].offset.y + frame->lines[i - 1].text_buf->get_size().y + frame->lines[i - 1].text_buf->get_line_count() * get_theme_constant(SNAME("line_separation")); - } else { - frame->lines.write[i].offset.y = 0; - } - frame->lines.write[i].offset += offset; + frame->lines[i].offset.y = prev_h; + frame->lines[i].offset += offset; float h = frame->lines[i].text_buf->get_size().y + (frame->lines[i].text_buf->get_line_count() - 1) * get_theme_constant(SNAME("line_separation")); if (i > 0) { @@ -388,6 +390,7 @@ void RichTextLabel::_resize_line(ItemFrame *p_frame, int p_line, const Ref<Font> h = MIN(h, frame->max_size_over.y); } yofs += h; + prev_h = frame->lines[i].offset.y + frame->lines[i].text_buf->get_size().y + frame->lines[i].text_buf->get_line_count() * get_theme_constant(SNAME("line_separation")); } yofs += frame->padding.size.y; offset.x += table->columns[column].width + hseparation + frame->padding.size.x; @@ -410,18 +413,16 @@ void RichTextLabel::_resize_line(ItemFrame *p_frame, int p_line, const Ref<Font> } } - if (p_line > 0) { - l.offset.y = p_frame->lines[p_line - 1].offset.y + p_frame->lines[p_line - 1].text_buf->get_size().y + p_frame->lines[p_line - 1].text_buf->get_line_count() * get_theme_constant(SNAME("line_separation")); - } else { - l.offset.y = 0; - } + l.offset.y = p_h; + return l.offset.y + l.text_buf->get_size().y + l.text_buf->get_line_count() * get_theme_constant(SNAME("line_separation")); } -void RichTextLabel::_shape_line(ItemFrame *p_frame, int p_line, const Ref<Font> &p_base_font, int p_base_font_size, int p_width, int *r_char_offset) { - ERR_FAIL_COND(p_frame == nullptr); - ERR_FAIL_COND(p_line < 0 || p_line >= p_frame->lines.size()); +float RichTextLabel::_shape_line(ItemFrame *p_frame, int p_line, const Ref<Font> &p_base_font, int p_base_font_size, int p_width, float p_h, int *r_char_offset) { + ERR_FAIL_COND_V(p_frame == nullptr, p_h); + ERR_FAIL_COND_V(p_line < 0 || p_line >= (int)p_frame->lines.size(), p_h); - Line &l = p_frame->lines.write[p_line]; + Line &l = p_frame->lines[p_line]; + MutexLock lock(l.text_buf->get_mutex()); uint16_t autowrap_flags = TextServer::BREAK_MANDATORY; switch (autowrap_mode) { @@ -458,7 +459,7 @@ 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; + Item *it_to = (p_line + 1 < (int)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_chars_behavior == VC_CHARS_BEFORE_SHAPING && visible_characters >= 0 && remaining_characters <= 0) { @@ -524,9 +525,9 @@ void RichTextLabel::_shape_line(ItemFrame *p_frame, int p_line, const Ref<Font> int t_char_count = 0; // Set minimums to zero. for (int i = 0; i < col_count; i++) { - table->columns.write[i].min_width = 0; - table->columns.write[i].max_width = 0; - table->columns.write[i].width = 0; + table->columns[i].min_width = 0; + table->columns[i].max_width = 0; + table->columns[i].width = 0; } // Compute minimum width for each cell. const int available_width = p_width - hseparation * (col_count - 1); @@ -537,17 +538,20 @@ void RichTextLabel::_shape_line(ItemFrame *p_frame, int p_line, const Ref<Font> ItemFrame *frame = static_cast<ItemFrame *>(E); int column = idx % col_count; - for (int i = 0; i < frame->lines.size(); i++) { + float prev_h = 0; + for (int i = 0; i < (int)frame->lines.size(); i++) { + MutexLock sub_lock(frame->lines[i].text_buf->get_mutex()); + int char_offset = l.char_offset + l.char_count; int w = _find_margin(frame->lines[i].from, p_base_font, p_base_font_size) + 1; - _shape_line(frame, i, p_base_font, p_base_font_size, w, &char_offset); + prev_h = _shape_line(frame, i, p_base_font, p_base_font_size, w, prev_h, &char_offset); 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_wrapped_size().x)); + table->columns[column].min_width = MAX(table->columns[column].min_width, ceil(frame->lines[i].text_buf->get_size().x)); + table->columns[column].max_width = MAX(table->columns[column].max_width, ceil(frame->lines[i].text_buf->get_non_wrapped_size().x)); } idx++; } @@ -560,7 +564,7 @@ void RichTextLabel::_shape_line(ItemFrame *p_frame, int p_line, const Ref<Font> for (int i = 0; i < col_count; i++) { remaining_width -= table->columns[i].min_width; if (table->columns[i].max_width > table->columns[i].min_width) { - table->columns.write[i].expand = true; + table->columns[i].expand = true; } if (table->columns[i].expand) { total_ratio += table->columns[i].expand_ratio; @@ -569,9 +573,9 @@ void RichTextLabel::_shape_line(ItemFrame *p_frame, int p_line, const Ref<Font> // Assign actual widths. for (int i = 0; i < col_count; i++) { - table->columns.write[i].width = table->columns[i].min_width; + table->columns[i].width = table->columns[i].min_width; if (table->columns[i].expand && total_ratio > 0 && remaining_width > 0) { - table->columns.write[i].width += table->columns[i].expand_ratio * remaining_width / total_ratio; + table->columns[i].width += table->columns[i].expand_ratio * remaining_width / total_ratio; } table->total_width += table->columns[i].width + hseparation; } @@ -588,7 +592,7 @@ void RichTextLabel::_shape_line(ItemFrame *p_frame, int p_line, const Ref<Font> int dif = table->columns[i].width - table->columns[i].max_width; if (dif > 0) { table_need_fit = true; - table->columns.write[i].width = table->columns[i].max_width; + table->columns[i].width = table->columns[i].max_width; table->total_width -= dif; total_ratio -= table->columns[i].expand_ratio; } @@ -602,7 +606,7 @@ void RichTextLabel::_shape_line(ItemFrame *p_frame, int p_line, const Ref<Font> if (dif > 0) { int slice = table->columns[i].expand_ratio * remaining_width / total_ratio; int incr = MIN(dif, slice); - table->columns.write[i].width += incr; + table->columns[i].width += incr; table->total_width += incr; } } @@ -626,16 +630,15 @@ void RichTextLabel::_shape_line(ItemFrame *p_frame, int p_line, const Ref<Font> offset.x += frame->padding.position.x; float yofs = frame->padding.position.y; - for (int i = 0; i < frame->lines.size(); i++) { - frame->lines.write[i].text_buf->set_width(table->columns[column].width); - table->columns.write[column].width = MAX(table->columns.write[column].width, ceil(frame->lines[i].text_buf->get_size().x)); + float prev_h = 0; + for (int i = 0; i < (int)frame->lines.size(); i++) { + MutexLock sub_lock(frame->lines[i].text_buf->get_mutex()); - if (i > 0) { - frame->lines.write[i].offset.y = frame->lines[i - 1].offset.y + frame->lines[i - 1].text_buf->get_size().y + frame->lines[i - 1].text_buf->get_line_count() * get_theme_constant(SNAME("line_separation")); - } else { - frame->lines.write[i].offset.y = 0; - } - frame->lines.write[i].offset += offset; + frame->lines[i].text_buf->set_width(table->columns[column].width); + table->columns[column].width = MAX(table->columns[column].width, ceil(frame->lines[i].text_buf->get_size().x)); + + frame->lines[i].offset.y = prev_h; + frame->lines[i].offset += offset; float h = frame->lines[i].text_buf->get_size().y + (frame->lines[i].text_buf->get_line_count() - 1) * get_theme_constant(SNAME("line_separation")); if (i > 0) { @@ -648,6 +651,7 @@ void RichTextLabel::_shape_line(ItemFrame *p_frame, int p_line, const Ref<Font> h = MIN(h, frame->max_size_over.y); } yofs += h; + prev_h = frame->lines[i].offset.y + frame->lines[i].text_buf->get_size().y + frame->lines[i].text_buf->get_line_count() * get_theme_constant(SNAME("line_separation")); } yofs += frame->padding.size.y; offset.x += table->columns[column].width + hseparation + frame->padding.size.x; @@ -678,24 +682,22 @@ void RichTextLabel::_shape_line(ItemFrame *p_frame, int p_line, const Ref<Font> *r_char_offset = l.char_offset + l.char_count; - if (p_line > 0) { - l.offset.y = p_frame->lines[p_line - 1].offset.y + p_frame->lines[p_line - 1].text_buf->get_size().y + p_frame->lines[p_line - 1].text_buf->get_line_count() * get_theme_constant(SNAME("line_separation")); - } else { - l.offset.y = 0; - } + l.offset.y = p_h; + return l.offset.y + l.text_buf->get_size().y + l.text_buf->get_line_count() * get_theme_constant(SNAME("line_separation")); } int RichTextLabel::_draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_ofs, int p_width, const Color &p_base_color, int p_outline_size, const Color &p_outline_color, const Color &p_font_shadow_color, int p_shadow_outline_size, const Point2 &p_shadow_ofs, int &r_processed_glyphs) { ERR_FAIL_COND_V(p_frame == nullptr, 0); - ERR_FAIL_COND_V(p_line < 0 || p_line >= p_frame->lines.size(), 0); + ERR_FAIL_COND_V(p_line < 0 || p_line >= (int)p_frame->lines.size(), 0); Vector2 off; int line_spacing = get_theme_constant(SNAME("line_separation")); - Line &l = p_frame->lines.write[p_line]; + Line &l = p_frame->lines[p_line]; + MutexLock lock(l.text_buf->get_mutex()); Item *it_from = l.from; - Item *it_to = (p_line + 1 < p_frame->lines.size()) ? p_frame->lines[p_line + 1].from : nullptr; + Item *it_to = (p_line + 1 < (int)p_frame->lines.size()) ? p_frame->lines[p_line + 1].from : nullptr; if (it_from == nullptr) { return 0; @@ -877,7 +879,7 @@ int RichTextLabel::_draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_o draw_rect(Rect2(p_ofs + rect.position + off + coff - frame->padding.position, Size2(table->columns[col].width + hseparation + frame->padding.position.x + frame->padding.size.x, table->rows[row])), (frame->border != Color(0, 0, 0, 0) ? frame->border : border), false); } - for (int j = 0; j < frame->lines.size(); j++) { + for (int j = 0; j < (int)frame->lines.size(); j++) { _draw_line(frame, j, p_ofs + rect.position + off + Vector2(0, frame->lines[j].offset.y), rect.size.x, p_base_color, p_outline_size, p_outline_color, p_font_shadow_color, p_shadow_outline_size, p_shadow_ofs, r_processed_glyphs); } idx++; @@ -1299,22 +1301,12 @@ void RichTextLabel::_find_click(ItemFrame *p_frame, const Point2i &p_click, Item int vofs = vscroll->get_value(); // Search for the first line. - int from_line = 0; - - //TODO, change to binary search ? - while (from_line < main->lines.size()) { - if (main->lines[from_line].offset.y + main->lines[from_line].text_buf->get_size().y + main->lines[from_line].text_buf->get_line_count() * get_theme_constant(SNAME("line_separation")) >= vofs) { - break; - } - from_line++; - } - - if (from_line >= main->lines.size()) { - return; - } + int to_line = main->first_invalid_line.load(); + int from_line = _find_first_line(0, to_line, vofs); Point2 ofs = text_rect.get_position() + Vector2(0, main->lines[from_line].offset.y - vofs); - while (ofs.y < size.height && from_line < main->lines.size()) { + while (ofs.y < size.height && from_line < to_line) { + MutexLock lock(main->lines[from_line].text_buf->get_mutex()); _find_click_in_line(p_frame, from_line, ofs, text_rect.size.x, p_click, r_click_frame, r_click_line, r_click_item, r_click_char); ofs.y += main->lines[from_line].text_buf->get_size().y + main->lines[from_line].text_buf->get_line_count() * get_theme_constant(SNAME("line_separation")); if (((r_click_item != nullptr) && ((*r_click_item) != nullptr)) || ((r_click_frame != nullptr) && ((*r_click_frame) != nullptr))) { @@ -1331,7 +1323,9 @@ float RichTextLabel::_find_click_in_line(ItemFrame *p_frame, int p_line, const V Vector2 off; int char_pos = -1; - Line &l = p_frame->lines.write[p_line]; + Line &l = p_frame->lines[p_line]; + MutexLock lock(l.text_buf->get_mutex()); + bool rtl = (l.text_buf->get_direction() == TextServer::DIRECTION_RTL); bool lrtl = is_layout_rtl(); @@ -1420,14 +1414,14 @@ float RichTextLabel::_find_click_in_line(ItemFrame *p_frame, int p_line, const V } } if (crect.has_point(p_click)) { - for (int j = 0; j < frame->lines.size(); j++) { + for (int j = 0; j < (int)frame->lines.size(); j++) { _find_click_in_line(frame, j, rect.position + Vector2(0, frame->lines[j].offset.y), rect.size.x, p_click, &table_click_frame, &table_click_line, &table_click_item, &table_click_char, true); if (table_click_frame && table_click_item) { // Save cell detected cell hit data. table_range = Vector2i(INT32_MAX, 0); for (Item *F : table->subitems) { ItemFrame *sub_frame = static_cast<ItemFrame *>(F); - for (int k = 0; k < sub_frame->lines.size(); k++) { + for (int k = 0; k < (int)sub_frame->lines.size(); k++) { table_range.x = MIN(table_range.x, sub_frame->lines[k].char_offset); table_range.y = MAX(table_range.y, sub_frame->lines[k].char_offset + sub_frame->lines[k].char_count); } @@ -1484,7 +1478,7 @@ float RichTextLabel::_find_click_in_line(ItemFrame *p_frame, int p_line, const V // Find item. if (r_click_item != nullptr) { Item *it = p_frame->lines[p_line].from; - Item *it_to = (p_line + 1 < p_frame->lines.size()) ? p_frame->lines[p_line + 1].from : nullptr; + Item *it_to = (p_line + 1 < (int)p_frame->lines.size()) ? p_frame->lines[p_line + 1].from : nullptr; if (char_pos == p_frame->lines[p_line].char_count) { // Selection after the end of line, select last item. if (it_to != nullptr) { @@ -1532,28 +1526,6 @@ void RichTextLabel::_scroll_changed(double) { update(); } -void RichTextLabel::_update_scroll() { - int total_height = get_content_height(); - - bool exceeds = total_height > get_size().height && scroll_active; - - if (exceeds != scroll_visible) { - if (exceeds) { - scroll_visible = true; - scroll_w = vscroll->get_combined_minimum_size().width; - vscroll->show(); - vscroll->set_anchor_and_offset(SIDE_LEFT, ANCHOR_END, -scroll_w); - } else { - scroll_visible = false; - scroll_w = 0; - vscroll->hide(); - } - - main->first_resized_line = 0; //invalidate ALL - _validate_line_caches(main); - } -} - void RichTextLabel::_update_fx(RichTextLabel::ItemFrame *p_frame, double p_delta_time) { Item *it = p_frame; while (it) { @@ -1588,6 +1560,22 @@ void RichTextLabel::_update_fx(RichTextLabel::ItemFrame *p_frame, double p_delta } } +int RichTextLabel::_find_first_line(int p_from, int p_to, int p_vofs) const { + int l = p_from; + int r = p_to; + while (l < r) { + int m = Math::floor(double(l + r) / 2.0); + MutexLock lock(main->lines[m].text_buf->get_mutex()); + int ofs = main->lines[m].offset.y + main->lines[m].text_buf->get_size().y + main->lines[m].text_buf->get_line_count() * get_theme_constant(SNAME("line_separation")); + if (ofs < p_vofs) { + l = m + 1; + } else { + r = m; + } + } + return l; +} + void RichTextLabel::_notification(int p_what) { switch (p_what) { case NOTIFICATION_MOUSE_EXIT: { @@ -1600,38 +1588,45 @@ void RichTextLabel::_notification(int p_what) { } break; case NOTIFICATION_RESIZED: { - main->first_resized_line = 0; //invalidate ALL + _stop_thread(); + main->first_resized_line.store(0); //invalidate ALL update(); } break; case NOTIFICATION_THEME_CHANGED: { - main->first_invalid_font_line = 0; //invalidate ALL + _stop_thread(); + main->first_invalid_font_line.store(0); //invalidate ALL update(); } break; case NOTIFICATION_ENTER_TREE: { + _stop_thread(); if (!text.is_empty()) { set_text(text); } - main->first_invalid_line = 0; //invalidate ALL + main->first_invalid_line.store(0); //invalidate ALL update(); } break; + case NOTIFICATION_EXIT_TREE: { + _stop_thread(); + } break; + case NOTIFICATION_LAYOUT_DIRECTION_CHANGED: case NOTIFICATION_TRANSLATION_CHANGED: { - main->first_invalid_line = 0; //invalidate ALL + _stop_thread(); + main->first_invalid_line.store(0); //invalidate ALL update(); } break; - case NOTIFICATION_DRAW: { - _validate_line_caches(main); - _update_scroll(); + case NOTIFICATION_INTERNAL_PHYSICS_PROCESS: { + update(); + } break; + case NOTIFICATION_DRAW: { RID ci = get_canvas_item(); - Size2 size = get_size(); - Rect2 text_rect = _get_text_rect(); draw_style_box(get_theme_stylebox(SNAME("normal")), Rect2(Point2(), size)); @@ -1641,22 +1636,42 @@ void RichTextLabel::_notification(int p_what) { RenderingServer::get_singleton()->canvas_item_add_clip_ignore(ci, false); } + // Start text shaping. + if (_validate_line_caches()) { + set_physics_process_internal(false); // Disable auto refresh, if text is fully processed. + } else { + // Draw loading progress bar. + if ((progress_delay > 0) && (OS::get_singleton()->get_ticks_msec() - loading_started >= (uint64_t)progress_delay)) { + Ref<StyleBox> bg = get_theme_stylebox(SNAME("bg"), SNAME("ProgressBar")); + Ref<StyleBox> fg = get_theme_stylebox(SNAME("fg"), SNAME("ProgressBar")); + Ref<StyleBox> style = get_theme_stylebox(SNAME("normal")); + + Vector2 p_size = Vector2(size.width - (style->get_offset().x + vscroll->get_combined_minimum_size().width) * 2, vscroll->get_combined_minimum_size().width); + Vector2 p_pos = Vector2(style->get_offset().x, size.height - style->get_offset().y - vscroll->get_combined_minimum_size().width); + + draw_style_box(bg, Rect2(p_pos, p_size)); + + bool right_to_left = is_layout_rtl(); + double r = loaded.load(); + int mp = fg->get_minimum_size().width; + int p = round(r * (p_size.width - mp)); + if (right_to_left) { + int p_remaining = round((1.0 - r) * (p_size.width - mp)); + draw_style_box(fg, Rect2(p_pos + Point2(p_remaining, 0), Size2(p + fg->get_minimum_size().width, p_size.height))); + } else { + draw_style_box(fg, Rect2(p_pos, Size2(p + fg->get_minimum_size().width, p_size.height))); + } + } + } + + // Draw main text. + Rect2 text_rect = _get_text_rect(); float vofs = vscroll->get_value(); // Search for the first line. - int from_line = 0; - - //TODO, change to binary search ? - while (from_line < main->lines.size()) { - if (main->lines[from_line].offset.y + main->lines[from_line].text_buf->get_size().y + main->lines[from_line].text_buf->get_line_count() * get_theme_constant(SNAME("line_separation")) >= vofs) { - break; - } - from_line++; - } + int to_line = main->first_invalid_line.load(); + int from_line = _find_first_line(0, to_line, vofs); - if (from_line >= main->lines.size()) { - break; //nothing to draw - } Ref<Font> base_font = get_theme_font(SNAME("normal_font")); Color base_color = get_theme_color(SNAME("default_color")); Color outline_color = get_theme_color(SNAME("font_outline_color")); @@ -1671,7 +1686,9 @@ void RichTextLabel::_notification(int p_what) { // New cache draw. Point2 ofs = text_rect.get_position() + Vector2(0, main->lines[from_line].offset.y - vofs); int processed_glyphs = 0; - while (ofs.y < size.height && from_line < main->lines.size()) { + while (ofs.y < size.height && from_line < to_line) { + MutexLock lock(main->lines[from_line].text_buf->get_mutex()); + visible_paragraph_count++; visible_line_count += _draw_line(main, from_line, ofs, text_rect.size.x, base_color, outline_size, outline_color, font_shadow_color, shadow_outline_size, shadow_ofs, processed_glyphs); ofs.y += main->lines[from_line].text_buf->get_size().y + main->lines[from_line].text_buf->get_line_count() * get_theme_constant(SNAME("line_separation")); @@ -1681,6 +1698,9 @@ void RichTextLabel::_notification(int p_what) { case NOTIFICATION_INTERNAL_PROCESS: { if (is_visible_in_tree()) { + if (!is_ready()) { + return; + } double dt = get_process_delta_time(); _update_fx(main, dt); update(); @@ -1708,18 +1728,6 @@ Control::CursorShape RichTextLabel::get_cursor_shape(const Point2 &p_pos) const return CURSOR_IBEAM; } - if (main->first_invalid_line < main->lines.size()) { - return get_default_cursor_shape(); //invalid - } - - if (main->first_invalid_font_line < main->lines.size()) { - return get_default_cursor_shape(); //invalid - } - - if (main->first_resized_line < main->lines.size()) { - return get_default_cursor_shape(); //invalid - } - Item *item = nullptr; bool outside = true; const_cast<RichTextLabel *>(this)->_find_click(main, p_pos, nullptr, nullptr, &item, nullptr, &outside); @@ -1727,7 +1735,6 @@ Control::CursorShape RichTextLabel::get_cursor_shape(const Point2 &p_pos) const if (item && !outside && const_cast<RichTextLabel *>(this)->_find_meta(item, nullptr)) { return CURSOR_POINTING_HAND; } - return get_default_cursor_shape(); } @@ -1737,16 +1744,6 @@ void RichTextLabel::gui_input(const Ref<InputEvent> &p_event) { Ref<InputEventMouseButton> b = p_event; if (b.is_valid()) { - if (main->first_invalid_line < main->lines.size()) { - return; - } - if (main->first_invalid_font_line < main->lines.size()) { - return; - } - if (main->first_resized_line < main->lines.size()) { - return; - } - if (b->get_button_index() == MouseButton::LEFT) { if (b->is_pressed() && !b->is_double_click()) { scroll_updated = false; @@ -1800,6 +1797,7 @@ void RichTextLabel::gui_input(const Ref<InputEvent> &p_event) { if (c_frame) { const Line &l = c_frame->lines[c_line]; + MutexLock lock(l.text_buf->get_mutex()); PackedInt32Array words = TS->shaped_text_get_word_breaks(l.text_buf->get_rid()); for (int i = 0; i < words.size(); i = i + 2) { if (c_index >= words[i] && c_index < words[i + 1]) { @@ -1945,18 +1943,7 @@ void RichTextLabel::gui_input(const Ref<InputEvent> &p_event) { } Ref<InputEventMouseMotion> m = p_event; - if (m.is_valid()) { - if (main->first_invalid_line < main->lines.size()) { - return; - } - if (main->first_invalid_font_line < main->lines.size()) { - return; - } - if (main->first_resized_line < main->lines.size()) { - return; - } - ItemFrame *c_frame = nullptr; int c_line = 0; Item *c_item = nullptr; @@ -2434,93 +2421,215 @@ bool RichTextLabel::_find_layout_subitem(Item *from, Item *to) { return false; } -void RichTextLabel::_validate_line_caches(ItemFrame *p_frame) { - if (p_frame->first_invalid_line == p_frame->lines.size()) { +void RichTextLabel::_thread_function(void *self) { + RichTextLabel *rtl = reinterpret_cast<RichTextLabel *>(self); + rtl->_process_line_caches(); + rtl->updating.store(false); + rtl->call_deferred(SNAME("update")); +} + +void RichTextLabel::_stop_thread() { + if (threaded) { + stop_thread.store(true); + thread.wait_to_finish(); + } +} + +bool RichTextLabel::is_ready() const { + if (updating.load()) { + return false; + } + return (main->first_invalid_line.load() == (int)main->lines.size() && main->first_resized_line.load() == (int)main->lines.size() && main->first_invalid_font_line.load() == (int)main->lines.size()); +} + +void RichTextLabel::set_threaded(bool p_threaded) { + if (threaded != p_threaded) { + _stop_thread(); + threaded = p_threaded; + update(); + } +} + +bool RichTextLabel::is_threaded() const { + return threaded; +} + +void RichTextLabel::set_progress_bar_delay(int p_delay_ms) { + progress_delay = p_delay_ms; +} + +int RichTextLabel::get_progress_bar_delay() const { + return progress_delay; +} + +bool RichTextLabel::_validate_line_caches() { + if (updating.load()) { + return false; + } + if (main->first_invalid_line.load() == (int)main->lines.size()) { + MutexLock data_lock(data_mutex); + Rect2 text_rect = _get_text_rect(); + Ref<Font> base_font = get_theme_font(SNAME("normal_font")); int base_font_size = get_theme_font_size(SNAME("normal_font_size")); + int ctrl_height = get_size().height; // Update fonts. - if (p_frame->first_invalid_font_line != p_frame->lines.size()) { - for (int i = p_frame->first_invalid_font_line; i < p_frame->lines.size(); i++) { - _update_line_font(p_frame, i, base_font, base_font_size); + if (main->first_invalid_font_line.load() != (int)main->lines.size()) { + for (int i = main->first_invalid_font_line.load(); i < (int)main->lines.size(); i++) { + _update_line_font(main, i, base_font, base_font_size); } - p_frame->first_resized_line = p_frame->first_invalid_font_line; - p_frame->first_invalid_font_line = p_frame->lines.size(); + main->first_resized_line.store(main->first_invalid_font_line.load()); + main->first_invalid_font_line.store(main->lines.size()); } - if (p_frame->first_resized_line == p_frame->lines.size()) { - return; + if (main->first_resized_line.load() == (int)main->lines.size()) { + return true; } // Resize lines without reshaping. - Rect2 text_rect = _get_text_rect(); + int fi = main->first_resized_line.load(); + + float total_height = 0; + for (int i = fi; i < (int)main->lines.size(); i++) { + total_height = _resize_line(main, i, base_font, base_font_size, text_rect.get_size().width - scroll_w, total_height); + + updating_scroll = true; + bool exceeds = total_height > ctrl_height && scroll_active; + if (exceeds != scroll_visible) { + if (exceeds) { + scroll_visible = true; + scroll_w = vscroll->get_combined_minimum_size().width; + vscroll->show(); + vscroll->set_anchor_and_offset(SIDE_LEFT, ANCHOR_END, -scroll_w); + } else { + scroll_visible = false; + scroll_w = 0; + vscroll->hide(); + } - for (int i = p_frame->first_resized_line; i < p_frame->lines.size(); i++) { - _resize_line(p_frame, i, base_font, base_font_size, text_rect.get_size().width - scroll_w); - } + main->first_resized_line.store(0); - int total_height = 0; - if (p_frame->lines.size()) { - total_height = p_frame->lines[p_frame->lines.size() - 1].offset.y + p_frame->lines[p_frame->lines.size() - 1].text_buf->get_size().y + p_frame->lines[p_frame->lines.size() - 1].text_buf->get_line_count() * get_theme_constant(SNAME("line_separation")); - } + total_height = 0; + for (int j = 0; j <= i; j++) { + total_height = _resize_line(main, j, base_font, base_font_size, text_rect.get_size().width - scroll_w, total_height); + + main->first_resized_line.store(j); + } + } - p_frame->first_resized_line = p_frame->lines.size(); + vscroll->set_max(total_height); + vscroll->set_page(text_rect.size.height); + if (scroll_follow && scroll_following) { + vscroll->set_value(total_height); + } + updating_scroll = false; - updating_scroll = true; - vscroll->set_max(total_height); - vscroll->set_page(text_rect.size.height); - if (scroll_follow && scroll_following) { - vscroll->set_value(total_height); + main->first_resized_line.store(i); } - updating_scroll = false; + + main->first_resized_line.store(main->lines.size()); if (fit_content_height) { update_minimum_size(); } - return; + return true; } + stop_thread.store(false); + if (threaded) { + updating.store(true); + loaded.store(true); + thread.start(RichTextLabel::_thread_function, reinterpret_cast<void *>(this)); + loading_started = OS::get_singleton()->get_ticks_msec(); + set_physics_process_internal(true); + return false; + } else { + _process_line_caches(); + update(); + return true; + } +} +void RichTextLabel::_process_line_caches() { // Shape invalid lines. + MutexLock data_lock(data_mutex); Rect2 text_rect = _get_text_rect(); Ref<Font> base_font = get_theme_font(SNAME("normal_font")); int base_font_size = get_theme_font_size(SNAME("normal_font_size")); + int ctrl_height = get_size().height; + int fi = main->first_invalid_line.load(); + int total_chars = (fi == 0) ? 0 : (main->lines[fi].char_offset + main->lines[fi].char_count); - int total_chars = (p_frame->first_invalid_line == 0) ? 0 : (p_frame->lines[p_frame->first_invalid_line].char_offset + p_frame->lines[p_frame->first_invalid_line].char_count); - for (int i = p_frame->first_invalid_line; i < p_frame->lines.size(); i++) { - _shape_line(p_frame, i, base_font, base_font_size, text_rect.get_size().width - scroll_w, &total_chars); - } + float total_height = 0; + for (int i = fi; i < (int)main->lines.size(); i++) { + total_height = _shape_line(main, i, base_font, base_font_size, text_rect.get_size().width - scroll_w, total_height, &total_chars); - int total_height = 0; - if (p_frame->lines.size()) { - total_height = p_frame->lines[p_frame->lines.size() - 1].offset.y + p_frame->lines[p_frame->lines.size() - 1].text_buf->get_size().y + p_frame->lines[p_frame->lines.size() - 1].text_buf->get_line_count() * get_theme_constant(SNAME("line_separation")); - } + updating_scroll = true; + bool exceeds = total_height > ctrl_height && scroll_active; + if (exceeds != scroll_visible) { + if (exceeds) { + scroll_visible = true; + scroll_w = vscroll->get_combined_minimum_size().width; + vscroll->show(); + vscroll->set_anchor_and_offset(SIDE_LEFT, ANCHOR_END, -scroll_w); + } else { + scroll_visible = false; + scroll_w = 0; + vscroll->hide(); + } - p_frame->first_invalid_line = p_frame->lines.size(); - p_frame->first_resized_line = p_frame->lines.size(); - p_frame->first_invalid_font_line = p_frame->lines.size(); + main->first_invalid_line.store(0); + main->first_resized_line.store(0); + main->first_invalid_font_line.store(0); - updating_scroll = true; - vscroll->set_max(total_height); - vscroll->set_page(text_rect.size.height); - if (scroll_follow && scroll_following) { - vscroll->set_value(total_height); + total_height = 0; + for (int j = 0; j <= i; j++) { + total_height = _resize_line(main, j, base_font, base_font_size, text_rect.get_size().width - scroll_w, total_height); + + main->first_invalid_line.store(j); + main->first_resized_line.store(j); + main->first_invalid_font_line.store(j); + } + } + + vscroll->set_max(total_height); + vscroll->set_page(text_rect.size.height); + if (scroll_follow && scroll_following) { + vscroll->set_value(total_height); + } + updating_scroll = false; + + main->first_invalid_line.store(i); + main->first_resized_line.store(i); + main->first_invalid_font_line.store(i); + + if (stop_thread.load()) { + return; + } + loaded.store(double(i) / double(main->lines.size())); } - updating_scroll = false; + + main->first_invalid_line.store(main->lines.size()); + main->first_resized_line.store(main->lines.size()); + main->first_invalid_font_line.store(main->lines.size()); if (fit_content_height) { update_minimum_size(); } + emit_signal(SNAME("finished")); } void RichTextLabel::_invalidate_current_line(ItemFrame *p_frame) { - if (p_frame->lines.size() - 1 <= p_frame->first_invalid_line) { - p_frame->first_invalid_line = p_frame->lines.size() - 1; - update(); + if ((int)p_frame->lines.size() - 1 <= p_frame->first_invalid_line) { + p_frame->first_invalid_line = (int)p_frame->lines.size() - 1; } } void RichTextLabel::add_text(const String &p_text) { + _stop_thread(); + MutexLock data_lock(data_mutex); + if (current->type == ITEM_TABLE) { return; //can't add anything here } @@ -2564,13 +2673,14 @@ void RichTextLabel::add_text(const String &p_text) { _add_item(item, false); current_frame->lines.resize(current_frame->lines.size() + 1); if (item->type != ITEM_NEWLINE) { - current_frame->lines.write[current_frame->lines.size() - 1].from = item; + current_frame->lines[current_frame->lines.size() - 1].from = item; } _invalidate_current_line(current_frame); } pos = end + 1; } + update(); } void RichTextLabel::_add_item(Item *p_item, bool p_enter, bool p_ensure_newline) { @@ -2599,7 +2709,7 @@ void RichTextLabel::_add_item(Item *p_item, bool p_enter, bool p_ensure_newline) } if (current_frame->lines[current_frame->lines.size() - 1].from == nullptr) { - current_frame->lines.write[current_frame->lines.size() - 1].from = p_item; + current_frame->lines[current_frame->lines.size() - 1].from = p_item; } p_item->line = current_frame->lines.size() - 1; @@ -2608,6 +2718,7 @@ void RichTextLabel::_add_item(Item *p_item, bool p_enter, bool p_ensure_newline) if (fixed_width != -1) { update_minimum_size(); } + update(); } void RichTextLabel::_remove_item(Item *p_item, const int p_line, const int p_subitem_line) { @@ -2635,6 +2746,9 @@ void RichTextLabel::_remove_item(Item *p_item, const int p_line, const int p_sub } void RichTextLabel::add_image(const Ref<Texture2D> &p_image, const int p_width, const int p_height, const Color &p_color, InlineAlignment p_alignment) { + _stop_thread(); + MutexLock data_lock(data_mutex); + if (current->type == ITEM_TABLE) { return; } @@ -2674,6 +2788,9 @@ void RichTextLabel::add_image(const Ref<Texture2D> &p_image, const int p_width, } void RichTextLabel::add_newline() { + _stop_thread(); + MutexLock data_lock(data_mutex); + if (current->type == ITEM_TABLE) { return; } @@ -2682,10 +2799,14 @@ void RichTextLabel::add_newline() { _add_item(item, false); current_frame->lines.resize(current_frame->lines.size() + 1); _invalidate_current_line(current_frame); + update(); } bool RichTextLabel::remove_line(const int p_line) { - if (p_line >= current_frame->lines.size() || p_line < 0) { + _stop_thread(); + MutexLock data_lock(data_mutex); + + if (p_line >= (int)current_frame->lines.size() || p_line < 0) { return false; } @@ -2713,16 +2834,19 @@ bool RichTextLabel::remove_line(const int p_line) { } if (p_line == 0 && current->subitems.size() > 0) { - main->lines.write[0].from = main; + main->lines[0].from = main; } - main->first_invalid_line = 0; // p_line ??? + main->first_invalid_line.store(0); update(); return true; } void RichTextLabel::push_dropcap(const String &p_string, const Ref<Font> &p_font, int p_size, const Rect2 &p_dropcap_margins, const Color &p_color, int p_ol_size, const Color &p_ol_color) { + _stop_thread(); + MutexLock data_lock(data_mutex); + ERR_FAIL_COND(current->type == ITEM_TABLE); ERR_FAIL_COND(p_string.is_empty()); ERR_FAIL_COND(p_font.is_null()); @@ -2741,6 +2865,9 @@ void RichTextLabel::push_dropcap(const String &p_string, const Ref<Font> &p_font } void RichTextLabel::push_font(const Ref<Font> &p_font) { + _stop_thread(); + MutexLock data_lock(data_mutex); + ERR_FAIL_COND(current->type == ITEM_TABLE); ERR_FAIL_COND(p_font.is_null()); ItemFont *item = memnew(ItemFont); @@ -2785,6 +2912,9 @@ void RichTextLabel::push_mono() { } void RichTextLabel::push_font_size(int p_font_size) { + _stop_thread(); + MutexLock data_lock(data_mutex); + ERR_FAIL_COND(current->type == ITEM_TABLE); ItemFontSize *item = memnew(ItemFontSize); @@ -2793,6 +2923,9 @@ void RichTextLabel::push_font_size(int p_font_size) { } void RichTextLabel::push_font_features(const Dictionary &p_features) { + _stop_thread(); + MutexLock data_lock(data_mutex); + ERR_FAIL_COND(current->type == ITEM_TABLE); ItemFontFeatures *item = memnew(ItemFontFeatures); @@ -2801,6 +2934,9 @@ void RichTextLabel::push_font_features(const Dictionary &p_features) { } void RichTextLabel::push_outline_size(int p_font_size) { + _stop_thread(); + MutexLock data_lock(data_mutex); + ERR_FAIL_COND(current->type == ITEM_TABLE); ItemOutlineSize *item = memnew(ItemOutlineSize); @@ -2809,6 +2945,9 @@ void RichTextLabel::push_outline_size(int p_font_size) { } void RichTextLabel::push_color(const Color &p_color) { + _stop_thread(); + MutexLock data_lock(data_mutex); + ERR_FAIL_COND(current->type == ITEM_TABLE); ItemColor *item = memnew(ItemColor); @@ -2817,6 +2956,9 @@ void RichTextLabel::push_color(const Color &p_color) { } void RichTextLabel::push_outline_color(const Color &p_color) { + _stop_thread(); + MutexLock data_lock(data_mutex); + ERR_FAIL_COND(current->type == ITEM_TABLE); ItemOutlineColor *item = memnew(ItemOutlineColor); @@ -2825,6 +2967,9 @@ void RichTextLabel::push_outline_color(const Color &p_color) { } void RichTextLabel::push_underline() { + _stop_thread(); + MutexLock data_lock(data_mutex); + ERR_FAIL_COND(current->type == ITEM_TABLE); ItemUnderline *item = memnew(ItemUnderline); @@ -2832,6 +2977,9 @@ void RichTextLabel::push_underline() { } void RichTextLabel::push_strikethrough() { + _stop_thread(); + MutexLock data_lock(data_mutex); + ERR_FAIL_COND(current->type == ITEM_TABLE); ItemStrikethrough *item = memnew(ItemStrikethrough); @@ -2839,6 +2987,9 @@ void RichTextLabel::push_strikethrough() { } void RichTextLabel::push_paragraph(HorizontalAlignment p_alignment, Control::TextDirection p_direction, const String &p_language, TextServer::StructuredTextParser p_st_parser) { + _stop_thread(); + MutexLock data_lock(data_mutex); + ERR_FAIL_COND(current->type == ITEM_TABLE); ItemParagraph *item = memnew(ItemParagraph); @@ -2850,6 +3001,9 @@ void RichTextLabel::push_paragraph(HorizontalAlignment p_alignment, Control::Tex } void RichTextLabel::push_indent(int p_level) { + _stop_thread(); + MutexLock data_lock(data_mutex); + ERR_FAIL_COND(current->type == ITEM_TABLE); ERR_FAIL_COND(p_level < 0); @@ -2859,6 +3013,9 @@ void RichTextLabel::push_indent(int p_level) { } void RichTextLabel::push_list(int p_level, ListType p_list, bool p_capitalize) { + _stop_thread(); + MutexLock data_lock(data_mutex); + ERR_FAIL_COND(current->type == ITEM_TABLE); ERR_FAIL_COND(p_level < 0); @@ -2871,6 +3028,9 @@ void RichTextLabel::push_list(int p_level, ListType p_list, bool p_capitalize) { } void RichTextLabel::push_meta(const Variant &p_meta) { + _stop_thread(); + MutexLock data_lock(data_mutex); + ERR_FAIL_COND(current->type == ITEM_TABLE); ItemMeta *item = memnew(ItemMeta); @@ -2879,6 +3039,9 @@ void RichTextLabel::push_meta(const Variant &p_meta) { } void RichTextLabel::push_hint(const String &p_string) { + _stop_thread(); + MutexLock data_lock(data_mutex); + ERR_FAIL_COND(current->type == ITEM_TABLE); ItemHint *item = memnew(ItemHint); @@ -2887,20 +3050,26 @@ void RichTextLabel::push_hint(const String &p_string) { } void RichTextLabel::push_table(int p_columns, InlineAlignment p_alignment) { + _stop_thread(); + MutexLock data_lock(data_mutex); + ERR_FAIL_COND(p_columns < 1); ItemTable *item = memnew(ItemTable); item->columns.resize(p_columns); item->total_width = 0; item->inline_align = p_alignment; - for (int i = 0; i < item->columns.size(); i++) { - item->columns.write[i].expand = false; - item->columns.write[i].expand_ratio = 1; + for (int i = 0; i < (int)item->columns.size(); i++) { + item->columns[i].expand = false; + item->columns[i].expand_ratio = 1; } _add_item(item, true, false); } void RichTextLabel::push_fade(int p_start_index, int p_length) { + _stop_thread(); + MutexLock data_lock(data_mutex); + ItemFade *item = memnew(ItemFade); item->starting_index = p_start_index; item->length = p_length; @@ -2908,6 +3077,9 @@ void RichTextLabel::push_fade(int p_start_index, int p_length) { } void RichTextLabel::push_shake(int p_strength = 10, float p_rate = 24.0f) { + _stop_thread(); + MutexLock data_lock(data_mutex); + ItemShake *item = memnew(ItemShake); item->strength = p_strength; item->rate = p_rate; @@ -2915,6 +3087,9 @@ void RichTextLabel::push_shake(int p_strength = 10, float p_rate = 24.0f) { } void RichTextLabel::push_wave(float p_frequency = 1.0f, float p_amplitude = 10.0f) { + _stop_thread(); + MutexLock data_lock(data_mutex); + ItemWave *item = memnew(ItemWave); item->frequency = p_frequency; item->amplitude = p_amplitude; @@ -2922,6 +3097,9 @@ void RichTextLabel::push_wave(float p_frequency = 1.0f, float p_amplitude = 10.0 } void RichTextLabel::push_tornado(float p_frequency = 1.0f, float p_radius = 10.0f) { + _stop_thread(); + MutexLock data_lock(data_mutex); + ItemTornado *item = memnew(ItemTornado); item->frequency = p_frequency; item->radius = p_radius; @@ -2929,6 +3107,9 @@ void RichTextLabel::push_tornado(float p_frequency = 1.0f, float p_radius = 10.0 } void RichTextLabel::push_rainbow(float p_saturation, float p_value, float p_frequency) { + _stop_thread(); + MutexLock data_lock(data_mutex); + ItemRainbow *item = memnew(ItemRainbow); item->frequency = p_frequency; item->saturation = p_saturation; @@ -2937,6 +3118,9 @@ void RichTextLabel::push_rainbow(float p_saturation, float p_value, float p_freq } void RichTextLabel::push_bgcolor(const Color &p_color) { + _stop_thread(); + MutexLock data_lock(data_mutex); + ERR_FAIL_COND(current->type == ITEM_TABLE); ItemBGColor *item = memnew(ItemBGColor); @@ -2945,6 +3129,9 @@ void RichTextLabel::push_bgcolor(const Color &p_color) { } void RichTextLabel::push_fgcolor(const Color &p_color) { + _stop_thread(); + MutexLock data_lock(data_mutex); + ERR_FAIL_COND(current->type == ITEM_TABLE); ItemFGColor *item = memnew(ItemFGColor); @@ -2953,6 +3140,9 @@ void RichTextLabel::push_fgcolor(const Color &p_color) { } void RichTextLabel::push_customfx(Ref<RichTextEffect> p_custom_effect, Dictionary p_environment) { + _stop_thread(); + MutexLock data_lock(data_mutex); + ItemCustomFX *item = memnew(ItemCustomFX); item->custom_effect = p_custom_effect; item->char_fx_transform->environment = p_environment; @@ -2960,15 +3150,23 @@ void RichTextLabel::push_customfx(Ref<RichTextEffect> p_custom_effect, Dictionar } void RichTextLabel::set_table_column_expand(int p_column, bool p_expand, int p_ratio) { + _stop_thread(); + MutexLock data_lock(data_mutex); + ERR_FAIL_COND(current->type != ITEM_TABLE); + ItemTable *table = static_cast<ItemTable *>(current); - ERR_FAIL_INDEX(p_column, table->columns.size()); - table->columns.write[p_column].expand = p_expand; - table->columns.write[p_column].expand_ratio = p_ratio; + ERR_FAIL_INDEX(p_column, (int)table->columns.size()); + table->columns[p_column].expand = p_expand; + table->columns[p_column].expand_ratio = p_ratio; } void RichTextLabel::set_cell_row_background_color(const Color &p_odd_row_bg, const Color &p_even_row_bg) { + _stop_thread(); + MutexLock data_lock(data_mutex); + ERR_FAIL_COND(current->type != ITEM_FRAME); + ItemFrame *cell = static_cast<ItemFrame *>(current); ERR_FAIL_COND(!cell->cell); cell->odd_row_bg = p_odd_row_bg; @@ -2976,14 +3174,22 @@ void RichTextLabel::set_cell_row_background_color(const Color &p_odd_row_bg, con } void RichTextLabel::set_cell_border_color(const Color &p_color) { + _stop_thread(); + MutexLock data_lock(data_mutex); + ERR_FAIL_COND(current->type != ITEM_FRAME); + ItemFrame *cell = static_cast<ItemFrame *>(current); ERR_FAIL_COND(!cell->cell); cell->border = p_color; } void RichTextLabel::set_cell_size_override(const Size2 &p_min_size, const Size2 &p_max_size) { + _stop_thread(); + MutexLock data_lock(data_mutex); + ERR_FAIL_COND(current->type != ITEM_FRAME); + ItemFrame *cell = static_cast<ItemFrame *>(current); ERR_FAIL_COND(!cell->cell); cell->min_size_over = p_min_size; @@ -2991,13 +3197,20 @@ void RichTextLabel::set_cell_size_override(const Size2 &p_min_size, const Size2 } void RichTextLabel::set_cell_padding(const Rect2 &p_padding) { + _stop_thread(); + MutexLock data_lock(data_mutex); + ERR_FAIL_COND(current->type != ITEM_FRAME); + ItemFrame *cell = static_cast<ItemFrame *>(current); ERR_FAIL_COND(!cell->cell); cell->padding = p_padding; } void RichTextLabel::push_cell() { + _stop_thread(); + MutexLock data_lock(data_mutex); + ERR_FAIL_COND(current->type != ITEM_TABLE); ItemFrame *item = memnew(ItemFrame); @@ -3006,20 +3219,23 @@ void RichTextLabel::push_cell() { current_frame = item; item->cell = true; item->lines.resize(1); - item->lines.write[0].from = nullptr; - item->first_invalid_line = 0; // parent frame last line ??? + item->lines[0].from = nullptr; + item->first_invalid_line.store(0); // parent frame last line ??? } int RichTextLabel::get_current_table_column() const { ERR_FAIL_COND_V(current->type != ITEM_TABLE, -1); ItemTable *table = static_cast<ItemTable *>(current); - return table->subitems.size() % table->columns.size(); } void RichTextLabel::pop() { + _stop_thread(); + MutexLock data_lock(data_mutex); + ERR_FAIL_COND(!current->parent); + if (current->type == ITEM_FRAME) { current_frame = static_cast<ItemFrame *>(current)->parent_frame; } @@ -3027,12 +3243,15 @@ void RichTextLabel::pop() { } void RichTextLabel::clear() { + _stop_thread(); + MutexLock data_lock(data_mutex); + main->_clear_children(); current = main; current_frame = main; main->lines.clear(); main->lines.resize(1); - main->first_invalid_line = 0; + main->first_invalid_line.store(0); selection.click_frame = nullptr; selection.click_item = nullptr; @@ -3050,8 +3269,10 @@ void RichTextLabel::clear() { } void RichTextLabel::set_tab_size(int p_spaces) { + _stop_thread(); + tab_size = p_spaces; - main->first_resized_line = 0; + main->first_resized_line.store(0); update(); } @@ -3131,6 +3352,9 @@ void RichTextLabel::parse_bbcode(const String &p_bbcode) { } void RichTextLabel::append_text(const String &p_bbcode) { + _stop_thread(); + MutexLock data_lock(data_mutex); + int pos = 0; List<String> tag_stack; @@ -3871,9 +4095,13 @@ void RichTextLabel::append_text(const String &p_bbcode) { } void RichTextLabel::scroll_to_paragraph(int p_paragraph) { - ERR_FAIL_INDEX(p_paragraph, main->lines.size()); - _validate_line_caches(main); - vscroll->set_value(main->lines[p_paragraph].offset.y); + if (p_paragraph <= 0) { + vscroll->set_value(0); + } else if (p_paragraph >= main->first_invalid_line.load()) { + vscroll->set_value(vscroll->get_max()); + } else { + vscroll->set_value(main->lines[p_paragraph].offset.y); + } } int RichTextLabel::get_paragraph_count() const { @@ -3888,10 +4116,14 @@ int RichTextLabel::get_visible_paragraph_count() const { } void RichTextLabel::scroll_to_line(int p_line) { - _validate_line_caches(main); - + if (p_line <= 0) { + vscroll->set_value(0); + return; + } int line_count = 0; - for (int i = 0; i < main->lines.size(); i++) { + int to_line = main->first_invalid_line.load(); + for (int i = 0; i < to_line; i++) { + MutexLock lock(main->lines[i].text_buf->get_mutex()); if ((line_count <= p_line) && (line_count + main->lines[i].text_buf->get_line_count() >= p_line)) { float line_offset = 0.f; for (int j = 0; j < p_line - line_count; j++) { @@ -3902,11 +4134,14 @@ void RichTextLabel::scroll_to_line(int p_line) { } line_count += main->lines[i].text_buf->get_line_count(); } + vscroll->set_value(vscroll->get_max()); } float RichTextLabel::get_line_offset(int p_line) { int line_count = 0; - for (int i = 0; i < main->lines.size(); i++) { + int to_line = main->first_invalid_line.load(); + for (int i = 0; i < to_line; i++) { + MutexLock lock(main->lines[i].text_buf->get_mutex()); if ((line_count <= p_line) && (p_line <= line_count + main->lines[i].text_buf->get_line_count())) { float line_offset = 0.f; for (int j = 0; j < p_line - line_count; j++) { @@ -3920,7 +4155,8 @@ float RichTextLabel::get_line_offset(int p_line) { } float RichTextLabel::get_paragraph_offset(int p_paragraph) { - if (0 <= p_paragraph && p_paragraph < main->lines.size()) { + int to_line = main->first_invalid_line.load(); + if (0 <= p_paragraph && p_paragraph < to_line) { return main->lines[p_paragraph].offset.y; } return 0; @@ -3928,7 +4164,9 @@ float RichTextLabel::get_paragraph_offset(int p_paragraph) { int RichTextLabel::get_line_count() const { int line_count = 0; - for (int i = 0; i < main->lines.size(); i++) { + int to_line = main->first_invalid_line.load(); + for (int i = 0; i < to_line; i++) { + MutexLock lock(main->lines[i].text_buf->get_mutex()); line_count += main->lines[i].text_buf->get_line_count(); } return line_count; @@ -3989,13 +4227,13 @@ bool RichTextLabel::_search_table(ItemTable *p_table, List<Item *>::Element *p_f ERR_CONTINUE(E->get()->type != ITEM_FRAME); // Children should all be frames. ItemFrame *frame = static_cast<ItemFrame *>(E->get()); if (p_reverse_search) { - for (int i = frame->lines.size() - 1; i >= 0; i--) { + for (int i = (int)frame->lines.size() - 1; i >= 0; i--) { if (_search_line(frame, i, p_string, -1, p_reverse_search)) { return true; } } } else { - for (int i = 0; i < frame->lines.size(); i++) { + for (int i = 0; i < (int)frame->lines.size(); i++) { if (_search_line(frame, i, p_string, 0, p_reverse_search)) { return true; } @@ -4008,12 +4246,12 @@ bool RichTextLabel::_search_table(ItemTable *p_table, List<Item *>::Element *p_f bool RichTextLabel::_search_line(ItemFrame *p_frame, int p_line, const String &p_string, int p_char_idx, bool p_reverse_search) { ERR_FAIL_COND_V(p_frame == nullptr, false); - ERR_FAIL_COND_V(p_line < 0 || p_line >= p_frame->lines.size(), false); + ERR_FAIL_COND_V(p_line < 0 || p_line >= (int)p_frame->lines.size(), false); - Line &l = p_frame->lines.write[p_line]; + Line &l = p_frame->lines[p_line]; String text; - Item *it_to = (p_line + 1 < p_frame->lines.size()) ? p_frame->lines[p_line + 1].from : nullptr; + Item *it_to = (p_line + 1 < (int)p_frame->lines.size()) ? p_frame->lines[p_line + 1].from : nullptr; for (Item *it = l.from; it && it != it_to; it = _get_next_item(it)) { switch (it->type) { case ITEM_NEWLINE: { @@ -4071,7 +4309,8 @@ bool RichTextLabel::search(const String &p_string, bool p_from_selection, bool p int char_idx = p_search_previous ? -1 : 0; int current_line = 0; - int ending_line = main->lines.size() - 1; + int to_line = main->first_invalid_line.load(); + int ending_line = to_line - 1; if (p_from_selection && selection.active) { // First check to see if other results exist in current line char_idx = p_search_previous ? selection.from_char - 1 : selection.to_char; @@ -4120,8 +4359,8 @@ bool RichTextLabel::search(const String &p_string, bool p_from_selection, bool p while (current_line != ending_line) { // Wrap around if (current_line < 0) { - current_line = main->lines.size() - 1; - } else if (current_line >= main->lines.size()) { + current_line = to_line - 1; + } else if (current_line >= to_line) { current_line = 0; } @@ -4143,12 +4382,13 @@ bool RichTextLabel::search(const String &p_string, bool p_from_selection, bool p String RichTextLabel::_get_line_text(ItemFrame *p_frame, int p_line, Selection p_selection) const { String text; + ERR_FAIL_COND_V(p_frame == nullptr, text); - ERR_FAIL_COND_V(p_line < 0 || p_line >= p_frame->lines.size(), text); + ERR_FAIL_COND_V(p_line < 0 || p_line >= (int)p_frame->lines.size(), text); - Line &l = p_frame->lines.write[p_line]; + Line &l = p_frame->lines[p_line]; - Item *it_to = (p_line + 1 < p_frame->lines.size()) ? p_frame->lines[p_line + 1].from : nullptr; + Item *it_to = (p_line + 1 < (int)p_frame->lines.size()) ? p_frame->lines[p_line + 1].from : nullptr; int end_idx = 0; if (it_to != nullptr) { end_idx = it_to->index; @@ -4163,7 +4403,7 @@ String RichTextLabel::_get_line_text(ItemFrame *p_frame, int p_line, Selection p for (Item *E : table->subitems) { ERR_CONTINUE(E->type != ITEM_FRAME); // Children should all be frames. ItemFrame *frame = static_cast<ItemFrame *>(E); - for (int i = 0; i < frame->lines.size(); i++) { + for (int i = 0; i < (int)frame->lines.size(); i++) { text += _get_line_text(frame, i, p_selection); } } @@ -4227,7 +4467,8 @@ String RichTextLabel::get_selected_text() const { } String text; - for (int i = 0; i < main->lines.size(); i++) { + int to_line = main->first_invalid_line.load(); + for (int i = 0; i < to_line; i++) { text += _get_line_text(main, i, selection); } return text; @@ -4368,19 +4609,23 @@ String RichTextLabel::get_parsed_text() const { void RichTextLabel::set_text_direction(Control::TextDirection p_text_direction) { ERR_FAIL_COND((int)p_text_direction < -1 || (int)p_text_direction > 3); + _stop_thread(); + if (text_direction != p_text_direction) { text_direction = p_text_direction; - main->first_invalid_line = 0; //invalidate ALL - _validate_line_caches(main); + main->first_invalid_line.store(0); //invalidate ALL + _validate_line_caches(); update(); } } void RichTextLabel::set_structured_text_bidi_override(TextServer::StructuredTextParser p_parser) { if (st_parser != p_parser) { + _stop_thread(); + st_parser = p_parser; - main->first_invalid_line = 0; //invalidate ALL - _validate_line_caches(main); + main->first_invalid_line.store(0); //invalidate ALL + _validate_line_caches(); update(); } } @@ -4390,10 +4635,14 @@ TextServer::StructuredTextParser RichTextLabel::get_structured_text_bidi_overrid } void RichTextLabel::set_structured_text_bidi_override_options(Array p_args) { - st_args = p_args; - main->first_invalid_line = 0; //invalidate ALL - _validate_line_caches(main); - update(); + if (st_args != p_args) { + _stop_thread(); + + st_args = p_args; + main->first_invalid_line.store(0); //invalidate ALL + _validate_line_caches(); + update(); + } } Array RichTextLabel::get_structured_text_bidi_override_options() const { @@ -4406,9 +4655,11 @@ Control::TextDirection RichTextLabel::get_text_direction() const { void RichTextLabel::set_language(const String &p_language) { if (language != p_language) { + _stop_thread(); + language = p_language; - main->first_invalid_line = 0; //invalidate ALL - _validate_line_caches(main); + main->first_invalid_line.store(0); //invalidate ALL + _validate_line_caches(); update(); } } @@ -4419,9 +4670,11 @@ String RichTextLabel::get_language() const { void RichTextLabel::set_autowrap_mode(RichTextLabel::AutowrapMode p_mode) { if (autowrap_mode != p_mode) { + _stop_thread(); + autowrap_mode = p_mode; main->first_invalid_line = 0; //invalidate ALL - _validate_line_caches(main); + _validate_line_caches(); update(); } } @@ -4432,6 +4685,8 @@ RichTextLabel::AutowrapMode RichTextLabel::get_autowrap_mode() const { void RichTextLabel::set_percent_visible(float p_percent) { if (percent_visible != p_percent) { + _stop_thread(); + if (p_percent < 0 || p_percent >= 1) { visible_characters = -1; percent_visible = 1; @@ -4440,8 +4695,8 @@ void RichTextLabel::set_percent_visible(float p_percent) { percent_visible = p_percent; } if (visible_chars_behavior == VC_CHARS_BEFORE_SHAPING) { - main->first_invalid_line = 0; //invalidate ALL - _validate_line_caches(main); + main->first_invalid_line.store(0); //invalidate ALL + _validate_line_caches(); } update(); } @@ -4476,15 +4731,19 @@ void RichTextLabel::install_effect(const Variant effect) { int RichTextLabel::get_content_height() const { int total_height = 0; - if (main->lines.size()) { - total_height = main->lines[main->lines.size() - 1].offset.y + main->lines[main->lines.size() - 1].text_buf->get_size().y + main->lines[main->lines.size() - 1].text_buf->get_line_count() * get_theme_constant(SNAME("line_separation")); + int to_line = main->first_invalid_line.load(); + if (to_line) { + MutexLock lock(main->lines[to_line - 1].text_buf->get_mutex()); + total_height = main->lines[to_line - 1].offset.y + main->lines[to_line - 1].text_buf->get_size().y + main->lines[to_line - 1].text_buf->get_line_count() * get_theme_constant(SNAME("line_separation")); } return total_height; } int RichTextLabel::get_content_width() const { int total_width = 0; - for (int i = 0; i < main->lines.size(); i++) { + int to_line = main->first_invalid_line.load(); + for (int i = 0; i < to_line; i++) { + MutexLock lock(main->lines[i].text_buf->get_mutex()); total_width = MAX(total_width, main->lines[i].offset.x + main->lines[i].text_buf->get_size().x); } return total_width; @@ -4603,6 +4862,14 @@ void RichTextLabel::_bind_methods() { ClassDB::bind_method(D_METHOD("get_text"), &RichTextLabel::get_text); + ClassDB::bind_method(D_METHOD("is_ready"), &RichTextLabel::is_ready); + + ClassDB::bind_method(D_METHOD("set_threaded", "threaded"), &RichTextLabel::set_threaded); + ClassDB::bind_method(D_METHOD("is_threaded"), &RichTextLabel::is_threaded); + + ClassDB::bind_method(D_METHOD("set_progress_bar_delay", "delay_ms"), &RichTextLabel::set_progress_bar_delay); + ClassDB::bind_method(D_METHOD("get_progress_bar_delay"), &RichTextLabel::get_progress_bar_delay); + ClassDB::bind_method(D_METHOD("set_visible_characters", "amount"), &RichTextLabel::set_visible_characters); ClassDB::bind_method(D_METHOD("get_visible_characters"), &RichTextLabel::get_visible_characters); @@ -4643,6 +4910,9 @@ void RichTextLabel::_bind_methods() { // Note: set "bbcode_enabled" first, to avoid unnecessary "text" resets. ADD_PROPERTY(PropertyInfo(Variant::BOOL, "bbcode_enabled"), "set_use_bbcode", "is_using_bbcode"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "threaded"), "set_threaded", "is_threaded"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "progress_bar_delay"), "set_progress_bar_delay", "get_progress_bar_delay"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "tab_size", PROPERTY_HINT_RANGE, "0,24,1"), "set_tab_size", "get_tab_size"); ADD_PROPERTY(PropertyInfo(Variant::STRING, "text", PROPERTY_HINT_MULTILINE_TEXT), "set_text", "get_text"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "fit_content_height"), "set_fit_content_height", "is_fit_content_height_enabled"); @@ -4676,6 +4946,8 @@ void RichTextLabel::_bind_methods() { ADD_SIGNAL(MethodInfo("meta_hover_started", PropertyInfo(Variant::NIL, "meta", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NIL_IS_VARIANT))); ADD_SIGNAL(MethodInfo("meta_hover_ended", PropertyInfo(Variant::NIL, "meta", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NIL_IS_VARIANT))); + ADD_SIGNAL(MethodInfo("finished")); + BIND_ENUM_CONSTANT(AUTOWRAP_OFF); BIND_ENUM_CONSTANT(AUTOWRAP_ARBITRARY); BIND_ENUM_CONSTANT(AUTOWRAP_WORD); @@ -4727,15 +4999,19 @@ RichTextLabel::VisibleCharactersBehavior RichTextLabel::get_visible_characters_b void RichTextLabel::set_visible_characters_behavior(RichTextLabel::VisibleCharactersBehavior p_behavior) { if (visible_chars_behavior != p_behavior) { + _stop_thread(); + visible_chars_behavior = p_behavior; - main->first_invalid_line = 0; //invalidate ALL - _validate_line_caches(main); + main->first_invalid_line.store(0); //invalidate ALL + _validate_line_caches(); update(); } } void RichTextLabel::set_visible_characters(int p_visible) { if (visible_characters != p_visible) { + _stop_thread(); + visible_characters = p_visible; if (p_visible == -1) { percent_visible = 1; @@ -4746,8 +5022,8 @@ void RichTextLabel::set_visible_characters(int p_visible) { } } if (visible_chars_behavior == VC_CHARS_BEFORE_SHAPING) { - main->first_invalid_line = 0; //invalidate ALL - _validate_line_caches(main); + main->first_invalid_line.store(0); //invalidate ALL + _validate_line_caches(); } update(); } @@ -4759,7 +5035,9 @@ int RichTextLabel::get_visible_characters() const { int RichTextLabel::get_character_line(int p_char) { int line_count = 0; - for (int i = 0; i < main->lines.size(); i++) { + int to_line = main->first_invalid_line.load(); + for (int i = 0; i < to_line; i++) { + MutexLock lock(main->lines[i].text_buf->get_mutex()); if (main->lines[i].char_offset < p_char && p_char <= main->lines[i].char_offset + main->lines[i].char_count) { for (int j = 0; j < main->lines[i].text_buf->get_line_count(); j++) { Vector2i range = main->lines[i].text_buf->get_line_range(j); @@ -4777,7 +5055,8 @@ int RichTextLabel::get_character_line(int p_char) { int RichTextLabel::get_character_paragraph(int p_char) { int para_count = 0; - for (int i = 0; i < main->lines.size(); i++) { + int to_line = main->first_invalid_line.load(); + for (int i = 0; i < to_line; i++) { if (main->lines[i].char_offset < p_char && p_char <= main->lines[i].char_offset + main->lines[i].char_count) { return para_count; } else { @@ -4802,7 +5081,6 @@ int RichTextLabel::get_total_character_count() const { } it = _get_next_item(it, true); } - return tc; } @@ -4812,7 +5090,8 @@ int RichTextLabel::get_total_glyph_count() const { while (it) { if (it->type == ITEM_FRAME) { ItemFrame *f = static_cast<ItemFrame *>(it); - for (int i = 0; i < f->lines.size(); i++) { + for (int i = 0; i < (int)f->lines.size(); i++) { + MutexLock lock(f->lines[i].text_buf->get_mutex()); tg += TS->shaped_text_get_glyph_count(f->lines[i].text_buf->get_rid()); } } @@ -4836,7 +5115,6 @@ Size2 RichTextLabel::get_minimum_size() const { } if (fit_content_height) { - const_cast<RichTextLabel *>(this)->_validate_line_caches(main); size.y += get_content_height(); } @@ -5034,10 +5312,10 @@ RichTextLabel::RichTextLabel(const String &p_text) { main->index = 0; current = main; main->lines.resize(1); - main->lines.write[0].from = main; - main->first_invalid_line = 0; - main->first_resized_line = 0; - main->first_invalid_font_line = 0; + main->lines[0].from = main; + main->first_invalid_line.store(0); + main->first_resized_line.store(0); + main->first_invalid_font_line.store(0); current_frame = main; vscroll = memnew(VScrollBar); @@ -5052,10 +5330,13 @@ RichTextLabel::RichTextLabel(const String &p_text) { vscroll->hide(); set_text(p_text); + updating.store(false); + stop_thread.store(false); set_clip_contents(true); } RichTextLabel::~RichTextLabel() { + _stop_thread(); memdelete(main); } diff --git a/scene/gui/rich_text_label.h b/scene/gui/rich_text_label.h index c6d0d0875d..7fbd5f1745 100644 --- a/scene/gui/rich_text_label.h +++ b/scene/gui/rich_text_label.h @@ -141,10 +141,10 @@ private: struct ItemFrame : public Item { bool cell = false; - Vector<Line> lines; - int first_invalid_line = 0; - int first_invalid_font_line = 0; - int first_resized_line = 0; + LocalVector<Line> lines; + std::atomic<int> first_invalid_line; + std::atomic<int> first_invalid_font_line; + std::atomic<int> first_resized_line; ItemFrame *parent_frame = nullptr; @@ -155,7 +155,12 @@ private: Size2 max_size_over = Size2(-1, -1); Rect2 padding; - ItemFrame() { type = ITEM_FRAME; } + ItemFrame() { + type = ITEM_FRAME; + first_invalid_line.store(0); + first_invalid_font_line.store(0); + first_resized_line.store(0); + } }; struct ItemText : public Item { @@ -263,8 +268,8 @@ private: int width = 0; }; - Vector<Column> columns; - Vector<float> rows; + LocalVector<Column> columns; + LocalVector<float> rows; int total_width = 0; int total_height = 0; @@ -363,6 +368,16 @@ private: Item *current = nullptr; ItemFrame *current_frame = nullptr; + Thread thread; + Mutex data_mutex; + bool threaded = false; + std::atomic<bool> stop_thread; + std::atomic<bool> updating; + std::atomic<double> loaded; + + uint64_t loading_started = 0; + int progress_delay = 1000; + VScrollBar *vscroll = nullptr; AutowrapMode autowrap_mode = AUTOWRAP_WORD_SMART; @@ -392,7 +407,11 @@ private: Array custom_effects; void _invalidate_current_line(ItemFrame *p_frame); - void _validate_line_caches(ItemFrame *p_frame); + + static void _thread_function(void *self); + void _stop_thread(); + bool _validate_line_caches(); + void _process_line_caches(); void _add_item(Item *p_item, bool p_enter = false, bool p_ensure_newline = false); void _remove_item(Item *p_item, const int p_line, const int p_subitem_line); @@ -446,8 +465,9 @@ private: bool _search_line(ItemFrame *p_frame, int p_line, const String &p_string, int p_char_idx, bool p_reverse_search); bool _search_table(ItemTable *p_table, List<Item *>::Element *p_from, const String &p_string, bool p_reverse_search); - void _shape_line(ItemFrame *p_frame, int p_line, const Ref<Font> &p_base_font, int p_base_font_size, int p_width, int *r_char_offset); - void _resize_line(ItemFrame *p_frame, int p_line, const Ref<Font> &p_base_font, int p_base_font_size, int p_width); + float _shape_line(ItemFrame *p_frame, int p_line, const Ref<Font> &p_base_font, int p_base_font_size, int p_width, float p_h, int *r_char_offset); + float _resize_line(ItemFrame *p_frame, int p_line, const Ref<Font> &p_base_font, int p_base_font_size, int p_width, float p_h); + void _update_line_font(ItemFrame *p_frame, int p_line, const Ref<Font> &p_base_font, int p_base_font_size); int _draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_ofs, int p_width, const Color &p_base_color, int p_outline_size, const Color &p_outline_color, const Color &p_font_shadow_color, int p_shadow_outline_size, const Point2 &p_shadow_ofs, int &r_processed_glyphs); float _find_click_in_line(ItemFrame *p_frame, int p_line, const Vector2 &p_ofs, int p_width, const Point2i &p_click, ItemFrame **r_click_frame = nullptr, int *r_click_line = nullptr, Item **r_click_item = nullptr, int *r_click_char = nullptr, bool p_table = false); @@ -480,9 +500,9 @@ private: bool _find_layout_subitem(Item *from, Item *to); void _fetch_item_fx_stack(Item *p_item, Vector<ItemFX *> &r_stack); - void _update_scroll(); void _update_fx(ItemFrame *p_frame, double p_delta_time); void _scroll_changed(double); + int _find_first_line(int p_from, int p_to, int p_vofs) const; virtual void gui_input(const Ref<InputEvent> &p_event) override; virtual String get_tooltip(const Point2 &p_pos) const override; @@ -611,6 +631,14 @@ public: bool is_deselect_on_focus_loss_enabled() const; void deselect(); + bool is_ready() const; + + void set_threaded(bool p_threaded); + bool is_threaded() const; + + void set_progress_bar_delay(int p_delay_ms); + int get_progress_bar_delay() const; + // Context menu. PopupMenu *get_menu() const; bool is_menu_visible() const; diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp index 315ffbd419..050c510a96 100644 --- a/scene/gui/text_edit.cpp +++ b/scene/gui/text_edit.cpp @@ -4756,9 +4756,7 @@ void TextEdit::add_gutter(int p_at) { gutters.insert(p_at, GutterInfo()); } - for (int i = 0; i < text.size() + 1; i++) { - text.add_gutter(p_at); - } + text.add_gutter(p_at); emit_signal(SNAME("gutter_added")); update(); } @@ -4768,9 +4766,7 @@ void TextEdit::remove_gutter(int p_gutter) { gutters.remove_at(p_gutter); - for (int i = 0; i < text.size() + 1; i++) { - text.remove_gutter(p_gutter); - } + text.remove_gutter(p_gutter); emit_signal(SNAME("gutter_removed")); update(); } diff --git a/scene/main/node.cpp b/scene/main/node.cpp index 0c1a62c667..bd791dff2a 100644 --- a/scene/main/node.cpp +++ b/scene/main/node.cpp @@ -2528,9 +2528,10 @@ Node *Node::get_node_and_resource(const NodePath &p_path, Ref<Resource> &r_res, int j = 0; // If not p_last_is_property, we shouldn't consider the last one as part of the resource for (; j < p_path.get_subname_count() - (int)p_last_is_property; j++) { - Variant new_res_v = j == 0 ? node->get(p_path.get_subname(j)) : r_res->get(p_path.get_subname(j)); + bool is_valid = false; + Variant new_res_v = j == 0 ? node->get(p_path.get_subname(j), &is_valid) : r_res->get(p_path.get_subname(j), &is_valid); - if (new_res_v.get_type() == Variant::NIL) { // Found nothing on that path + if (!is_valid) { // Found nothing on that path return nullptr; } diff --git a/scene/main/resource_preloader.cpp b/scene/main/resource_preloader.cpp index b3595c6227..71e62fe804 100644 --- a/scene/main/resource_preloader.cpp +++ b/scene/main/resource_preloader.cpp @@ -62,9 +62,9 @@ Array ResourcePreloader::_get_resources() const { } int i = 0; - for (RBSet<String>::Element *E = sorted_names.front(); E; E = E->next()) { - names.set(i, E->get()); - arr[i] = resources[E->get()]; + for (const String &E : sorted_names) { + names.set(i, E); + arr[i] = resources[E]; i++; } diff --git a/scene/main/viewport.cpp b/scene/main/viewport.cpp index a2399c8b5a..590c73de0b 100644 --- a/scene/main/viewport.cpp +++ b/scene/main/viewport.cpp @@ -412,9 +412,9 @@ void Viewport::_notification(int p_what) { #ifndef _3D_DISABLED if (audio_listener_3d_set.size() && !audio_listener_3d) { AudioListener3D *first = nullptr; - for (RBSet<AudioListener3D *>::Element *E = audio_listener_3d_set.front(); E; E = E->next()) { - if (first == nullptr || first->is_greater_than(E->get())) { - first = E->get(); + for (AudioListener3D *E : audio_listener_3d_set) { + if (first == nullptr || first->is_greater_than(E)) { + first = E; } } @@ -426,9 +426,9 @@ void Viewport::_notification(int p_what) { if (camera_3d_set.size() && !camera_3d) { // There are cameras but no current camera, pick first in tree and make it current. Camera3D *first = nullptr; - for (RBSet<Camera3D *>::Element *E = camera_3d_set.front(); E; E = E->next()) { - if (first == nullptr || first->is_greater_than(E->get())) { - first = E->get(); + for (Camera3D *E : camera_3d_set) { + if (first == nullptr || first->is_greater_than(E)) { + first = E; } } @@ -647,13 +647,13 @@ void Viewport::_process_picking() { uint64_t frame = get_tree()->get_frame(); PhysicsDirectSpaceState2D::ShapeResult res[64]; - for (RBSet<CanvasLayer *>::Element *E = canvas_layers.front(); E; E = E->next()) { + for (const CanvasLayer *E : canvas_layers) { Transform2D canvas_transform; ObjectID canvas_layer_id; - if (E->get()) { + if (E) { // A descendant CanvasLayer. - canvas_transform = E->get()->get_transform(); - canvas_layer_id = E->get()->get_instance_id(); + canvas_transform = E->get_transform(); + canvas_layer_id = E->get_instance_id(); } else { // This Viewport's builtin canvas. canvas_transform = get_canvas_transform(); @@ -1277,21 +1277,19 @@ void Viewport::_gui_show_tooltip() { gui.tooltip_popup->child_controls_changed(); } -void Viewport::_gui_call_input(Control *p_control, const Ref<InputEvent> &p_input) { +bool Viewport::_gui_call_input(Control *p_control, const Ref<InputEvent> &p_input) { + bool stopped = false; Ref<InputEvent> ev = p_input; - // Mouse wheel events can't be stopped. - Ref<InputEventMouseButton> mb = p_input; + // Returns true if an event should be impacted by a control's mouse filter. + bool is_mouse_event = Ref<InputEventMouse>(p_input).is_valid(); - bool cant_stop_me_now = (mb.is_valid() && + Ref<InputEventMouseButton> mb = p_input; + bool is_scroll_event = mb.is_valid() && (mb->get_button_index() == MouseButton::WHEEL_DOWN || mb->get_button_index() == MouseButton::WHEEL_UP || mb->get_button_index() == MouseButton::WHEEL_LEFT || - mb->get_button_index() == MouseButton::WHEEL_RIGHT)); - Ref<InputEventPanGesture> pn = p_input; - cant_stop_me_now = pn.is_valid() || cant_stop_me_now; - - bool ismouse = ev.is_valid() || Object::cast_to<InputEventMouseMotion>(*p_input) != nullptr; + mb->get_button_index() == MouseButton::WHEEL_RIGHT); CanvasItem *ci = p_control; while (ci) { @@ -1305,9 +1303,12 @@ void Viewport::_gui_call_input(Control *p_control, const Ref<InputEvent> &p_inpu break; } if (gui.key_event_accepted) { + stopped = true; break; } - if (!cant_stop_me_now && control->data.mouse_filter == Control::MOUSE_FILTER_STOP && ismouse) { + if (control->data.mouse_filter == Control::MOUSE_FILTER_STOP && is_mouse_event && !(is_scroll_event && control->data.force_pass_scroll_events)) { + // Mouse events are stopped by default with MOUSE_FILTER_STOP, unless we have a scroll event and force_pass_scroll_events set to true + stopped = true; break; } } @@ -1319,6 +1320,7 @@ void Viewport::_gui_call_input(Control *p_control, const Ref<InputEvent> &p_inpu ev = ev->xformed_by(ci->get_transform()); // Transform event upwards. ci = ci->get_parent_item(); } + return stopped; } void Viewport::_gui_call_notification(Control *p_control, int p_what) { @@ -1530,11 +1532,14 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { } } + bool stopped = false; if (gui.mouse_focus && gui.mouse_focus->can_process()) { - _gui_call_input(gui.mouse_focus, mb); + stopped = _gui_call_input(gui.mouse_focus, mb); } - set_input_as_handled(); + if (stopped) { + set_input_as_handled(); + } if (gui.drag_data.get_type() != Variant::NIL && mb->get_button_index() == MouseButton::LEFT) { // Alternate drop use (when using force_drag(), as proposed by #5342). @@ -1600,11 +1605,14 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { gui.forced_mouse_focus = false; } + bool stopped = false; if (mouse_focus && mouse_focus->can_process()) { - _gui_call_input(mouse_focus, mb); + stopped = _gui_call_input(mouse_focus, mb); } - set_input_as_handled(); + if (stopped) { + set_input_as_handled(); + } } } @@ -1767,11 +1775,14 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { ds_cursor_shape = (DisplayServer::CursorShape)cursor_shape; + bool stopped = false; if (over && over->can_process()) { - _gui_call_input(over, mm); + stopped = _gui_call_input(over, mm); } - set_input_as_handled(); + if (stopped) { + set_input_as_handled(); + } } if (gui.drag_data.get_type() != Variant::NIL) { @@ -1884,6 +1895,7 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { if (touch_event->is_pressed()) { Control *over = gui_find_control(pos); if (over) { + bool stopped = false; if (over->can_process()) { touch_event = touch_event->xformed_by(Transform2D()); // Make a copy. if (over == gui.mouse_focus) { @@ -1892,19 +1904,24 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { pos = over->get_global_transform_with_canvas().affine_inverse().xform(pos); } touch_event->set_position(pos); - _gui_call_input(over, touch_event); + stopped = _gui_call_input(over, touch_event); + } + if (stopped) { + set_input_as_handled(); } - set_input_as_handled(); return; } } else if (touch_event->get_index() == 0 && gui.last_mouse_focus) { + bool stopped = false; if (gui.last_mouse_focus->can_process()) { touch_event = touch_event->xformed_by(Transform2D()); // Make a copy. touch_event->set_position(gui.focus_inv_xform.xform(pos)); - _gui_call_input(gui.last_mouse_focus, touch_event); + stopped = _gui_call_input(gui.last_mouse_focus, touch_event); + } + if (stopped) { + set_input_as_handled(); } - set_input_as_handled(); return; } } @@ -1919,6 +1936,7 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { Control *over = gui_find_control(pos); if (over) { + bool stopped = false; if (over->can_process()) { gesture_event = gesture_event->xformed_by(Transform2D()); // Make a copy. if (over == gui.mouse_focus) { @@ -1927,9 +1945,11 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { pos = over->get_global_transform_with_canvas().affine_inverse().xform(pos); } gesture_event->set_position(pos); - _gui_call_input(over, gesture_event); + stopped = _gui_call_input(over, gesture_event); + } + if (stopped) { + set_input_as_handled(); } - set_input_as_handled(); return; } } @@ -1941,6 +1961,7 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { over = gui_find_control(drag_event->get_position()); } if (over) { + bool stopped = false; if (over->can_process()) { Transform2D localizer = over->get_global_transform_with_canvas().affine_inverse(); Size2 pos = localizer.xform(drag_event->get_position()); @@ -1953,10 +1974,12 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { drag_event->set_relative(rel); drag_event->set_position(pos); - _gui_call_input(over, drag_event); + stopped = _gui_call_input(over, drag_event); } - set_input_as_handled(); + if (stopped) { + set_input_as_handled(); + } return; } } @@ -3179,18 +3202,18 @@ void Viewport::_audio_listener_3d_remove(AudioListener3D *p_listener) { void Viewport::_audio_listener_3d_make_next_current(AudioListener3D *p_exclude) { if (audio_listener_3d_set.size() > 0) { - for (RBSet<AudioListener3D *>::Element *E = audio_listener_3d_set.front(); E; E = E->next()) { - if (p_exclude == E->get()) { + for (AudioListener3D *E : audio_listener_3d_set) { + if (p_exclude == E) { continue; } - if (!E->get()->is_inside_tree()) { + if (!E->is_inside_tree()) { continue; } if (audio_listener_3d != nullptr) { return; } - E->get()->make_current(); + E->make_current(); } } else { // Attempt to reset listener to the camera position. @@ -3267,18 +3290,18 @@ void Viewport::_camera_3d_remove(Camera3D *p_camera) { } void Viewport::_camera_3d_make_next_current(Camera3D *p_exclude) { - for (RBSet<Camera3D *>::Element *E = camera_3d_set.front(); E; E = E->next()) { - if (p_exclude == E->get()) { + for (Camera3D *E : camera_3d_set) { + if (p_exclude == E) { continue; } - if (!E->get()->is_inside_tree()) { + if (!E->is_inside_tree()) { continue; } if (camera_3d != nullptr) { return; } - E->get()->make_current(); + E->make_current(); } } @@ -3913,8 +3936,8 @@ Viewport::Viewport() { Viewport::~Viewport() { // Erase itself from viewport textures. - for (RBSet<ViewportTexture *>::Element *E = viewport_textures.front(); E; E = E->next()) { - E->get()->vp = nullptr; + for (ViewportTexture *E : viewport_textures) { + E->vp = nullptr; } RenderingServer::get_singleton()->free(viewport); } diff --git a/scene/main/viewport.h b/scene/main/viewport.h index c1e4b30c20..48e4b175b6 100644 --- a/scene/main/viewport.h +++ b/scene/main/viewport.h @@ -381,7 +381,7 @@ private: bool disable_input = false; - void _gui_call_input(Control *p_control, const Ref<InputEvent> &p_input); + bool _gui_call_input(Control *p_control, const Ref<InputEvent> &p_input); void _gui_call_notification(Control *p_control, int p_what); void _gui_sort_roots(); diff --git a/scene/main/window.cpp b/scene/main/window.cpp index d8264e7d33..193f18c075 100644 --- a/scene/main/window.cpp +++ b/scene/main/window.cpp @@ -263,9 +263,9 @@ void Window::_make_window() { DisplayServer::get_singleton()->window_set_transient(window_id, transient_parent->window_id); } - for (RBSet<Window *>::Element *E = transient_children.front(); E; E = E->next()) { - if (E->get()->window_id != DisplayServer::INVALID_WINDOW_ID) { - DisplayServer::get_singleton()->window_set_transient(E->get()->window_id, transient_parent->window_id); + for (const Window *E : transient_children) { + if (E->window_id != DisplayServer::INVALID_WINDOW_ID) { + DisplayServer::get_singleton()->window_set_transient(E->window_id, transient_parent->window_id); } } @@ -290,9 +290,9 @@ void Window::_clear_window() { DisplayServer::get_singleton()->window_set_transient(window_id, DisplayServer::INVALID_WINDOW_ID); } - for (RBSet<Window *>::Element *E = transient_children.front(); E; E = E->next()) { - if (E->get()->window_id != DisplayServer::INVALID_WINDOW_ID) { - DisplayServer::get_singleton()->window_set_transient(E->get()->window_id, DisplayServer::INVALID_WINDOW_ID); + for (const Window *E : transient_children) { + if (E->window_id != DisplayServer::INVALID_WINDOW_ID) { + DisplayServer::get_singleton()->window_set_transient(E->window_id, DisplayServer::INVALID_WINDOW_ID); } } diff --git a/scene/multiplayer/scene_cache_interface.cpp b/scene/multiplayer/scene_cache_interface.cpp index a7e84b6bca..7c271341db 100644 --- a/scene/multiplayer/scene_cache_interface.cpp +++ b/scene/multiplayer/scene_cache_interface.cpp @@ -214,17 +214,17 @@ bool SceneCacheInterface::send_object_cache(Object *p_obj, NodePath p_path, int } } else { // Long and painful. - for (const RBSet<int>::Element *E = multiplayer->get_connected_peers().front(); E; E = E->next()) { - if (p_peer_id < 0 && E->get() == -p_peer_id) { + for (const int &E : multiplayer->get_connected_peers()) { + if (p_peer_id < 0 && E == -p_peer_id) { continue; // Continue, excluded. } - if (p_peer_id > 0 && E->get() != p_peer_id) { + if (p_peer_id > 0 && E != p_peer_id) { continue; // Continue, not for this peer. } - HashMap<int, bool>::Iterator F = psc->confirmed_peers.find(E->get()); + HashMap<int, bool>::Iterator F = psc->confirmed_peers.find(E); if (!F) { - peers_to_add.push_back(E->get()); // Need to also be notified. + peers_to_add.push_back(E); // Need to also be notified. has_all_peers = false; } else if (!F->value) { has_all_peers = false; diff --git a/scene/register_scene_types.cpp b/scene/register_scene_types.cpp index 6bce957d80..f70d57291f 100644 --- a/scene/register_scene_types.cpp +++ b/scene/register_scene_types.cpp @@ -1077,15 +1077,15 @@ void register_scene_types() { OS::get_singleton()->yield(); // may take time to init for (int i = 0; i < 20; i++) { - GLOBAL_DEF_BASIC(vformat("layer_names/2d_render/layer_%d", i + 1), ""); - GLOBAL_DEF_BASIC(vformat("layer_names/3d_render/layer_%d", i + 1), ""); + GLOBAL_DEF_BASIC(vformat("%s/layer_%d", PNAME("layer_names/2d_render"), i + 1), ""); + GLOBAL_DEF_BASIC(vformat("%s/layer_%d", PNAME("layer_names/3d_render"), i + 1), ""); } for (int i = 0; i < 32; i++) { - GLOBAL_DEF_BASIC(vformat("layer_names/2d_physics/layer_%d", i + 1), ""); - GLOBAL_DEF_BASIC(vformat("layer_names/2d_navigation/layer_%d", i + 1), ""); - GLOBAL_DEF_BASIC(vformat("layer_names/3d_physics/layer_%d", i + 1), ""); - GLOBAL_DEF_BASIC(vformat("layer_names/3d_navigation/layer_%d", i + 1), ""); + GLOBAL_DEF_BASIC(vformat("%s/layer_%d", PNAME("layer_names/2d_physics"), i + 1), ""); + GLOBAL_DEF_BASIC(vformat("%s/layer_%d", PNAME("layer_names/2d_navigation"), i + 1), ""); + GLOBAL_DEF_BASIC(vformat("%s/layer_%d", PNAME("layer_names/3d_physics"), i + 1), ""); + GLOBAL_DEF_BASIC(vformat("%s/layer_%d", PNAME("layer_names/3d_navigation"), i + 1), ""); } if (RenderingServer::get_singleton()) { diff --git a/scene/resources/concave_polygon_shape_3d.cpp b/scene/resources/concave_polygon_shape_3d.cpp index ab2c1da327..081271c2fc 100644 --- a/scene/resources/concave_polygon_shape_3d.cpp +++ b/scene/resources/concave_polygon_shape_3d.cpp @@ -50,9 +50,9 @@ Vector<Vector3> ConcavePolygonShape3D::get_debug_mesh_lines() const { Vector<Vector3> points; points.resize(edges.size() * 2); int idx = 0; - for (RBSet<DrawEdge>::Element *E = edges.front(); E; E = E->next()) { - points.write[idx + 0] = E->get().a; - points.write[idx + 1] = E->get().b; + for (const DrawEdge &E : edges) { + points.write[idx + 0] = E.a; + points.write[idx + 1] = E.b; idx += 2; } diff --git a/scene/resources/curve.cpp b/scene/resources/curve.cpp index 9ea7bb464a..c99f71b13e 100644 --- a/scene/resources/curve.cpp +++ b/scene/resources/curve.cpp @@ -49,6 +49,18 @@ const char *Curve::SIGNAL_RANGE_CHANGED = "range_changed"; Curve::Curve() { } +void Curve::set_point_count(int p_count) { + ERR_FAIL_COND(p_count < 0); + if (_points.size() >= p_count) { + _points.resize(p_count); + mark_dirty(); + } else { + for (int i = p_count - _points.size(); i > 0; i--) { + add_point(Vector2()); + } + } +} + int Curve::add_point(Vector2 p_position, real_t p_left_tangent, real_t p_right_tangent, TangentMode p_left_mode, TangentMode p_right_mode) { // Add a point and preserve order @@ -358,6 +370,7 @@ real_t Curve::interpolate_local_nocheck(int p_index, real_t p_local_offset) cons void Curve::mark_dirty() { _baked_cache_dirty = true; emit_signal(CoreStringNames::get_singleton()->changed); + notify_property_list_changed(); } Array Curve::get_data() const { @@ -409,7 +422,6 @@ void Curve::set_data(const Array p_input) { p.position = p_input[i]; p.left_tangent = p_input[i + 1]; p.right_tangent = p_input[i + 2]; - // TODO For some reason the compiler won't convert from Variant to enum int left_mode = p_input[i + 3]; int right_mode = p_input[i + 4]; p.left_mode = (TangentMode)left_mode; @@ -490,8 +502,91 @@ void Curve::ensure_default_setup(real_t p_min, real_t p_max) { } } +bool Curve::_set(const StringName &p_name, const Variant &p_value) { + Vector<String> components = String(p_name).split("/", true, 2); + if (components.size() >= 2 && components[0].begins_with("point_") && components[0].trim_prefix("point_").is_valid_int()) { + int point_index = components[0].trim_prefix("point_").to_int(); + String property = components[1]; + if (property == "position") { + Vector2 position = p_value.operator Vector2(); + set_point_offset(point_index, position.x); + set_point_value(point_index, position.y); + return true; + } else if (property == "left_tangent") { + set_point_left_tangent(point_index, p_value); + return true; + } else if (property == "left_mode") { + int mode = p_value; + set_point_left_mode(point_index, (TangentMode)mode); + return true; + } else if (property == "right_tangent") { + set_point_right_tangent(point_index, p_value); + return true; + } else if (property == "right_mode") { + int mode = p_value; + set_point_right_mode(point_index, (TangentMode)mode); + return true; + } + } + return false; +} + +bool Curve::_get(const StringName &p_name, Variant &r_ret) const { + Vector<String> components = String(p_name).split("/", true, 2); + if (components.size() >= 2 && components[0].begins_with("point_") && components[0].trim_prefix("point_").is_valid_int()) { + int point_index = components[0].trim_prefix("point_").to_int(); + String property = components[1]; + if (property == "position") { + r_ret = get_point_position(point_index); + return true; + } else if (property == "left_tangent") { + r_ret = get_point_left_tangent(point_index); + return true; + } else if (property == "left_mode") { + r_ret = get_point_left_mode(point_index); + return true; + } else if (property == "right_tangent") { + r_ret = get_point_right_tangent(point_index); + return true; + } else if (property == "right_mode") { + r_ret = get_point_right_mode(point_index); + return true; + } + } + return false; +} + +void Curve::_get_property_list(List<PropertyInfo> *p_list) const { + for (int i = 0; i < _points.size(); i++) { + PropertyInfo pi = PropertyInfo(Variant::VECTOR2, vformat("point_%d/position", i)); + pi.usage &= ~PROPERTY_USAGE_STORAGE; + p_list->push_back(pi); + + if (i != 0) { + pi = PropertyInfo(Variant::FLOAT, vformat("point_%d/left_tangent", i)); + pi.usage &= ~PROPERTY_USAGE_STORAGE; + p_list->push_back(pi); + + pi = PropertyInfo(Variant::INT, vformat("point_%d/left_mode", i), PROPERTY_HINT_ENUM, "Free,Linear"); + pi.usage &= ~PROPERTY_USAGE_STORAGE; + p_list->push_back(pi); + } + + if (i != _points.size() - 1) { + pi = PropertyInfo(Variant::FLOAT, vformat("point_%d/right_tangent", i)); + pi.usage &= ~PROPERTY_USAGE_STORAGE; + p_list->push_back(pi); + + pi = PropertyInfo(Variant::INT, vformat("point_%d/right_mode", i), PROPERTY_HINT_ENUM, "Free,Linear"); + pi.usage &= ~PROPERTY_USAGE_STORAGE; + p_list->push_back(pi); + } + } +} + void Curve::_bind_methods() { ClassDB::bind_method(D_METHOD("get_point_count"), &Curve::get_point_count); + ClassDB::bind_method(D_METHOD("set_point_count", "count"), &Curve::set_point_count); ClassDB::bind_method(D_METHOD("add_point", "position", "left_tangent", "right_tangent", "left_mode", "right_mode"), &Curve::add_point, DEFVAL(0), DEFVAL(0), DEFVAL(TANGENT_FREE), DEFVAL(TANGENT_FREE)); ClassDB::bind_method(D_METHOD("remove_point", "index"), &Curve::remove_point); ClassDB::bind_method(D_METHOD("clear_points"), &Curve::clear_points); @@ -523,6 +618,7 @@ void Curve::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "max_value", PROPERTY_HINT_RANGE, "-1024,1024,0.01"), "set_max_value", "get_max_value"); ADD_PROPERTY(PropertyInfo(Variant::INT, "bake_resolution", PROPERTY_HINT_RANGE, "1,1000,1"), "set_bake_resolution", "get_bake_resolution"); ADD_PROPERTY(PropertyInfo(Variant::INT, "_data", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "_set_data", "_get_data"); + ADD_ARRAY_COUNT("Points", "point_count", "set_point_count", "get_point_count", "point_"); ADD_SIGNAL(MethodInfo(SIGNAL_RANGE_CHANGED)); @@ -535,6 +631,20 @@ int Curve2D::get_point_count() const { return points.size(); } +void Curve2D::set_point_count(int p_count) { + ERR_FAIL_COND(p_count < 0); + if (points.size() >= p_count) { + points.resize(p_count); + mark_dirty(); + baked_cache_dirty = true; + emit_signal(CoreStringNames::get_singleton()->changed); + } else { + for (int i = p_count - points.size(); i > 0; i--) { + add_point(Vector2()); + } + } +} + void Curve2D::add_point(const Vector2 &p_position, const Vector2 &p_in, const Vector2 &p_out, int p_atpos) { Point n; n.position = p_position; @@ -546,16 +656,14 @@ void Curve2D::add_point(const Vector2 &p_position, const Vector2 &p_in, const Ve points.push_back(n); } - baked_cache_dirty = true; - emit_signal(CoreStringNames::get_singleton()->changed); + mark_dirty(); } void Curve2D::set_point_position(int p_index, const Vector2 &p_position) { ERR_FAIL_INDEX(p_index, points.size()); points.write[p_index].position = p_position; - baked_cache_dirty = true; - emit_signal(CoreStringNames::get_singleton()->changed); + mark_dirty(); } Vector2 Curve2D::get_point_position(int p_index) const { @@ -567,8 +675,7 @@ void Curve2D::set_point_in(int p_index, const Vector2 &p_in) { ERR_FAIL_INDEX(p_index, points.size()); points.write[p_index].in = p_in; - baked_cache_dirty = true; - emit_signal(CoreStringNames::get_singleton()->changed); + mark_dirty(); } Vector2 Curve2D::get_point_in(int p_index) const { @@ -580,8 +687,7 @@ void Curve2D::set_point_out(int p_index, const Vector2 &p_out) { ERR_FAIL_INDEX(p_index, points.size()); points.write[p_index].out = p_out; - baked_cache_dirty = true; - emit_signal(CoreStringNames::get_singleton()->changed); + mark_dirty(); } Vector2 Curve2D::get_point_out(int p_index) const { @@ -592,15 +698,13 @@ Vector2 Curve2D::get_point_out(int p_index) const { void Curve2D::remove_point(int p_index) { ERR_FAIL_INDEX(p_index, points.size()); points.remove_at(p_index); - baked_cache_dirty = true; - emit_signal(CoreStringNames::get_singleton()->changed); + mark_dirty(); } void Curve2D::clear_points() { if (!points.is_empty()) { points.clear(); - baked_cache_dirty = true; - emit_signal(CoreStringNames::get_singleton()->changed); + mark_dirty(); } } @@ -632,6 +736,12 @@ Vector2 Curve2D::interpolatef(real_t p_findex) const { return interpolate((int)p_findex, Math::fmod(p_findex, (real_t)1.0)); } +void Curve2D::mark_dirty() { + baked_cache_dirty = true; + emit_signal(CoreStringNames::get_singleton()->changed); + notify_property_list_changed(); +} + void Curve2D::_bake_segment2d(RBMap<real_t, Vector2> &r_bake, real_t p_begin, real_t p_end, const Vector2 &p_a, const Vector2 &p_out, const Vector2 &p_b, const Vector2 &p_in, int p_depth, int p_max_depth, real_t p_tol) const { real_t mp = p_begin + (p_end - p_begin) * 0.5; Vector2 beg = _bezier_interp(p_begin, p_a, p_a + p_out, p_b + p_in, p_b); @@ -825,8 +935,7 @@ PackedVector2Array Curve2D::get_baked_points() const { void Curve2D::set_bake_interval(real_t p_tolerance) { bake_interval = p_tolerance; - baked_cache_dirty = true; - emit_signal(CoreStringNames::get_singleton()->changed); + mark_dirty(); } real_t Curve2D::get_bake_interval() const { @@ -985,8 +1094,67 @@ PackedVector2Array Curve2D::tessellate(int p_max_stages, real_t p_tolerance) con return tess; } +bool Curve2D::_set(const StringName &p_name, const Variant &p_value) { + Vector<String> components = String(p_name).split("/", true, 2); + if (components.size() >= 2 && components[0].begins_with("point_") && components[0].trim_prefix("point_").is_valid_int()) { + int point_index = components[0].trim_prefix("point_").to_int(); + String property = components[1]; + if (property == "position") { + set_point_position(point_index, p_value); + return true; + } else if (property == "in") { + set_point_in(point_index, p_value); + return true; + } else if (property == "out") { + set_point_out(point_index, p_value); + return true; + } + } + return false; +} + +bool Curve2D::_get(const StringName &p_name, Variant &r_ret) const { + Vector<String> components = String(p_name).split("/", true, 2); + if (components.size() >= 2 && components[0].begins_with("point_") && components[0].trim_prefix("point_").is_valid_int()) { + int point_index = components[0].trim_prefix("point_").to_int(); + String property = components[1]; + if (property == "position") { + r_ret = get_point_position(point_index); + return true; + } else if (property == "in") { + r_ret = get_point_in(point_index); + return true; + } else if (property == "out") { + r_ret = get_point_out(point_index); + return true; + } + } + return false; +} + +void Curve2D::_get_property_list(List<PropertyInfo> *p_list) const { + for (int i = 0; i < points.size(); i++) { + PropertyInfo pi = PropertyInfo(Variant::VECTOR2, vformat("point_%d/position", i)); + pi.usage &= ~PROPERTY_USAGE_STORAGE; + p_list->push_back(pi); + + if (i != 0) { + pi = PropertyInfo(Variant::VECTOR2, vformat("point_%d/in", i)); + pi.usage &= ~PROPERTY_USAGE_STORAGE; + p_list->push_back(pi); + } + + if (i != points.size() - 1) { + pi = PropertyInfo(Variant::VECTOR2, vformat("point_%d/out", i)); + pi.usage &= ~PROPERTY_USAGE_STORAGE; + p_list->push_back(pi); + } + } +} + void Curve2D::_bind_methods() { ClassDB::bind_method(D_METHOD("get_point_count"), &Curve2D::get_point_count); + ClassDB::bind_method(D_METHOD("set_point_count", "count"), &Curve2D::set_point_count); ClassDB::bind_method(D_METHOD("add_point", "position", "in", "out", "at_position"), &Curve2D::add_point, DEFVAL(Vector2()), DEFVAL(Vector2()), DEFVAL(-1)); ClassDB::bind_method(D_METHOD("set_point_position", "idx", "position"), &Curve2D::set_point_position); ClassDB::bind_method(D_METHOD("get_point_position", "idx"), &Curve2D::get_point_position); @@ -1014,6 +1182,7 @@ void Curve2D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "bake_interval", PROPERTY_HINT_RANGE, "0.01,512,0.01"), "set_bake_interval", "get_bake_interval"); ADD_PROPERTY(PropertyInfo(Variant::INT, "_data", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "_set_data", "_get_data"); + ADD_ARRAY_COUNT("Points", "point_count", "set_point_count", "get_point_count", "point_"); } Curve2D::Curve2D() {} @@ -1029,6 +1198,18 @@ int Curve3D::get_point_count() const { return points.size(); } +void Curve3D::set_point_count(int p_count) { + ERR_FAIL_COND(p_count < 0); + if (points.size() >= p_count) { + points.resize(p_count); + mark_dirty(); + } else { + for (int i = p_count - points.size(); i > 0; i--) { + add_point(Vector3()); + } + } +} + void Curve3D::add_point(const Vector3 &p_position, const Vector3 &p_in, const Vector3 &p_out, int p_atpos) { Point n; n.position = p_position; @@ -1040,16 +1221,14 @@ void Curve3D::add_point(const Vector3 &p_position, const Vector3 &p_in, const Ve points.push_back(n); } - baked_cache_dirty = true; - emit_signal(CoreStringNames::get_singleton()->changed); + mark_dirty(); } void Curve3D::set_point_position(int p_index, const Vector3 &p_position) { ERR_FAIL_INDEX(p_index, points.size()); points.write[p_index].position = p_position; - baked_cache_dirty = true; - emit_signal(CoreStringNames::get_singleton()->changed); + mark_dirty(); } Vector3 Curve3D::get_point_position(int p_index) const { @@ -1061,8 +1240,7 @@ void Curve3D::set_point_tilt(int p_index, real_t p_tilt) { ERR_FAIL_INDEX(p_index, points.size()); points.write[p_index].tilt = p_tilt; - baked_cache_dirty = true; - emit_signal(CoreStringNames::get_singleton()->changed); + mark_dirty(); } real_t Curve3D::get_point_tilt(int p_index) const { @@ -1074,8 +1252,7 @@ void Curve3D::set_point_in(int p_index, const Vector3 &p_in) { ERR_FAIL_INDEX(p_index, points.size()); points.write[p_index].in = p_in; - baked_cache_dirty = true; - emit_signal(CoreStringNames::get_singleton()->changed); + mark_dirty(); } Vector3 Curve3D::get_point_in(int p_index) const { @@ -1087,8 +1264,7 @@ void Curve3D::set_point_out(int p_index, const Vector3 &p_out) { ERR_FAIL_INDEX(p_index, points.size()); points.write[p_index].out = p_out; - baked_cache_dirty = true; - emit_signal(CoreStringNames::get_singleton()->changed); + mark_dirty(); } Vector3 Curve3D::get_point_out(int p_index) const { @@ -1099,15 +1275,13 @@ Vector3 Curve3D::get_point_out(int p_index) const { void Curve3D::remove_point(int p_index) { ERR_FAIL_INDEX(p_index, points.size()); points.remove_at(p_index); - baked_cache_dirty = true; - emit_signal(CoreStringNames::get_singleton()->changed); + mark_dirty(); } void Curve3D::clear_points() { if (!points.is_empty()) { points.clear(); - baked_cache_dirty = true; - emit_signal(CoreStringNames::get_singleton()->changed); + mark_dirty(); } } @@ -1139,6 +1313,12 @@ Vector3 Curve3D::interpolatef(real_t p_findex) const { return interpolate((int)p_findex, Math::fmod(p_findex, (real_t)1.0)); } +void Curve3D::mark_dirty() { + baked_cache_dirty = true; + emit_signal(CoreStringNames::get_singleton()->changed); + notify_property_list_changed(); +} + void Curve3D::_bake_segment3d(RBMap<real_t, Vector3> &r_bake, real_t p_begin, real_t p_end, const Vector3 &p_a, const Vector3 &p_out, const Vector3 &p_b, const Vector3 &p_in, int p_depth, int p_max_depth, real_t p_tol) const { real_t mp = p_begin + (p_end - p_begin) * 0.5; Vector3 beg = _bezier_interp(p_begin, p_a, p_a + p_out, p_b + p_in, p_b); @@ -1601,8 +1781,7 @@ real_t Curve3D::get_closest_offset(const Vector3 &p_to_point) const { void Curve3D::set_bake_interval(real_t p_tolerance) { bake_interval = p_tolerance; - baked_cache_dirty = true; - emit_signal(CoreStringNames::get_singleton()->changed); + mark_dirty(); } real_t Curve3D::get_bake_interval() const { @@ -1611,8 +1790,7 @@ real_t Curve3D::get_bake_interval() const { void Curve3D::set_up_vector_enabled(bool p_enable) { up_vector_enabled = p_enable; - baked_cache_dirty = true; - emit_signal(CoreStringNames::get_singleton()->changed); + mark_dirty(); } bool Curve3D::is_up_vector_enabled() const { @@ -1699,8 +1877,77 @@ PackedVector3Array Curve3D::tessellate(int p_max_stages, real_t p_tolerance) con return tess; } +bool Curve3D::_set(const StringName &p_name, const Variant &p_value) { + Vector<String> components = String(p_name).split("/", true, 2); + if (components.size() >= 2 && components[0].begins_with("point_") && components[0].trim_prefix("point_").is_valid_int()) { + int point_index = components[0].trim_prefix("point_").to_int(); + String property = components[1]; + if (property == "position") { + set_point_position(point_index, p_value); + return true; + } else if (property == "in") { + set_point_in(point_index, p_value); + return true; + } else if (property == "out") { + set_point_out(point_index, p_value); + return true; + } else if (property == "tilt") { + set_point_tilt(point_index, p_value); + return true; + } + } + return false; +} + +bool Curve3D::_get(const StringName &p_name, Variant &r_ret) const { + Vector<String> components = String(p_name).split("/", true, 2); + if (components.size() >= 2 && components[0].begins_with("point_") && components[0].trim_prefix("point_").is_valid_int()) { + int point_index = components[0].trim_prefix("point_").to_int(); + String property = components[1]; + if (property == "position") { + r_ret = get_point_position(point_index); + return true; + } else if (property == "in") { + r_ret = get_point_in(point_index); + return true; + } else if (property == "out") { + r_ret = get_point_out(point_index); + return true; + } else if (property == "tilt") { + r_ret = get_point_tilt(point_index); + return true; + } + } + return false; +} + +void Curve3D::_get_property_list(List<PropertyInfo> *p_list) const { + for (int i = 0; i < points.size(); i++) { + PropertyInfo pi = PropertyInfo(Variant::VECTOR3, vformat("point_%d/position", i)); + pi.usage &= ~PROPERTY_USAGE_STORAGE; + p_list->push_back(pi); + + if (i != 0) { + pi = PropertyInfo(Variant::VECTOR3, vformat("point_%d/in", i)); + pi.usage &= ~PROPERTY_USAGE_STORAGE; + p_list->push_back(pi); + } + + if (i != points.size() - 1) { + pi = PropertyInfo(Variant::VECTOR3, vformat("point_%d/out", i)); + pi.usage &= ~PROPERTY_USAGE_STORAGE; + p_list->push_back(pi); + } + + pi = PropertyInfo(Variant::FLOAT, vformat("point_%d/tilt", i)); + pi.usage &= ~PROPERTY_USAGE_STORAGE; + p_list->push_back(pi); + } +} + void Curve3D::_bind_methods() { ClassDB::bind_method(D_METHOD("get_point_count"), &Curve3D::get_point_count); + ClassDB::bind_method(D_METHOD("set_point_count", "count"), &Curve3D::set_point_count); ClassDB::bind_method(D_METHOD("add_point", "position", "in", "out", "at_position"), &Curve3D::add_point, DEFVAL(Vector3()), DEFVAL(Vector3()), DEFVAL(-1)); ClassDB::bind_method(D_METHOD("set_point_position", "idx", "position"), &Curve3D::set_point_position); ClassDB::bind_method(D_METHOD("get_point_position", "idx"), &Curve3D::get_point_position); @@ -1735,6 +1982,7 @@ void Curve3D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "bake_interval", PROPERTY_HINT_RANGE, "0.01,512,0.01"), "set_bake_interval", "get_bake_interval"); ADD_PROPERTY(PropertyInfo(Variant::INT, "_data", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "_set_data", "_get_data"); + ADD_ARRAY_COUNT("Points", "point_count", "set_point_count", "get_point_count", "point_"); ADD_GROUP("Up Vector", "up_vector_"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "up_vector_enabled"), "set_up_vector_enabled", "is_up_vector_enabled"); diff --git a/scene/resources/curve.h b/scene/resources/curve.h index 398f64cabe..834e7ffa07 100644 --- a/scene/resources/curve.h +++ b/scene/resources/curve.h @@ -76,6 +76,8 @@ public: int get_point_count() const { return _points.size(); } + void set_point_count(int p_count); + int add_point(Vector2 p_position, real_t left_tangent = 0, real_t right_tangent = 0, @@ -126,6 +128,10 @@ public: void ensure_default_setup(real_t p_min, real_t p_max); + bool _set(const StringName &p_name, const Variant &p_value); + bool _get(const StringName &p_name, Variant &r_ret) const; + void _get_property_list(List<PropertyInfo> *p_list) const; + protected: static void _bind_methods(); @@ -164,6 +170,8 @@ class Curve2D : public Resource { mutable Vector<real_t> baked_dist_cache; mutable real_t baked_max_ofs = 0.0; + void mark_dirty(); + void _bake() const; real_t bake_interval = 5.0; @@ -172,11 +180,16 @@ class Curve2D : public Resource { Dictionary _get_data() const; void _set_data(const Dictionary &p_data); + bool _set(const StringName &p_name, const Variant &p_value); + bool _get(const StringName &p_name, Variant &r_ret) const; + void _get_property_list(List<PropertyInfo> *p_list) const; + protected: static void _bind_methods(); public: int get_point_count() const; + void set_point_count(int p_count); void add_point(const Vector2 &p_position, const Vector2 &p_in = Vector2(), const Vector2 &p_out = Vector2(), int p_atpos = -1); void set_point_position(int p_index, const Vector2 &p_position); Vector2 get_point_position(int p_index) const; @@ -228,6 +241,8 @@ class Curve3D : public Resource { mutable Vector<real_t> baked_dist_cache; mutable real_t baked_max_ofs = 0.0; + void mark_dirty(); + void _bake() const; real_t bake_interval = 0.2; @@ -237,11 +252,16 @@ class Curve3D : public Resource { Dictionary _get_data() const; void _set_data(const Dictionary &p_data); + bool _set(const StringName &p_name, const Variant &p_value); + bool _get(const StringName &p_name, Variant &r_ret) const; + void _get_property_list(List<PropertyInfo> *p_list) const; + protected: static void _bind_methods(); public: int get_point_count() const; + void set_point_count(int p_count); void add_point(const Vector3 &p_position, const Vector3 &p_in = Vector3(), const Vector3 &p_out = Vector3(), int p_atpos = -1); void set_point_position(int p_index, const Vector3 &p_position); Vector3 get_point_position(int p_index) const; diff --git a/scene/resources/mesh_library.cpp b/scene/resources/mesh_library.cpp index 5168bf83eb..a90999bf07 100644 --- a/scene/resources/mesh_library.cpp +++ b/scene/resources/mesh_library.cpp @@ -100,14 +100,14 @@ bool MeshLibrary::_get(const StringName &p_name, Variant &r_ret) const { void MeshLibrary::_get_property_list(List<PropertyInfo> *p_list) const { for (const KeyValue<int, Item> &E : item_map) { - String name = "item/" + itos(E.key) + "/"; - p_list->push_back(PropertyInfo(Variant::STRING, name + "name")); - p_list->push_back(PropertyInfo(Variant::OBJECT, name + "mesh", PROPERTY_HINT_RESOURCE_TYPE, "Mesh")); - p_list->push_back(PropertyInfo(Variant::TRANSFORM3D, name + "mesh_transform")); - p_list->push_back(PropertyInfo(Variant::ARRAY, name + "shapes")); - p_list->push_back(PropertyInfo(Variant::OBJECT, name + "navmesh", PROPERTY_HINT_RESOURCE_TYPE, "NavigationMesh")); - p_list->push_back(PropertyInfo(Variant::TRANSFORM3D, name + "navmesh_transform")); - p_list->push_back(PropertyInfo(Variant::OBJECT, name + "preview", PROPERTY_HINT_RESOURCE_TYPE, "Texture2D", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_EDITOR_HELPER)); + String name = vformat("%s/%d/", PNAME("item"), E.key); + p_list->push_back(PropertyInfo(Variant::STRING, name + PNAME("name"))); + p_list->push_back(PropertyInfo(Variant::OBJECT, name + PNAME("mesh"), PROPERTY_HINT_RESOURCE_TYPE, "Mesh")); + p_list->push_back(PropertyInfo(Variant::TRANSFORM3D, name + PNAME("mesh_transform"))); + p_list->push_back(PropertyInfo(Variant::ARRAY, name + PNAME("shapes"))); + p_list->push_back(PropertyInfo(Variant::OBJECT, name + PNAME("navmesh"), PROPERTY_HINT_RESOURCE_TYPE, "NavigationMesh")); + p_list->push_back(PropertyInfo(Variant::TRANSFORM3D, name + PNAME("navmesh_transform"))); + p_list->push_back(PropertyInfo(Variant::OBJECT, name + PNAME("preview"), PROPERTY_HINT_RESOURCE_TYPE, "Texture2D", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_EDITOR_HELPER)); } } diff --git a/scene/resources/navigation_mesh.cpp b/scene/resources/navigation_mesh.cpp index 7813de94ca..dd0a8472a4 100644 --- a/scene/resources/navigation_mesh.cpp +++ b/scene/resources/navigation_mesh.cpp @@ -38,6 +38,7 @@ void NavigationMesh::create_from_mesh(const Ref<Mesh> &p_mesh) { for (int i = 0; i < p_mesh->get_surface_count(); i++) { if (p_mesh->surface_get_primitive_type(i) != Mesh::PRIMITIVE_TRIANGLES) { + WARN_PRINT("A mesh surface was skipped when creating a NavigationMesh due to wrong primitive type in the source mesh. Mesh surface must be made out of triangles."); continue; } Array arr = p_mesh->surface_get_arrays(i); @@ -46,6 +47,7 @@ void NavigationMesh::create_from_mesh(const Ref<Mesh> &p_mesh) { Vector<Vector3> varr = arr[Mesh::ARRAY_VERTEX]; Vector<int> iarr = arr[Mesh::ARRAY_INDEX]; if (varr.size() == 0 || iarr.size() == 0) { + WARN_PRINT("A mesh surface was skipped when creating a NavigationMesh due to an empty vertex or index array."); continue; } diff --git a/scene/resources/polygon_path_finder.cpp b/scene/resources/polygon_path_finder.cpp index 155a8522cf..6b0c22d720 100644 --- a/scene/resources/polygon_path_finder.cpp +++ b/scene/resources/polygon_path_finder.cpp @@ -34,8 +34,8 @@ bool PolygonPathFinder::_is_point_inside(const Vector2 &p_point) const { int crosses = 0; - for (RBSet<Edge>::Element *E = edges.front(); E; E = E->next()) { - const Edge &e = E->get(); + for (const Edge &E : edges) { + const Edge &e = E; Vector2 a = points[e.points[0]].pos; Vector2 b = points[e.points[1]].pos; @@ -105,8 +105,8 @@ void PolygonPathFinder::setup(const Vector<Vector2> &p_points, const Vector<int> bool valid = true; - for (RBSet<Edge>::Element *E = edges.front(); E; E = E->next()) { - const Edge &e = E->get(); + for (const Edge &E : edges) { + const Edge &e = E; if (e.points[0] == i || e.points[1] == i || e.points[0] == j || e.points[1] == j) { continue; } @@ -140,8 +140,8 @@ Vector<Vector2> PolygonPathFinder::find_path(const Vector2 &p_from, const Vector float closest_dist = 1e20f; Vector2 closest_point; - for (RBSet<Edge>::Element *E = edges.front(); E; E = E->next()) { - const Edge &e = E->get(); + for (const Edge &E : edges) { + const Edge &e = E; Vector2 seg[2] = { points[e.points[0]].pos, points[e.points[1]].pos @@ -151,7 +151,7 @@ Vector<Vector2> PolygonPathFinder::find_path(const Vector2 &p_from, const Vector float d = from.distance_squared_to(closest); if (d < closest_dist) { - ignore_from_edge = E->get(); + ignore_from_edge = E; closest_dist = d; closest_point = closest; } @@ -164,8 +164,8 @@ Vector<Vector2> PolygonPathFinder::find_path(const Vector2 &p_from, const Vector float closest_dist = 1e20f; Vector2 closest_point; - for (RBSet<Edge>::Element *E = edges.front(); E; E = E->next()) { - const Edge &e = E->get(); + for (const Edge &E : edges) { + const Edge &e = E; Vector2 seg[2] = { points[e.points[0]].pos, points[e.points[1]].pos @@ -175,7 +175,7 @@ Vector<Vector2> PolygonPathFinder::find_path(const Vector2 &p_from, const Vector float d = to.distance_squared_to(closest); if (d < closest_dist) { - ignore_to_edge = E->get(); + ignore_to_edge = E; closest_dist = d; closest_point = closest; } @@ -188,8 +188,8 @@ Vector<Vector2> PolygonPathFinder::find_path(const Vector2 &p_from, const Vector { bool can_see_eachother = true; - for (RBSet<Edge>::Element *E = edges.front(); E; E = E->next()) { - const Edge &e = E->get(); + for (const Edge &E : edges) { + const Edge &e = E; if (e.points[0] == ignore_from_edge.points[0] && e.points[1] == ignore_from_edge.points[1]) { continue; } @@ -240,8 +240,8 @@ Vector<Vector2> PolygonPathFinder::find_path(const Vector2 &p_from, const Vector valid_b = false; } - for (RBSet<Edge>::Element *E = edges.front(); E; E = E->next()) { - const Edge &e = E->get(); + for (const Edge &E : edges) { + const Edge &e = E; if (e.points[0] == i || e.points[1] == i) { continue; @@ -293,10 +293,10 @@ Vector<Vector2> PolygonPathFinder::find_path(const Vector2 &p_from, const Vector points.write[aidx].distance = 0; points.write[aidx].prev = aidx; - for (RBSet<int>::Element *E = points[aidx].connections.front(); E; E = E->next()) { - open_list.insert(E->get()); - points.write[E->get()].distance = from.distance_to(points[E->get()].pos); - points.write[E->get()].prev = aidx; + for (const int &E : points[aidx].connections) { + open_list.insert(E); + points.write[E].distance = from.distance_to(points[E].pos); + points.write[E].prev = aidx; } bool found_route = false; @@ -312,14 +312,14 @@ Vector<Vector2> PolygonPathFinder::find_path(const Vector2 &p_from, const Vector float least_cost = 1e30; //this could be faster (cache previous results) - for (RBSet<int>::Element *E = open_list.front(); E; E = E->next()) { - const Point &p = points[E->get()]; + for (const int &E : open_list) { + const Point &p = points[E]; float cost = p.distance; cost += p.pos.distance_to(to); cost += p.penalty; if (cost < least_cost) { - least_cost_point = E->get(); + least_cost_point = E; least_cost = cost; } } @@ -327,8 +327,8 @@ Vector<Vector2> PolygonPathFinder::find_path(const Vector2 &p_from, const Vector const Point &np = points[least_cost_point]; //open the neighbours for search - for (RBSet<int>::Element *E = np.connections.front(); E; E = E->next()) { - Point &p = points.write[E->get()]; + for (const int &E : np.connections) { + Point &p = points.write[E]; float distance = np.pos.distance_to(p.pos) + np.distance; if (p.prev != -1) { @@ -343,9 +343,9 @@ Vector<Vector2> PolygonPathFinder::find_path(const Vector2 &p_from, const Vector p.prev = least_cost_point; p.distance = distance; - open_list.insert(E->get()); + open_list.insert(E); - if (E->get() == bidx) { + if (E == bidx) { //oh my reached end! stop algorithm found_route = true; break; @@ -459,8 +459,8 @@ Dictionary PolygonPathFinder::_get_data() const { { int *cw = c.ptrw(); int idx = 0; - for (RBSet<int>::Element *E = points[i].connections.front(); E; E = E->next()) { - cw[idx++] = E->get(); + for (const int &E : points[i].connections) { + cw[idx++] = E; } } connections[i] = c; @@ -469,9 +469,9 @@ Dictionary PolygonPathFinder::_get_data() const { { int *iw = ind.ptrw(); int idx = 0; - for (RBSet<Edge>::Element *E = edges.front(); E; E = E->next()) { - iw[idx++] = E->get().points[0]; - iw[idx++] = E->get().points[1]; + for (const Edge &E : edges) { + iw[idx++] = E.points[0]; + iw[idx++] = E.points[1]; } } @@ -492,8 +492,8 @@ Vector2 PolygonPathFinder::get_closest_point(const Vector2 &p_point) const { float closest_dist = 1e20f; Vector2 closest_point; - for (RBSet<Edge>::Element *E = edges.front(); E; E = E->next()) { - const Edge &e = E->get(); + for (const Edge &E : edges) { + const Edge &e = E; Vector2 seg[2] = { points[e.points[0]].pos, points[e.points[1]].pos @@ -516,9 +516,9 @@ Vector2 PolygonPathFinder::get_closest_point(const Vector2 &p_point) const { Vector<Vector2> PolygonPathFinder::get_intersections(const Vector2 &p_from, const Vector2 &p_to) const { Vector<Vector2> inters; - for (RBSet<Edge>::Element *E = edges.front(); E; E = E->next()) { - Vector2 a = points[E->get().points[0]].pos; - Vector2 b = points[E->get().points[1]].pos; + for (const Edge &E : edges) { + Vector2 a = points[E.points[0]].pos; + Vector2 b = points[E.points[1]].pos; Vector2 res; if (Geometry2D::segment_intersects_segment(a, b, p_from, p_to, &res)) { diff --git a/scene/resources/skin.cpp b/scene/resources/skin.cpp index 54ed71999c..1c04ba0cd4 100644 --- a/scene/resources/skin.cpp +++ b/scene/resources/skin.cpp @@ -130,11 +130,12 @@ bool Skin::_get(const StringName &p_name, Variant &r_ret) const { } void Skin::_get_property_list(List<PropertyInfo> *p_list) const { - p_list->push_back(PropertyInfo(Variant::INT, "bind_count", PROPERTY_HINT_RANGE, "0,16384,1,or_greater")); + p_list->push_back(PropertyInfo(Variant::INT, PNAME("bind_count"), PROPERTY_HINT_RANGE, "0,16384,1,or_greater")); for (int i = 0; i < get_bind_count(); i++) { - p_list->push_back(PropertyInfo(Variant::STRING_NAME, "bind/" + itos(i) + "/name")); - p_list->push_back(PropertyInfo(Variant::INT, "bind/" + itos(i) + "/bone", PROPERTY_HINT_RANGE, "0,16384,1,or_greater", get_bind_name(i) != StringName() ? PROPERTY_USAGE_NO_EDITOR : PROPERTY_USAGE_DEFAULT)); - p_list->push_back(PropertyInfo(Variant::TRANSFORM3D, "bind/" + itos(i) + "/pose")); + const String prefix = vformat("%s/%d/", PNAME("bind"), i); + p_list->push_back(PropertyInfo(Variant::STRING_NAME, prefix + PNAME("name"))); + p_list->push_back(PropertyInfo(Variant::INT, prefix + PNAME("bone"), PROPERTY_HINT_RANGE, "0,16384,1,or_greater", get_bind_name(i) != StringName() ? PROPERTY_USAGE_NO_EDITOR : PROPERTY_USAGE_DEFAULT)); + p_list->push_back(PropertyInfo(Variant::TRANSFORM3D, prefix + PNAME("pose"))); } } diff --git a/scene/resources/text_paragraph.cpp b/scene/resources/text_paragraph.cpp index 61adaf43dd..477b41efaa 100644 --- a/scene/resources/text_paragraph.cpp +++ b/scene/resources/text_paragraph.cpp @@ -139,7 +139,7 @@ void TextParagraph::_bind_methods() { void TextParagraph::_shape_lines() { if (lines_dirty) { - for (int i = 0; i < lines_rid.size(); i++) { + for (int i = 0; i < (int)lines_rid.size(); i++) { TS->free_rid(lines_rid[i]); } lines_rid.clear(); @@ -218,14 +218,14 @@ void TextParagraph::_shape_lines() { // Fill after min_size calculation. if (autowrap_enabled) { - int visible_lines = (max_lines_visible >= 0) ? MIN(max_lines_visible, lines_rid.size()) : lines_rid.size(); - bool lines_hidden = visible_lines > 0 && visible_lines < lines_rid.size(); + int visible_lines = (max_lines_visible >= 0) ? MIN(max_lines_visible, (int)lines_rid.size()) : (int)lines_rid.size(); + bool lines_hidden = visible_lines > 0 && visible_lines < (int)lines_rid.size(); if (lines_hidden) { overrun_flags |= TextServer::OVERRUN_ENFORCE_ELLIPSIS; } if (alignment == HORIZONTAL_ALIGNMENT_FILL) { - for (int i = 0; i < lines_rid.size(); i++) { - if (i < visible_lines - 1 || lines_rid.size() == 1) { + for (int i = 0; i < (int)lines_rid.size(); i++) { + if (i < visible_lines - 1 || (int)lines_rid.size() == 1) { TS->shaped_text_fit_to_width(lines_rid[i], width, flags); } else if (i == (visible_lines - 1)) { TS->shaped_text_overrun_trim_to_width(lines_rid[visible_lines - 1], width, overrun_flags); @@ -238,7 +238,7 @@ void TextParagraph::_shape_lines() { } else { // Autowrap disabled. - for (int i = 0; i < lines_rid.size(); i++) { + for (int i = 0; i < (int)lines_rid.size(); i++) { if (alignment == HORIZONTAL_ALIGNMENT_FILL) { TS->shaped_text_fit_to_width(lines_rid[i], width, flags); overrun_flags |= TextServer::OVERRUN_JUSTIFICATION_AWARE; @@ -258,8 +258,10 @@ RID TextParagraph::get_rid() const { } RID TextParagraph::get_line_rid(int p_line) const { + _THREAD_SAFE_METHOD_ + const_cast<TextParagraph *>(this)->_shape_lines(); - ERR_FAIL_COND_V(p_line < 0 || p_line >= lines_rid.size(), RID()); + ERR_FAIL_COND_V(p_line < 0 || p_line >= (int)lines_rid.size(), RID()); return lines_rid[p_line]; } @@ -268,9 +270,11 @@ RID TextParagraph::get_dropcap_rid() const { } void TextParagraph::clear() { + _THREAD_SAFE_METHOD_ + spacing_top = 0; spacing_bottom = 0; - for (int i = 0; i < lines_rid.size(); i++) { + for (int i = 0; i < (int)lines_rid.size(); i++) { TS->free_rid(lines_rid[i]); } lines_rid.clear(); @@ -279,57 +283,79 @@ void TextParagraph::clear() { } void TextParagraph::set_preserve_invalid(bool p_enabled) { + _THREAD_SAFE_METHOD_ + TS->shaped_text_set_preserve_invalid(rid, p_enabled); TS->shaped_text_set_preserve_invalid(dropcap_rid, p_enabled); lines_dirty = true; } bool TextParagraph::get_preserve_invalid() const { + _THREAD_SAFE_METHOD_ + return TS->shaped_text_get_preserve_invalid(rid); } void TextParagraph::set_preserve_control(bool p_enabled) { + _THREAD_SAFE_METHOD_ + TS->shaped_text_set_preserve_control(rid, p_enabled); TS->shaped_text_set_preserve_control(dropcap_rid, p_enabled); lines_dirty = true; } bool TextParagraph::get_preserve_control() const { + _THREAD_SAFE_METHOD_ + return TS->shaped_text_get_preserve_control(rid); } void TextParagraph::set_direction(TextServer::Direction p_direction) { + _THREAD_SAFE_METHOD_ + TS->shaped_text_set_direction(rid, p_direction); TS->shaped_text_set_direction(dropcap_rid, p_direction); lines_dirty = true; } TextServer::Direction TextParagraph::get_direction() const { + _THREAD_SAFE_METHOD_ + const_cast<TextParagraph *>(this)->_shape_lines(); return TS->shaped_text_get_direction(rid); } void TextParagraph::set_custom_punctuation(const String &p_punct) { + _THREAD_SAFE_METHOD_ + TS->shaped_text_set_custom_punctuation(rid, p_punct); lines_dirty = true; } String TextParagraph::get_custom_punctuation() const { + _THREAD_SAFE_METHOD_ + return TS->shaped_text_get_custom_punctuation(rid); } void TextParagraph::set_orientation(TextServer::Orientation p_orientation) { + _THREAD_SAFE_METHOD_ + TS->shaped_text_set_orientation(rid, p_orientation); TS->shaped_text_set_orientation(dropcap_rid, p_orientation); lines_dirty = true; } TextServer::Orientation TextParagraph::get_orientation() const { + _THREAD_SAFE_METHOD_ + const_cast<TextParagraph *>(this)->_shape_lines(); return TS->shaped_text_get_orientation(rid); } bool TextParagraph::set_dropcap(const String &p_text, const Ref<Font> &p_fonts, int p_size, const Rect2 &p_dropcap_margins, const Dictionary &p_opentype_features, const String &p_language) { + _THREAD_SAFE_METHOD_ + ERR_FAIL_COND_V(p_fonts.is_null(), false); TS->shaped_text_clear(dropcap_rid); dropcap_margins = p_dropcap_margins; @@ -339,12 +365,16 @@ bool TextParagraph::set_dropcap(const String &p_text, const Ref<Font> &p_fonts, } void TextParagraph::clear_dropcap() { + _THREAD_SAFE_METHOD_ + dropcap_margins = Rect2(); TS->shaped_text_clear(dropcap_rid); lines_dirty = true; } bool TextParagraph::add_string(const String &p_text, const Ref<Font> &p_fonts, int p_size, const Dictionary &p_opentype_features, const String &p_language, const Variant &p_meta) { + _THREAD_SAFE_METHOD_ + ERR_FAIL_COND_V(p_fonts.is_null(), false); bool res = TS->shaped_text_add_string(rid, p_text, p_fonts->get_rids(), p_size, p_opentype_features, p_language, p_meta); spacing_top = p_fonts->get_spacing(TextServer::SPACING_TOP); @@ -362,23 +392,31 @@ int TextParagraph::get_spacing_bottom() const { } void TextParagraph::set_bidi_override(const Array &p_override) { + _THREAD_SAFE_METHOD_ + TS->shaped_text_set_bidi_override(rid, p_override); lines_dirty = true; } bool TextParagraph::add_object(Variant p_key, const Size2 &p_size, InlineAlignment p_inline_align, int p_length) { + _THREAD_SAFE_METHOD_ + bool res = TS->shaped_text_add_object(rid, p_key, p_size, p_inline_align, p_length); lines_dirty = true; return res; } bool TextParagraph::resize_object(Variant p_key, const Size2 &p_size, InlineAlignment p_inline_align) { + _THREAD_SAFE_METHOD_ + bool res = TS->shaped_text_resize_object(rid, p_key, p_size, p_inline_align); lines_dirty = true; return res; } void TextParagraph::set_alignment(HorizontalAlignment p_alignment) { + _THREAD_SAFE_METHOD_ + if (alignment != p_alignment) { if (alignment == HORIZONTAL_ALIGNMENT_FILL || p_alignment == HORIZONTAL_ALIGNMENT_FILL) { alignment = p_alignment; @@ -394,11 +432,15 @@ HorizontalAlignment TextParagraph::get_alignment() const { } void TextParagraph::tab_align(const Vector<float> &p_tab_stops) { + _THREAD_SAFE_METHOD_ + tab_stops = p_tab_stops; lines_dirty = true; } void TextParagraph::set_flags(uint16_t p_flags) { + _THREAD_SAFE_METHOD_ + if (flags != p_flags) { flags = p_flags; lines_dirty = true; @@ -410,6 +452,8 @@ uint16_t TextParagraph::get_flags() const { } void TextParagraph::set_text_overrun_behavior(TextParagraph::OverrunBehavior p_behavior) { + _THREAD_SAFE_METHOD_ + if (overrun_behavior != p_behavior) { overrun_behavior = p_behavior; lines_dirty = true; @@ -421,6 +465,8 @@ TextParagraph::OverrunBehavior TextParagraph::get_text_overrun_behavior() const } void TextParagraph::set_width(float p_width) { + _THREAD_SAFE_METHOD_ + if (width != p_width) { width = p_width; lines_dirty = true; @@ -432,6 +478,8 @@ float TextParagraph::get_width() const { } Size2 TextParagraph::get_non_wrapped_size() const { + _THREAD_SAFE_METHOD_ + const_cast<TextParagraph *>(this)->_shape_lines(); if (TS->shaped_text_get_orientation(rid) == TextServer::ORIENTATION_HORIZONTAL) { return Size2(TS->shaped_text_get_size(rid).x, TS->shaped_text_get_size(rid).y + spacing_top + spacing_bottom); @@ -441,9 +489,11 @@ Size2 TextParagraph::get_non_wrapped_size() const { } Size2 TextParagraph::get_size() const { + _THREAD_SAFE_METHOD_ + const_cast<TextParagraph *>(this)->_shape_lines(); Size2 size; - int visible_lines = (max_lines_visible >= 0) ? MIN(max_lines_visible, lines_rid.size()) : lines_rid.size(); + int visible_lines = (max_lines_visible >= 0) ? MIN(max_lines_visible, (int)lines_rid.size()) : (int)lines_rid.size(); for (int i = 0; i < visible_lines; i++) { Size2 lsize = TS->shaped_text_get_size(lines_rid[i]); if (TS->shaped_text_get_orientation(lines_rid[i]) == TextServer::ORIENTATION_HORIZONTAL) { @@ -458,11 +508,15 @@ Size2 TextParagraph::get_size() const { } int TextParagraph::get_line_count() const { + _THREAD_SAFE_METHOD_ + const_cast<TextParagraph *>(this)->_shape_lines(); - return lines_rid.size(); + return (int)lines_rid.size(); } void TextParagraph::set_max_lines_visible(int p_lines) { + _THREAD_SAFE_METHOD_ + if (p_lines != max_lines_visible) { max_lines_visible = p_lines; lines_dirty = true; @@ -474,14 +528,18 @@ int TextParagraph::get_max_lines_visible() const { } Array TextParagraph::get_line_objects(int p_line) const { + _THREAD_SAFE_METHOD_ + const_cast<TextParagraph *>(this)->_shape_lines(); - ERR_FAIL_COND_V(p_line < 0 || p_line >= lines_rid.size(), Array()); + ERR_FAIL_COND_V(p_line < 0 || p_line >= (int)lines_rid.size(), Array()); return TS->shaped_text_get_objects(lines_rid[p_line]); } Rect2 TextParagraph::get_line_object_rect(int p_line, Variant p_key) const { + _THREAD_SAFE_METHOD_ + const_cast<TextParagraph *>(this)->_shape_lines(); - ERR_FAIL_COND_V(p_line < 0 || p_line >= lines_rid.size(), Rect2()); + ERR_FAIL_COND_V(p_line < 0 || p_line >= (int)lines_rid.size(), Rect2()); Rect2 xrect = TS->shaped_text_get_object_rect(lines_rid[p_line], p_key); for (int i = 0; i < p_line; i++) { Size2 lsize = TS->shaped_text_get_size(lines_rid[i]); @@ -495,8 +553,10 @@ Rect2 TextParagraph::get_line_object_rect(int p_line, Variant p_key) const { } Size2 TextParagraph::get_line_size(int p_line) const { + _THREAD_SAFE_METHOD_ + const_cast<TextParagraph *>(this)->_shape_lines(); - ERR_FAIL_COND_V(p_line < 0 || p_line >= lines_rid.size(), Size2()); + ERR_FAIL_COND_V(p_line < 0 || p_line >= (int)lines_rid.size(), Size2()); if (TS->shaped_text_get_orientation(lines_rid[p_line]) == TextServer::ORIENTATION_HORIZONTAL) { return Size2(TS->shaped_text_get_size(lines_rid[p_line]).x, TS->shaped_text_get_size(lines_rid[p_line]).y + spacing_top + spacing_bottom); } else { @@ -505,42 +565,56 @@ Size2 TextParagraph::get_line_size(int p_line) const { } Vector2i TextParagraph::get_line_range(int p_line) const { + _THREAD_SAFE_METHOD_ + const_cast<TextParagraph *>(this)->_shape_lines(); - ERR_FAIL_COND_V(p_line < 0 || p_line >= lines_rid.size(), Vector2i()); + ERR_FAIL_COND_V(p_line < 0 || p_line >= (int)lines_rid.size(), Vector2i()); return TS->shaped_text_get_range(lines_rid[p_line]); } float TextParagraph::get_line_ascent(int p_line) const { + _THREAD_SAFE_METHOD_ + const_cast<TextParagraph *>(this)->_shape_lines(); - ERR_FAIL_COND_V(p_line < 0 || p_line >= lines_rid.size(), 0.f); + ERR_FAIL_COND_V(p_line < 0 || p_line >= (int)lines_rid.size(), 0.f); return TS->shaped_text_get_ascent(lines_rid[p_line]) + spacing_top; } float TextParagraph::get_line_descent(int p_line) const { + _THREAD_SAFE_METHOD_ + const_cast<TextParagraph *>(this)->_shape_lines(); - ERR_FAIL_COND_V(p_line < 0 || p_line >= lines_rid.size(), 0.f); + ERR_FAIL_COND_V(p_line < 0 || p_line >= (int)lines_rid.size(), 0.f); return TS->shaped_text_get_descent(lines_rid[p_line]) + spacing_bottom; } float TextParagraph::get_line_width(int p_line) const { + _THREAD_SAFE_METHOD_ + const_cast<TextParagraph *>(this)->_shape_lines(); - ERR_FAIL_COND_V(p_line < 0 || p_line >= lines_rid.size(), 0.f); + ERR_FAIL_COND_V(p_line < 0 || p_line >= (int)lines_rid.size(), 0.f); return TS->shaped_text_get_width(lines_rid[p_line]); } float TextParagraph::get_line_underline_position(int p_line) const { + _THREAD_SAFE_METHOD_ + const_cast<TextParagraph *>(this)->_shape_lines(); - ERR_FAIL_COND_V(p_line < 0 || p_line >= lines_rid.size(), 0.f); + ERR_FAIL_COND_V(p_line < 0 || p_line >= (int)lines_rid.size(), 0.f); return TS->shaped_text_get_underline_position(lines_rid[p_line]); } float TextParagraph::get_line_underline_thickness(int p_line) const { + _THREAD_SAFE_METHOD_ + const_cast<TextParagraph *>(this)->_shape_lines(); - ERR_FAIL_COND_V(p_line < 0 || p_line >= lines_rid.size(), 0.f); + ERR_FAIL_COND_V(p_line < 0 || p_line >= (int)lines_rid.size(), 0.f); return TS->shaped_text_get_underline_thickness(lines_rid[p_line]); } Size2 TextParagraph::get_dropcap_size() const { + _THREAD_SAFE_METHOD_ + return TS->shaped_text_get_size(dropcap_rid) + dropcap_margins.size + dropcap_margins.position; } @@ -549,6 +623,8 @@ int TextParagraph::get_dropcap_lines() const { } void TextParagraph::draw(RID p_canvas, const Vector2 &p_pos, const Color &p_color, const Color &p_dc_color) const { + _THREAD_SAFE_METHOD_ + const_cast<TextParagraph *>(this)->_shape_lines(); Vector2 ofs = p_pos; float h_offset = 0.f; @@ -571,7 +647,7 @@ void TextParagraph::draw(RID p_canvas, const Vector2 &p_pos, const Color &p_colo TS->shaped_text_draw(dropcap_rid, p_canvas, dc_off + Vector2(0, TS->shaped_text_get_ascent(dropcap_rid) + dropcap_margins.size.y + dropcap_margins.position.y / 2), -1, -1, p_dc_color); } - int lines_visible = (max_lines_visible >= 0) ? MIN(max_lines_visible, lines_rid.size()) : lines_rid.size(); + int lines_visible = (max_lines_visible >= 0) ? MIN(max_lines_visible, (int)lines_rid.size()) : (int)lines_rid.size(); for (int i = 0; i < lines_visible; i++) { float l_width = width; @@ -650,6 +726,8 @@ void TextParagraph::draw(RID p_canvas, const Vector2 &p_pos, const Color &p_colo } void TextParagraph::draw_outline(RID p_canvas, const Vector2 &p_pos, int p_outline_size, const Color &p_color, const Color &p_dc_color) const { + _THREAD_SAFE_METHOD_ + const_cast<TextParagraph *>(this)->_shape_lines(); Vector2 ofs = p_pos; @@ -673,7 +751,7 @@ void TextParagraph::draw_outline(RID p_canvas, const Vector2 &p_pos, int p_outli TS->shaped_text_draw_outline(dropcap_rid, p_canvas, dc_off + Vector2(dropcap_margins.position.x, TS->shaped_text_get_ascent(dropcap_rid) + dropcap_margins.position.y), -1, -1, p_outline_size, p_dc_color); } - for (int i = 0; i < lines_rid.size(); i++) { + for (int i = 0; i < (int)lines_rid.size(); i++) { float l_width = width; if (TS->shaped_text_get_orientation(lines_rid[i]) == TextServer::ORIENTATION_HORIZONTAL) { ofs.x = p_pos.x; @@ -750,6 +828,8 @@ void TextParagraph::draw_outline(RID p_canvas, const Vector2 &p_pos, int p_outli } int TextParagraph::hit_test(const Point2 &p_coords) const { + _THREAD_SAFE_METHOD_ + const_cast<TextParagraph *>(this)->_shape_lines(); Vector2 ofs; if (TS->shaped_text_get_orientation(rid) == TextServer::ORIENTATION_HORIZONTAL) { @@ -761,7 +841,7 @@ int TextParagraph::hit_test(const Point2 &p_coords) const { return 0; } } - for (int i = 0; i < lines_rid.size(); i++) { + for (int i = 0; i < (int)lines_rid.size(); i++) { if (TS->shaped_text_get_orientation(lines_rid[i]) == TextServer::ORIENTATION_HORIZONTAL) { if ((p_coords.y >= ofs.y) && (p_coords.y <= ofs.y + TS->shaped_text_get_size(lines_rid[i]).y)) { return TS->shaped_text_hit_test_position(lines_rid[i], p_coords.x); @@ -778,6 +858,8 @@ int TextParagraph::hit_test(const Point2 &p_coords) const { } void TextParagraph::draw_dropcap(RID p_canvas, const Vector2 &p_pos, const Color &p_color) const { + _THREAD_SAFE_METHOD_ + Vector2 ofs = p_pos; float h_offset = 0.f; if (TS->shaped_text_get_orientation(dropcap_rid) == TextServer::ORIENTATION_HORIZONTAL) { @@ -800,6 +882,8 @@ void TextParagraph::draw_dropcap(RID p_canvas, const Vector2 &p_pos, const Color } void TextParagraph::draw_dropcap_outline(RID p_canvas, const Vector2 &p_pos, int p_outline_size, const Color &p_color) const { + _THREAD_SAFE_METHOD_ + Vector2 ofs = p_pos; float h_offset = 0.f; if (TS->shaped_text_get_orientation(dropcap_rid) == TextServer::ORIENTATION_HORIZONTAL) { @@ -822,8 +906,10 @@ void TextParagraph::draw_dropcap_outline(RID p_canvas, const Vector2 &p_pos, int } void TextParagraph::draw_line(RID p_canvas, const Vector2 &p_pos, int p_line, const Color &p_color) const { + _THREAD_SAFE_METHOD_ + const_cast<TextParagraph *>(this)->_shape_lines(); - ERR_FAIL_COND(p_line < 0 || p_line >= lines_rid.size()); + ERR_FAIL_COND(p_line < 0 || p_line >= (int)lines_rid.size()); Vector2 ofs = p_pos; @@ -836,8 +922,10 @@ void TextParagraph::draw_line(RID p_canvas, const Vector2 &p_pos, int p_line, co } void TextParagraph::draw_line_outline(RID p_canvas, const Vector2 &p_pos, int p_line, int p_outline_size, const Color &p_color) const { + _THREAD_SAFE_METHOD_ + const_cast<TextParagraph *>(this)->_shape_lines(); - ERR_FAIL_COND(p_line < 0 || p_line >= lines_rid.size()); + ERR_FAIL_COND(p_line < 0 || p_line >= (int)lines_rid.size()); Vector2 ofs = p_pos; if (TS->shaped_text_get_orientation(lines_rid[p_line]) == TextServer::ORIENTATION_HORIZONTAL) { @@ -862,7 +950,7 @@ TextParagraph::TextParagraph() { } TextParagraph::~TextParagraph() { - for (int i = 0; i < lines_rid.size(); i++) { + for (int i = 0; i < (int)lines_rid.size(); i++) { TS->free_rid(lines_rid[i]); } lines_rid.clear(); diff --git a/scene/resources/text_paragraph.h b/scene/resources/text_paragraph.h index 8a8a53943b..4f1aad16b5 100644 --- a/scene/resources/text_paragraph.h +++ b/scene/resources/text_paragraph.h @@ -31,6 +31,7 @@ #ifndef TEXT_PARAGRAPH_H #define TEXT_PARAGRAPH_H +#include "core/templates/local_vector.h" #include "scene/resources/font.h" #include "servers/text_server.h" @@ -38,6 +39,7 @@ class TextParagraph : public RefCounted { GDCLASS(TextParagraph, RefCounted); + _THREAD_SAFE_CLASS_ public: enum OverrunBehavior { @@ -54,7 +56,7 @@ private: Rect2 dropcap_margins; RID rid; - Vector<RID> lines_rid; + LocalVector<RID> lines_rid; int spacing_top = 0; int spacing_bottom = 0; @@ -156,6 +158,8 @@ public: int hit_test(const Point2 &p_coords) const; + Mutex &get_mutex() const { return _thread_safe_; }; + TextParagraph(const String &p_text, const Ref<Font> &p_fonts, int p_size, const Dictionary &p_opentype_features = Dictionary(), const String &p_language = "", float p_width = -1.f, TextServer::Direction p_direction = TextServer::DIRECTION_AUTO, TextServer::Orientation p_orientation = TextServer::ORIENTATION_HORIZONTAL); TextParagraph(); ~TextParagraph(); diff --git a/scene/resources/texture.cpp b/scene/resources/texture.cpp index 5850d253e3..9442a58ac1 100644 --- a/scene/resources/texture.cpp +++ b/scene/resources/texture.cpp @@ -175,8 +175,8 @@ bool ImageTexture::_get(const StringName &p_name, Variant &r_ret) const { } void ImageTexture::_get_property_list(List<PropertyInfo> *p_list) const { - p_list->push_back(PropertyInfo(Variant::OBJECT, "image", PROPERTY_HINT_RESOURCE_TYPE, "Image", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESOURCE_NOT_PERSISTENT)); - p_list->push_back(PropertyInfo(Variant::VECTOR2, "size", PROPERTY_HINT_NONE, "")); + p_list->push_back(PropertyInfo(Variant::OBJECT, PNAME("image"), PROPERTY_HINT_RESOURCE_TYPE, "Image", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESOURCE_NOT_PERSISTENT)); + p_list->push_back(PropertyInfo(Variant::VECTOR2, PNAME("size"), PROPERTY_HINT_NONE, "")); } void ImageTexture::create_from_image(const Ref<Image> &p_image) { diff --git a/scene/resources/theme.cpp b/scene/resources/theme.cpp index 1e57933000..2981f38766 100644 --- a/scene/resources/theme.cpp +++ b/scene/resources/theme.cpp @@ -129,42 +129,42 @@ void Theme::_get_property_list(List<PropertyInfo> *p_list) const { } // Icons. - for (const KeyValue<StringName, HashMap<StringName, Ref<Texture2D>>> &E : icon_map) { + for (const KeyValue<StringName, ThemeIconMap> &E : icon_map) { for (const KeyValue<StringName, Ref<Texture2D>> &F : E.value) { list.push_back(PropertyInfo(Variant::OBJECT, String() + E.key + "/icons/" + F.key, PROPERTY_HINT_RESOURCE_TYPE, "Texture2D", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_STORE_IF_NULL)); } } // Styles. - for (const KeyValue<StringName, HashMap<StringName, Ref<StyleBox>>> &E : style_map) { + for (const KeyValue<StringName, ThemeStyleMap> &E : style_map) { for (const KeyValue<StringName, Ref<StyleBox>> &F : E.value) { list.push_back(PropertyInfo(Variant::OBJECT, String() + E.key + "/styles/" + F.key, PROPERTY_HINT_RESOURCE_TYPE, "StyleBox", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_STORE_IF_NULL)); } } // Fonts. - for (const KeyValue<StringName, HashMap<StringName, Ref<Font>>> &E : font_map) { + for (const KeyValue<StringName, ThemeFontMap> &E : font_map) { for (const KeyValue<StringName, Ref<Font>> &F : E.value) { list.push_back(PropertyInfo(Variant::OBJECT, String() + E.key + "/fonts/" + F.key, PROPERTY_HINT_RESOURCE_TYPE, "Font", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_STORE_IF_NULL)); } } // Font sizes. - for (const KeyValue<StringName, HashMap<StringName, int>> &E : font_size_map) { + for (const KeyValue<StringName, ThemeFontSizeMap> &E : font_size_map) { for (const KeyValue<StringName, int> &F : E.value) { list.push_back(PropertyInfo(Variant::INT, String() + E.key + "/font_sizes/" + F.key, PROPERTY_HINT_RANGE, "0,256,1,or_greater")); } } // Colors. - for (const KeyValue<StringName, HashMap<StringName, Color>> &E : color_map) { + for (const KeyValue<StringName, ThemeColorMap> &E : color_map) { for (const KeyValue<StringName, Color> &F : E.value) { - list.push_back(PropertyInfo(Variant::INT, String() + E.key + "/colors/" + F.key)); + list.push_back(PropertyInfo(Variant::COLOR, String() + E.key + "/colors/" + F.key)); } } // Constants. - for (const KeyValue<StringName, HashMap<StringName, int>> &E : constant_map) { + for (const KeyValue<StringName, ThemeConstantMap> &E : constant_map) { for (const KeyValue<StringName, int> &F : E.value) { list.push_back(PropertyInfo(Variant::INT, String() + E.key + "/constants/" + F.key)); } @@ -407,7 +407,7 @@ void Theme::add_icon_type(const StringName &p_theme_type) { if (icon_map.has(p_theme_type)) { return; } - icon_map[p_theme_type] = HashMap<StringName, Ref<Texture2D>>(); + icon_map[p_theme_type] = ThemeIconMap(); } void Theme::remove_icon_type(const StringName &p_theme_type) { @@ -432,7 +432,7 @@ void Theme::remove_icon_type(const StringName &p_theme_type) { void Theme::get_icon_type_list(List<StringName> *p_list) const { ERR_FAIL_NULL(p_list); - for (const KeyValue<StringName, HashMap<StringName, Ref<Texture2D>>> &E : icon_map) { + for (const KeyValue<StringName, ThemeIconMap> &E : icon_map) { p_list->push_back(E.key); } } @@ -517,7 +517,7 @@ void Theme::add_stylebox_type(const StringName &p_theme_type) { if (style_map.has(p_theme_type)) { return; } - style_map[p_theme_type] = HashMap<StringName, Ref<StyleBox>>(); + style_map[p_theme_type] = ThemeStyleMap(); } void Theme::remove_stylebox_type(const StringName &p_theme_type) { @@ -542,7 +542,7 @@ void Theme::remove_stylebox_type(const StringName &p_theme_type) { void Theme::get_stylebox_type_list(List<StringName> *p_list) const { ERR_FAIL_NULL(p_list); - for (const KeyValue<StringName, HashMap<StringName, Ref<StyleBox>>> &E : style_map) { + for (const KeyValue<StringName, ThemeStyleMap> &E : style_map) { p_list->push_back(E.key); } } @@ -629,7 +629,7 @@ void Theme::add_font_type(const StringName &p_theme_type) { if (font_map.has(p_theme_type)) { return; } - font_map[p_theme_type] = HashMap<StringName, Ref<Font>>(); + font_map[p_theme_type] = ThemeFontMap(); } void Theme::remove_font_type(const StringName &p_theme_type) { @@ -654,7 +654,7 @@ void Theme::remove_font_type(const StringName &p_theme_type) { void Theme::get_font_type_list(List<StringName> *p_list) const { ERR_FAIL_NULL(p_list); - for (const KeyValue<StringName, HashMap<StringName, Ref<Font>>> &E : font_map) { + for (const KeyValue<StringName, ThemeFontMap> &E : font_map) { p_list->push_back(E.key); } } @@ -728,7 +728,7 @@ void Theme::add_font_size_type(const StringName &p_theme_type) { if (font_size_map.has(p_theme_type)) { return; } - font_size_map[p_theme_type] = HashMap<StringName, int>(); + font_size_map[p_theme_type] = ThemeFontSizeMap(); } void Theme::remove_font_size_type(const StringName &p_theme_type) { @@ -742,7 +742,7 @@ void Theme::remove_font_size_type(const StringName &p_theme_type) { void Theme::get_font_size_type_list(List<StringName> *p_list) const { ERR_FAIL_NULL(p_list); - for (const KeyValue<StringName, HashMap<StringName, int>> &E : font_size_map) { + for (const KeyValue<StringName, ThemeFontSizeMap> &E : font_size_map) { p_list->push_back(E.key); } } @@ -814,7 +814,7 @@ void Theme::add_color_type(const StringName &p_theme_type) { if (color_map.has(p_theme_type)) { return; } - color_map[p_theme_type] = HashMap<StringName, Color>(); + color_map[p_theme_type] = ThemeColorMap(); } void Theme::remove_color_type(const StringName &p_theme_type) { @@ -828,7 +828,7 @@ void Theme::remove_color_type(const StringName &p_theme_type) { void Theme::get_color_type_list(List<StringName> *p_list) const { ERR_FAIL_NULL(p_list); - for (const KeyValue<StringName, HashMap<StringName, Color>> &E : color_map) { + for (const KeyValue<StringName, ThemeColorMap> &E : color_map) { p_list->push_back(E.key); } } @@ -900,7 +900,7 @@ void Theme::add_constant_type(const StringName &p_theme_type) { if (constant_map.has(p_theme_type)) { return; } - constant_map[p_theme_type] = HashMap<StringName, int>(); + constant_map[p_theme_type] = ThemeConstantMap(); } void Theme::remove_constant_type(const StringName &p_theme_type) { @@ -914,7 +914,7 @@ void Theme::remove_constant_type(const StringName &p_theme_type) { void Theme::get_constant_type_list(List<StringName> *p_list) const { ERR_FAIL_NULL(p_list); - for (const KeyValue<StringName, HashMap<StringName, int>> &E : constant_map) { + for (const KeyValue<StringName, ThemeConstantMap> &E : constant_map) { p_list->push_back(E.key); } } @@ -1272,12 +1272,44 @@ void Theme::remove_type(const StringName &p_theme_type) { void Theme::get_type_list(List<StringName> *p_list) const { ERR_FAIL_NULL(p_list); - get_icon_type_list(p_list); - get_stylebox_type_list(p_list); - get_font_type_list(p_list); - get_font_size_type_list(p_list); - get_color_type_list(p_list); - get_constant_type_list(p_list); + // This Set guarantees uniqueness. + // Because each map can have the same type defined, but for this method + // we only want one occurrence of each type. + RBSet<StringName> types; + + // Icons. + for (const KeyValue<StringName, ThemeIconMap> &E : icon_map) { + types.insert(E.key); + } + + // Styles. + for (const KeyValue<StringName, ThemeStyleMap> &E : style_map) { + types.insert(E.key); + } + + // Fonts. + for (const KeyValue<StringName, ThemeFontMap> &E : font_map) { + types.insert(E.key); + } + + // Font sizes. + for (const KeyValue<StringName, ThemeFontSizeMap> &E : font_size_map) { + types.insert(E.key); + } + + // Colors. + for (const KeyValue<StringName, ThemeColorMap> &E : color_map) { + types.insert(E.key); + } + + // Constants. + for (const KeyValue<StringName, ThemeConstantMap> &E : constant_map) { + types.insert(E.key); + } + + for (const StringName &E : types) { + p_list->push_back(E); + } } void Theme::get_type_dependencies(const StringName &p_base_type, const StringName &p_type_variation, List<StringName> *p_list) { @@ -1588,7 +1620,7 @@ void Theme::merge_with(const Ref<Theme> &p_other) { // Colors. { - for (const KeyValue<StringName, HashMap<StringName, Color>> &E : p_other->color_map) { + for (const KeyValue<StringName, ThemeColorMap> &E : p_other->color_map) { for (const KeyValue<StringName, Color> &F : E.value) { set_color(F.key, E.key, F.value); } @@ -1597,7 +1629,7 @@ void Theme::merge_with(const Ref<Theme> &p_other) { // Constants. { - for (const KeyValue<StringName, HashMap<StringName, int>> &E : p_other->constant_map) { + for (const KeyValue<StringName, ThemeConstantMap> &E : p_other->constant_map) { for (const KeyValue<StringName, int> &F : E.value) { set_constant(F.key, E.key, F.value); } @@ -1606,7 +1638,7 @@ void Theme::merge_with(const Ref<Theme> &p_other) { // Fonts. { - for (const KeyValue<StringName, HashMap<StringName, Ref<Font>>> &E : p_other->font_map) { + for (const KeyValue<StringName, ThemeFontMap> &E : p_other->font_map) { for (const KeyValue<StringName, Ref<Font>> &F : E.value) { set_font(F.key, E.key, F.value); } @@ -1615,7 +1647,7 @@ void Theme::merge_with(const Ref<Theme> &p_other) { // Font sizes. { - for (const KeyValue<StringName, HashMap<StringName, int>> &E : p_other->font_size_map) { + for (const KeyValue<StringName, ThemeFontSizeMap> &E : p_other->font_size_map) { for (const KeyValue<StringName, int> &F : E.value) { set_font_size(F.key, E.key, F.value); } @@ -1624,7 +1656,7 @@ void Theme::merge_with(const Ref<Theme> &p_other) { // Icons. { - for (const KeyValue<StringName, HashMap<StringName, Ref<Texture2D>>> &E : p_other->icon_map) { + for (const KeyValue<StringName, ThemeIconMap> &E : p_other->icon_map) { for (const KeyValue<StringName, Ref<Texture2D>> &F : E.value) { set_icon(F.key, E.key, F.value); } @@ -1633,7 +1665,7 @@ void Theme::merge_with(const Ref<Theme> &p_other) { // Styleboxes. { - for (const KeyValue<StringName, HashMap<StringName, Ref<StyleBox>>> &E : p_other->style_map) { + for (const KeyValue<StringName, ThemeStyleMap> &E : p_other->style_map) { for (const KeyValue<StringName, Ref<StyleBox>> &F : E.value) { set_stylebox(F.key, E.key, F.value); } @@ -1653,7 +1685,7 @@ void Theme::merge_with(const Ref<Theme> &p_other) { void Theme::clear() { // These items need disconnecting. { - for (const KeyValue<StringName, HashMap<StringName, Ref<Texture2D>>> &E : icon_map) { + for (const KeyValue<StringName, ThemeIconMap> &E : icon_map) { for (const KeyValue<StringName, Ref<Texture2D>> &F : E.value) { if (F.value.is_valid()) { Ref<Texture2D> icon = F.value; @@ -1664,7 +1696,7 @@ void Theme::clear() { } { - for (const KeyValue<StringName, HashMap<StringName, Ref<StyleBox>>> &E : style_map) { + for (const KeyValue<StringName, ThemeStyleMap> &E : style_map) { for (const KeyValue<StringName, Ref<StyleBox>> &F : E.value) { if (F.value.is_valid()) { Ref<StyleBox> style = F.value; @@ -1675,7 +1707,7 @@ void Theme::clear() { } { - for (const KeyValue<StringName, HashMap<StringName, Ref<Font>>> &E : font_map) { + for (const KeyValue<StringName, ThemeFontMap> &E : font_map) { for (const KeyValue<StringName, Ref<Font>> &F : E.value) { if (F.value.is_valid()) { Ref<Font> font = F.value; diff --git a/scene/resources/theme.h b/scene/resources/theme.h index f8f1e95634..87d7d2fdea 100644 --- a/scene/resources/theme.h +++ b/scene/resources/theme.h @@ -47,6 +47,13 @@ class Theme : public Resource { #endif public: + using ThemeIconMap = HashMap<StringName, Ref<Texture2D>>; + using ThemeStyleMap = HashMap<StringName, Ref<StyleBox>>; + using ThemeFontMap = HashMap<StringName, Ref<Font>>; + using ThemeFontSizeMap = HashMap<StringName, int>; + using ThemeColorMap = HashMap<StringName, Color>; + using ThemeConstantMap = HashMap<StringName, int>; + enum DataType { DATA_TYPE_COLOR, DATA_TYPE_CONSTANT, @@ -62,12 +69,12 @@ private: void _emit_theme_changed(bool p_notify_list_changed = false); - HashMap<StringName, HashMap<StringName, Ref<Texture2D>>> icon_map; - HashMap<StringName, HashMap<StringName, Ref<StyleBox>>> style_map; - HashMap<StringName, HashMap<StringName, Ref<Font>>> font_map; - HashMap<StringName, HashMap<StringName, int>> font_size_map; - HashMap<StringName, HashMap<StringName, Color>> color_map; - HashMap<StringName, HashMap<StringName, int>> constant_map; + HashMap<StringName, ThemeIconMap> icon_map; + HashMap<StringName, ThemeStyleMap> style_map; + HashMap<StringName, ThemeFontMap> font_map; + HashMap<StringName, ThemeFontSizeMap> font_size_map; + HashMap<StringName, ThemeColorMap> color_map; + HashMap<StringName, ThemeConstantMap> constant_map; HashMap<StringName, StringName> variation_map; HashMap<StringName, List<StringName>> variation_base_map; diff --git a/scene/resources/tile_set.cpp b/scene/resources/tile_set.cpp index cee3f85c32..e22b8efaae 100644 --- a/scene/resources/tile_set.cpp +++ b/scene/resources/tile_set.cpp @@ -1369,12 +1369,12 @@ TileMapCell TileSet::get_random_tile_from_terrains_pattern(int p_terrain_set, Ti // Count the sum of probabilities. double sum = 0.0; RBSet<TileMapCell> set = per_terrain_pattern_tiles[p_terrain_set][p_terrain_tile_pattern]; - for (RBSet<TileMapCell>::Element *E = set.front(); E; E = E->next()) { - if (E->get().source_id >= 0) { - Ref<TileSetSource> source = sources[E->get().source_id]; + for (const TileMapCell &E : set) { + if (E.source_id >= 0) { + Ref<TileSetSource> source = sources[E.source_id]; Ref<TileSetAtlasSource> atlas_source = source; if (atlas_source.is_valid()) { - TileData *tile_data = atlas_source->get_tile_data(E->get().get_atlas_coords(), E->get().alternative_tile); + TileData *tile_data = atlas_source->get_tile_data(E.get_atlas_coords(), E.alternative_tile); sum += tile_data->get_probability(); } else { sum += 1.0; @@ -1389,13 +1389,13 @@ TileMapCell TileSet::get_random_tile_from_terrains_pattern(int p_terrain_set, Ti double picked = Math::random(0.0, sum); // Pick the tile. - for (RBSet<TileMapCell>::Element *E = set.front(); E; E = E->next()) { - if (E->get().source_id >= 0) { - Ref<TileSetSource> source = sources[E->get().source_id]; + for (const TileMapCell &E : set) { + if (E.source_id >= 0) { + Ref<TileSetSource> source = sources[E.source_id]; Ref<TileSetAtlasSource> atlas_source = source; if (atlas_source.is_valid()) { - TileData *tile_data = atlas_source->get_tile_data(E->get().get_atlas_coords(), E->get().alternative_tile); + TileData *tile_data = atlas_source->get_tile_data(E.get_atlas_coords(), E.alternative_tile); count += tile_data->get_probability(); } else { count += 1.0; @@ -1405,7 +1405,7 @@ TileMapCell TileSet::get_random_tile_from_terrains_pattern(int p_terrain_set, Ti } if (count >= picked) { - return E->get(); + return E; } } diff --git a/scene/resources/visual_shader.cpp b/scene/resources/visual_shader.cpp index 8e7824665f..d361aa876b 100644 --- a/scene/resources/visual_shader.cpp +++ b/scene/resources/visual_shader.cpp @@ -1547,7 +1547,7 @@ void VisualShader::reset_state() { } void VisualShader::_get_property_list(List<PropertyInfo> *p_list) const { //mode - p_list->push_back(PropertyInfo(Variant::INT, "mode", PROPERTY_HINT_ENUM, "Node3D,CanvasItem,Particles,Sky,Fog")); + p_list->push_back(PropertyInfo(Variant::INT, PNAME("mode"), PROPERTY_HINT_ENUM, "Node3D,CanvasItem,Particles,Sky,Fog")); //render modes HashMap<String, String> blend_mode_enums; @@ -1576,15 +1576,15 @@ void VisualShader::_get_property_list(List<PropertyInfo> *p_list) const { } for (const KeyValue<String, String> &E : blend_mode_enums) { - p_list->push_back(PropertyInfo(Variant::INT, "modes/" + E.key, PROPERTY_HINT_ENUM, E.value)); + p_list->push_back(PropertyInfo(Variant::INT, vformat("%s/%s", PNAME("modes"), E.key), PROPERTY_HINT_ENUM, E.value)); } - for (RBSet<String>::Element *E = toggles.front(); E; E = E->next()) { - p_list->push_back(PropertyInfo(Variant::BOOL, "flags/" + E->get())); + for (const String &E : toggles) { + p_list->push_back(PropertyInfo(Variant::BOOL, vformat("%s/%s", PNAME("flags"), E))); } for (const KeyValue<String, Varying> &E : varyings) { - p_list->push_back(PropertyInfo(Variant::STRING, "varyings/" + E.key)); + p_list->push_back(PropertyInfo(Variant::STRING, vformat("%s/%s", PNAME("varyings"), E.key))); } for (int i = 0; i < TYPE_MAX; i++) { diff --git a/servers/physics_2d/godot_physics_server_2d.cpp b/servers/physics_2d/godot_physics_server_2d.cpp index f82f2533f3..cb829e5d91 100644 --- a/servers/physics_2d/godot_physics_server_2d.cpp +++ b/servers/physics_2d/godot_physics_server_2d.cpp @@ -1250,11 +1250,11 @@ void GodotPhysicsServer2D::step(real_t p_step) { island_count = 0; active_objects = 0; collision_pairs = 0; - for (RBSet<const GodotSpace2D *>::Element *E = active_spaces.front(); E; E = E->next()) { - stepper->step(const_cast<GodotSpace2D *>(E->get()), p_step); - island_count += E->get()->get_island_count(); - active_objects += E->get()->get_active_objects(); - collision_pairs += E->get()->get_collision_pairs(); + for (const GodotSpace2D *E : active_spaces) { + stepper->step(const_cast<GodotSpace2D *>(E), p_step); + island_count += E->get_island_count(); + active_objects += E->get_active_objects(); + collision_pairs += E->get_collision_pairs(); } } @@ -1271,8 +1271,8 @@ void GodotPhysicsServer2D::flush_queries() { uint64_t time_beg = OS::get_singleton()->get_ticks_usec(); - for (RBSet<const GodotSpace2D *>::Element *E = active_spaces.front(); E; E = E->next()) { - GodotSpace2D *space = const_cast<GodotSpace2D *>(E->get()); + for (const GodotSpace2D *E : active_spaces) { + GodotSpace2D *space = const_cast<GodotSpace2D *>(E); space->call_queries(); } @@ -1292,9 +1292,9 @@ void GodotPhysicsServer2D::flush_queries() { total_time[i] = 0; } - for (RBSet<const GodotSpace2D *>::Element *E = active_spaces.front(); E; E = E->next()) { + for (const GodotSpace2D *E : active_spaces) { for (int i = 0; i < GodotSpace2D::ELAPSED_TIME_MAX; i++) { - total_time[i] += E->get()->get_elapsed_time(GodotSpace2D::ElapsedTime(i)); + total_time[i] += E->get_elapsed_time(GodotSpace2D::ElapsedTime(i)); } } diff --git a/servers/physics_2d/godot_space_2d.cpp b/servers/physics_2d/godot_space_2d.cpp index 731eab2dfe..0a7859d86a 100644 --- a/servers/physics_2d/godot_space_2d.cpp +++ b/servers/physics_2d/godot_space_2d.cpp @@ -874,7 +874,7 @@ bool GodotSpace2D::test_body_motion(GodotBody2D *p_body, const PhysicsServer2D:: bool collided = false; - if (recovered || (safe < 1)) { + if ((p_parameters.recovery_as_collision && recovered) || (safe < 1)) { if (safe >= 1) { best_shape = -1; //no best shape with cast, reset to -1 } diff --git a/servers/physics_2d/godot_step_2d.cpp b/servers/physics_2d/godot_step_2d.cpp index 0df5c1aabc..551fd9329f 100644 --- a/servers/physics_2d/godot_step_2d.cpp +++ b/servers/physics_2d/godot_step_2d.cpp @@ -168,8 +168,8 @@ void GodotStep2D::step(GodotSpace2D *p_space, real_t p_delta) { const SelfList<GodotArea2D>::List &aml = p_space->get_moved_area_list(); while (aml.first()) { - for (const RBSet<GodotConstraint2D *>::Element *E = aml.first()->self()->get_constraints().front(); E; E = E->next()) { - GodotConstraint2D *constraint = E->get(); + for (GodotConstraint2D *E : aml.first()->self()->get_constraints()) { + GodotConstraint2D *constraint = E; if (constraint->get_island_step() == _step) { continue; } diff --git a/servers/physics_3d/godot_physics_server_3d.cpp b/servers/physics_3d/godot_physics_server_3d.cpp index cb4988757c..b3a384ba8f 100644 --- a/servers/physics_3d/godot_physics_server_3d.cpp +++ b/servers/physics_3d/godot_physics_server_3d.cpp @@ -1611,11 +1611,11 @@ void GodotPhysicsServer3D::step(real_t p_step) { island_count = 0; active_objects = 0; collision_pairs = 0; - for (RBSet<const GodotSpace3D *>::Element *E = active_spaces.front(); E; E = E->next()) { - stepper->step(const_cast<GodotSpace3D *>(E->get()), p_step); - island_count += E->get()->get_island_count(); - active_objects += E->get()->get_active_objects(); - collision_pairs += E->get()->get_collision_pairs(); + for (const GodotSpace3D *E : active_spaces) { + stepper->step(const_cast<GodotSpace3D *>(E), p_step); + island_count += E->get_island_count(); + active_objects += E->get_active_objects(); + collision_pairs += E->get_collision_pairs(); } #endif } @@ -1635,8 +1635,8 @@ void GodotPhysicsServer3D::flush_queries() { uint64_t time_beg = OS::get_singleton()->get_ticks_usec(); - for (RBSet<const GodotSpace3D *>::Element *E = active_spaces.front(); E; E = E->next()) { - GodotSpace3D *space = const_cast<GodotSpace3D *>(E->get()); + for (const GodotSpace3D *E : active_spaces) { + GodotSpace3D *space = const_cast<GodotSpace3D *>(E); space->call_queries(); } @@ -1656,9 +1656,9 @@ void GodotPhysicsServer3D::flush_queries() { total_time[i] = 0; } - for (RBSet<const GodotSpace3D *>::Element *E = active_spaces.front(); E; E = E->next()) { + for (const GodotSpace3D *E : active_spaces) { for (int i = 0; i < GodotSpace3D::ELAPSED_TIME_MAX; i++) { - total_time[i] += E->get()->get_elapsed_time(GodotSpace3D::ElapsedTime(i)); + total_time[i] += E->get_elapsed_time(GodotSpace3D::ElapsedTime(i)); } } diff --git a/servers/physics_3d/godot_space_3d.cpp b/servers/physics_3d/godot_space_3d.cpp index 9c051b23f6..2bdaf581a1 100644 --- a/servers/physics_3d/godot_space_3d.cpp +++ b/servers/physics_3d/godot_space_3d.cpp @@ -906,7 +906,7 @@ bool GodotSpace3D::test_body_motion(GodotBody3D *p_body, const PhysicsServer3D:: } bool collided = false; - if (recovered || (safe < 1)) { + if ((p_parameters.recovery_as_collision && recovered) || (safe < 1)) { if (safe >= 1) { best_shape = -1; //no best shape with cast, reset to -1 } diff --git a/servers/physics_3d/godot_step_3d.cpp b/servers/physics_3d/godot_step_3d.cpp index b46436ba39..99656d01a0 100644 --- a/servers/physics_3d/godot_step_3d.cpp +++ b/servers/physics_3d/godot_step_3d.cpp @@ -87,8 +87,8 @@ void GodotStep3D::_populate_island(GodotBody3D *p_body, LocalVector<GodotBody3D void GodotStep3D::_populate_island_soft_body(GodotSoftBody3D *p_soft_body, LocalVector<GodotBody3D *> &p_body_island, LocalVector<GodotConstraint3D *> &p_constraint_island) { p_soft_body->set_island_step(_step); - for (RBSet<GodotConstraint3D *>::Element *E = p_soft_body->get_constraints().front(); E; E = E->next()) { - GodotConstraint3D *constraint = const_cast<GodotConstraint3D *>(E->get()); + for (const GodotConstraint3D *E : p_soft_body->get_constraints()) { + GodotConstraint3D *constraint = const_cast<GodotConstraint3D *>(E); if (constraint->get_island_step() == _step) { continue; // Already processed. } @@ -236,8 +236,8 @@ void GodotStep3D::step(GodotSpace3D *p_space, real_t p_delta) { const SelfList<GodotArea3D>::List &aml = p_space->get_moved_area_list(); while (aml.first()) { - for (const RBSet<GodotConstraint3D *>::Element *E = aml.first()->self()->get_constraints().front(); E; E = E->next()) { - GodotConstraint3D *constraint = E->get(); + for (GodotConstraint3D *E : aml.first()->self()->get_constraints()) { + GodotConstraint3D *constraint = E; if (constraint->get_island_step() == _step) { continue; } diff --git a/servers/physics_server_2d.cpp b/servers/physics_server_2d.cpp index 4aeaa7497f..41aae36785 100644 --- a/servers/physics_server_2d.cpp +++ b/servers/physics_server_2d.cpp @@ -158,8 +158,8 @@ Vector<RID> PhysicsRayQueryParameters2D::get_exclude() const { Vector<RID> ret; ret.resize(parameters.exclude.size()); int idx = 0; - for (RBSet<RID>::Element *E = parameters.exclude.front(); E; E = E->next()) { - ret.write[idx++] = E->get(); + for (const RID &E : parameters.exclude) { + ret.write[idx++] = E; } return ret; } @@ -208,8 +208,8 @@ Vector<RID> PhysicsPointQueryParameters2D::get_exclude() const { Vector<RID> ret; ret.resize(parameters.exclude.size()); int idx = 0; - for (RBSet<RID>::Element *E = parameters.exclude.front(); E; E = E->next()) { - ret.write[idx++] = E->get(); + for (const RID &E : parameters.exclude) { + ret.write[idx++] = E; } return ret; } @@ -267,8 +267,8 @@ Vector<RID> PhysicsShapeQueryParameters2D::get_exclude() const { Vector<RID> ret; ret.resize(parameters.exclude.size()); int idx = 0; - for (RBSet<RID>::Element *E = parameters.exclude.front(); E; E = E->next()) { - ret.write[idx++] = E->get(); + for (const RID &E : parameters.exclude) { + ret.write[idx++] = E; } return ret; } @@ -505,12 +505,16 @@ void PhysicsTestMotionParameters2D::_bind_methods() { ClassDB::bind_method(D_METHOD("get_exclude_objects"), &PhysicsTestMotionParameters2D::get_exclude_objects); ClassDB::bind_method(D_METHOD("set_exclude_objects", "exclude_list"), &PhysicsTestMotionParameters2D::set_exclude_objects); + ClassDB::bind_method(D_METHOD("is_recovery_as_collision_enabled"), &PhysicsTestMotionParameters2D::is_recovery_as_collision_enabled); + ClassDB::bind_method(D_METHOD("set_recovery_as_collision_enabled", "enabled"), &PhysicsTestMotionParameters2D::set_recovery_as_collision_enabled); + ADD_PROPERTY(PropertyInfo(Variant::TRANSFORM2D, "from"), "set_from", "get_from"); ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "motion"), "set_motion", "get_motion"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "margin"), "set_margin", "get_margin"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "collide_separation_ray"), "set_collide_separation_ray_enabled", "is_collide_separation_ray_enabled"); ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "exclude_bodies", PROPERTY_HINT_ARRAY_TYPE, "RID"), "set_exclude_bodies", "get_exclude_bodies"); ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "exclude_objects"), "set_exclude_objects", "get_exclude_objects"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "recovery_as_collision"), "set_recovery_as_collision_enabled", "is_recovery_as_collision_enabled"); } /////////////////////////////// @@ -857,7 +861,7 @@ PhysicsServer2D::~PhysicsServer2D() { Vector<PhysicsServer2DManager::ClassInfo> PhysicsServer2DManager::physics_2d_servers; int PhysicsServer2DManager::default_server_id = -1; int PhysicsServer2DManager::default_server_priority = -1; -const String PhysicsServer2DManager::setting_property_name("physics/2d/physics_engine"); +const String PhysicsServer2DManager::setting_property_name(PNAME("physics/2d/physics_engine")); void PhysicsServer2DManager::on_servers_changed() { String physics_servers("DEFAULT"); diff --git a/servers/physics_server_2d.h b/servers/physics_server_2d.h index bd53764932..745ee38ee1 100644 --- a/servers/physics_server_2d.h +++ b/servers/physics_server_2d.h @@ -485,6 +485,7 @@ public: bool collide_separation_ray = false; RBSet<RID> exclude_bodies; RBSet<ObjectID> exclude_objects; + bool recovery_as_collision = false; MotionParameters() {} @@ -727,6 +728,9 @@ public: Array get_exclude_objects() const; void set_exclude_objects(const Array &p_exclude); + + bool is_recovery_as_collision_enabled() const { return parameters.recovery_as_collision; } + void set_recovery_as_collision_enabled(bool p_enabled) { parameters.recovery_as_collision = p_enabled; } }; class PhysicsTestMotionResult2D : public RefCounted { diff --git a/servers/physics_server_3d.cpp b/servers/physics_server_3d.cpp index d05f5128b2..a606d055f7 100644 --- a/servers/physics_server_3d.cpp +++ b/servers/physics_server_3d.cpp @@ -177,8 +177,8 @@ Vector<RID> PhysicsRayQueryParameters3D::get_exclude() const { Vector<RID> ret; ret.resize(parameters.exclude.size()); int idx = 0; - for (RBSet<RID>::Element *E = parameters.exclude.front(); E; E = E->next()) { - ret.write[idx++] = E->get(); + for (const RID &E : parameters.exclude) { + ret.write[idx++] = E; } return ret; } @@ -231,8 +231,8 @@ Vector<RID> PhysicsPointQueryParameters3D::get_exclude() const { Vector<RID> ret; ret.resize(parameters.exclude.size()); int idx = 0; - for (RBSet<RID>::Element *E = parameters.exclude.front(); E; E = E->next()) { - ret.write[idx++] = E->get(); + for (const RID &E : parameters.exclude) { + ret.write[idx++] = E; } return ret; } @@ -286,8 +286,8 @@ Vector<RID> PhysicsShapeQueryParameters3D::get_exclude() const { Vector<RID> ret; ret.resize(parameters.exclude.size()); int idx = 0; - for (RBSet<RID>::Element *E = parameters.exclude.front(); E; E = E->next()) { - ret.write[idx++] = E->get(); + for (const RID &E : parameters.exclude) { + ret.write[idx++] = E; } return ret; } @@ -527,6 +527,9 @@ void PhysicsTestMotionParameters3D::_bind_methods() { ClassDB::bind_method(D_METHOD("get_exclude_objects"), &PhysicsTestMotionParameters3D::get_exclude_objects); ClassDB::bind_method(D_METHOD("set_exclude_objects", "exclude_list"), &PhysicsTestMotionParameters3D::set_exclude_objects); + ClassDB::bind_method(D_METHOD("is_recovery_as_collision_enabled"), &PhysicsTestMotionParameters3D::is_recovery_as_collision_enabled); + ClassDB::bind_method(D_METHOD("set_recovery_as_collision_enabled", "enabled"), &PhysicsTestMotionParameters3D::set_recovery_as_collision_enabled); + ADD_PROPERTY(PropertyInfo(Variant::TRANSFORM3D, "from"), "set_from", "get_from"); ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "motion"), "set_motion", "get_motion"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "margin"), "set_margin", "get_margin"); @@ -534,6 +537,7 @@ void PhysicsTestMotionParameters3D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::BOOL, "collide_separation_ray"), "set_collide_separation_ray_enabled", "is_collide_separation_ray_enabled"); ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "exclude_bodies", PROPERTY_HINT_ARRAY_TYPE, "RID"), "set_exclude_bodies", "get_exclude_bodies"); ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "exclude_objects"), "set_exclude_objects", "get_exclude_objects"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "recovery_as_collision"), "set_recovery_as_collision_enabled", "is_recovery_as_collision_enabled"); } /////////////////////////////// @@ -1029,7 +1033,7 @@ PhysicsServer3D::~PhysicsServer3D() { Vector<PhysicsServer3DManager::ClassInfo> PhysicsServer3DManager::physics_servers; int PhysicsServer3DManager::default_server_id = -1; int PhysicsServer3DManager::default_server_priority = -1; -const String PhysicsServer3DManager::setting_property_name("physics/3d/physics_engine"); +const String PhysicsServer3DManager::setting_property_name(PNAME("physics/3d/physics_engine")); void PhysicsServer3DManager::on_servers_changed() { String physics_servers2("DEFAULT"); diff --git a/servers/physics_server_3d.h b/servers/physics_server_3d.h index c707f621b4..6a721f75a3 100644 --- a/servers/physics_server_3d.h +++ b/servers/physics_server_3d.h @@ -522,6 +522,7 @@ public: bool collide_separation_ray = false; RBSet<RID> exclude_bodies; RBSet<ObjectID> exclude_objects; + bool recovery_as_collision = false; MotionParameters() {} @@ -941,6 +942,9 @@ public: Array get_exclude_objects() const; void set_exclude_objects(const Array &p_exclude); + + bool is_recovery_as_collision_enabled() const { return parameters.recovery_as_collision; } + void set_recovery_as_collision_enabled(bool p_enabled) { parameters.recovery_as_collision = p_enabled; } }; class PhysicsTestMotionResult3D : public RefCounted { diff --git a/servers/rendering/renderer_canvas_cull.cpp b/servers/rendering/renderer_canvas_cull.cpp index 46bc22ad54..9291a89333 100644 --- a/servers/rendering/renderer_canvas_cull.cpp +++ b/servers/rendering/renderer_canvas_cull.cpp @@ -1831,8 +1831,8 @@ void RendererCanvasCull::canvas_occluder_polygon_set_shape(RID p_occluder_polygo RSG::canvas_render->occluder_polygon_set_shape(occluder_poly->occluder, p_shape, p_closed); - for (RBSet<RendererCanvasRender::LightOccluderInstance *>::Element *E = occluder_poly->owners.front(); E; E = E->next()) { - E->get()->aabb_cache = occluder_poly->aabb; + for (RendererCanvasRender::LightOccluderInstance *E : occluder_poly->owners) { + E->aabb_cache = occluder_poly->aabb; } } @@ -1841,8 +1841,8 @@ void RendererCanvasCull::canvas_occluder_polygon_set_cull_mode(RID p_occluder_po ERR_FAIL_COND(!occluder_poly); occluder_poly->cull_mode = p_mode; RSG::canvas_render->occluder_polygon_set_cull_mode(occluder_poly->occluder, p_mode); - for (RBSet<RendererCanvasRender::LightOccluderInstance *>::Element *E = occluder_poly->owners.front(); E; E = E->next()) { - E->get()->cull_cache = p_mode; + for (RendererCanvasRender::LightOccluderInstance *E : occluder_poly->owners) { + E->cull_cache = p_mode; } } @@ -1942,12 +1942,12 @@ bool RendererCanvasCull::free(RID p_rid) { canvas->child_items[i].item->parent = RID(); } - for (RBSet<RendererCanvasRender::Light *>::Element *E = canvas->lights.front(); E; E = E->next()) { - E->get()->canvas = RID(); + for (RendererCanvasRender::Light *E : canvas->lights) { + E->canvas = RID(); } - for (RBSet<RendererCanvasRender::LightOccluderInstance *>::Element *E = canvas->occluders.front(); E; E = E->next()) { - E->get()->canvas = RID(); + for (RendererCanvasRender::LightOccluderInstance *E : canvas->occluders) { + E->canvas = RID(); } canvas_owner.free(p_rid); diff --git a/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp b/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp index 0eb981d51b..7b92e92f8c 100644 --- a/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp +++ b/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp @@ -1523,7 +1523,7 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co Vector<Color> c; { Color cc = clear_color.srgb_to_linear(); - if (using_separate_specular) { + if (using_separate_specular || render_buffer) { cc.a = 0; //subsurf scatter must be 0 } c.push_back(cc); diff --git a/servers/rendering/renderer_rd/renderer_scene_render_rd.cpp b/servers/rendering/renderer_rd/renderer_scene_render_rd.cpp index e3bf2e3dda..3f3b087edb 100644 --- a/servers/rendering/renderer_rd/renderer_scene_render_rd.cpp +++ b/servers/rendering/renderer_rd/renderer_scene_render_rd.cpp @@ -5464,8 +5464,8 @@ bool RendererSceneRenderRD::free(RID p_rid) { LightInstance *light_instance = light_instance_owner.get_or_null(p_rid); //remove from shadow atlases.. - for (RBSet<RID>::Element *E = light_instance->shadow_atlases.front(); E; E = E->next()) { - ShadowAtlas *shadow_atlas = shadow_atlas_owner.get_or_null(E->get()); + for (const RID &E : light_instance->shadow_atlases) { + ShadowAtlas *shadow_atlas = shadow_atlas_owner.get_or_null(E); ERR_CONTINUE(!shadow_atlas->shadow_owners.has(p_rid)); uint32_t key = shadow_atlas->shadow_owners[p_rid]; uint32_t q = (key >> ShadowAtlas::QUADRANT_SHIFT) & 0x3; diff --git a/servers/rendering/renderer_rd/shaders/effects/tonemap.glsl b/servers/rendering/renderer_rd/shaders/effects/tonemap.glsl index 5a238452c0..a8ccdea60b 100644 --- a/servers/rendering/renderer_rd/shaders/effects/tonemap.glsl +++ b/servers/rendering/renderer_rd/shaders/effects/tonemap.glsl @@ -426,12 +426,13 @@ vec3 screen_space_dither(vec2 frag_coord) { void main() { #ifdef SUBPASS // SUBPASS and MULTIVIEW can be combined but in that case we're already reading from the correct layer - vec3 color = subpassLoad(input_color).rgb * params.luminance_multiplier; + vec4 color = subpassLoad(input_color); #elif defined(MULTIVIEW) - vec3 color = textureLod(source_color, vec3(uv_interp, ViewIndex), 0.0f).rgb * params.luminance_multiplier; + vec4 color = textureLod(source_color, vec3(uv_interp, ViewIndex), 0.0f); #else - vec3 color = textureLod(source_color, uv_interp, 0.0f).rgb * params.luminance_multiplier; + vec4 color = textureLod(source_color, uv_interp, 0.0f); #endif + color.rgb *= params.luminance_multiplier; // Exposure @@ -443,7 +444,7 @@ void main() { } #endif - color *= exposure; + color.rgb *= exposure; // Early Tonemap & SRGB Conversion #ifndef SUBPASS @@ -456,19 +457,19 @@ void main() { } if (params.use_fxaa) { - color = do_fxaa(color, exposure, uv_interp); + color.rgb = do_fxaa(color.rgb, exposure, uv_interp); } #endif if (params.use_debanding) { // For best results, debanding should be done before tonemapping. // Otherwise, we're adding noise to an already-quantized image. - color += screen_space_dither(gl_FragCoord.xy); + color.rgb += screen_space_dither(gl_FragCoord.xy); } - color = apply_tonemapping(color, params.white); + color.rgb = apply_tonemapping(color.rgb, params.white); - color = linear_to_srgb(color); // regular linear -> SRGB conversion + color.rgb = linear_to_srgb(color.rgb); // regular linear -> SRGB conversion #ifndef SUBPASS // Glow @@ -482,19 +483,19 @@ void main() { glow = apply_tonemapping(glow, params.white); glow = linear_to_srgb(glow); - color = apply_glow(color, glow); + color.rgb = apply_glow(color.rgb, glow); } #endif // Additional effects if (params.use_bcs) { - color = apply_bcs(color, params.bcs); + color.rgb = apply_bcs(color.rgb, params.bcs); } if (params.use_color_correction) { - color = apply_color_correction(color); + color.rgb = apply_color_correction(color.rgb); } - frag_color = vec4(color, 1.0f); + frag_color = color; } diff --git a/servers/rendering/renderer_rd/storage_rd/material_storage.cpp b/servers/rendering/renderer_rd/storage_rd/material_storage.cpp index 27f0c5f273..93f1f4e0d9 100644 --- a/servers/rendering/renderer_rd/storage_rd/material_storage.cpp +++ b/servers/rendering/renderer_rd/storage_rd/material_storage.cpp @@ -1979,8 +1979,8 @@ void MaterialStorage::global_variable_set(const StringName &p_name, const Varian } else { //texture MaterialStorage *material_storage = MaterialStorage::get_singleton(); - for (RBSet<RID>::Element *E = gv.texture_materials.front(); E; E = E->next()) { - Material *material = material_storage->get_material(E->get()); + for (const RID &E : gv.texture_materials) { + Material *material = material_storage->get_material(E); ERR_CONTINUE(!material); material_storage->_material_queue_update(material, false, true); } @@ -2011,8 +2011,8 @@ void MaterialStorage::global_variable_set_override(const StringName &p_name, con } else { //texture MaterialStorage *material_storage = MaterialStorage::get_singleton(); - for (RBSet<RID>::Element *E = gv.texture_materials.front(); E; E = E->next()) { - Material *material = material_storage->get_material(E->get()); + for (const RID &E : gv.texture_materials) { + Material *material = material_storage->get_material(E); ERR_CONTINUE(!material); material_storage->_material_queue_update(material, false, true); } @@ -2305,8 +2305,8 @@ void MaterialStorage::shader_set_code(RID p_shader, const String &p_code) { shader->data = nullptr; } - for (RBSet<Material *>::Element *E = shader->owners.front(); E; E = E->next()) { - Material *material = E->get(); + for (Material *E : shader->owners) { + Material *material = E; material->shader_type = new_type; if (material->data) { memdelete(material->data); @@ -2322,8 +2322,8 @@ void MaterialStorage::shader_set_code(RID p_shader, const String &p_code) { shader->type = SHADER_TYPE_MAX; //invalid } - for (RBSet<Material *>::Element *E = shader->owners.front(); E; E = E->next()) { - Material *material = E->get(); + for (Material *E : shader->owners) { + Material *material = E; if (shader->data) { material->data = material_get_data_request_function(new_type)(shader->data); material->data->self = material->self; @@ -2346,8 +2346,8 @@ void MaterialStorage::shader_set_code(RID p_shader, const String &p_code) { shader->data->set_code(p_code); } - for (RBSet<Material *>::Element *E = shader->owners.front(); E; E = E->next()) { - Material *material = E->get(); + for (Material *E : shader->owners) { + Material *material = E; material->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_MATERIAL); _material_queue_update(material, true, true); } @@ -2388,8 +2388,8 @@ void MaterialStorage::shader_set_default_texture_param(RID p_shader, const Strin if (shader->data) { shader->data->set_default_texture_param(p_name, p_texture, p_index); } - for (RBSet<Material *>::Element *E = shader->owners.front(); E; E = E->next()) { - Material *material = E->get(); + for (Material *E : shader->owners) { + Material *material = E; _material_queue_update(material, false, true); } } diff --git a/servers/rendering/renderer_rd/storage_rd/mesh_storage.cpp b/servers/rendering/renderer_rd/storage_rd/mesh_storage.cpp index fa051c92ed..1e0d67f269 100644 --- a/servers/rendering/renderer_rd/storage_rd/mesh_storage.cpp +++ b/servers/rendering/renderer_rd/storage_rd/mesh_storage.cpp @@ -215,8 +215,8 @@ void MeshStorage::mesh_free(RID p_rid) { ERR_PRINT("deleting mesh with active instances"); } if (mesh->shadow_owners.size()) { - for (RBSet<Mesh *>::Element *E = mesh->shadow_owners.front(); E; E = E->next()) { - Mesh *shadow_owner = E->get(); + for (Mesh *E : mesh->shadow_owners) { + Mesh *shadow_owner = E; shadow_owner->shadow_mesh = RID(); shadow_owner->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_MESH); } @@ -431,8 +431,8 @@ void MeshStorage::mesh_add_surface(RID p_mesh, const RS::SurfaceData &p_surface) mesh->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_MESH); - for (RBSet<Mesh *>::Element *E = mesh->shadow_owners.front(); E; E = E->next()) { - Mesh *shadow_owner = E->get(); + for (Mesh *E : mesh->shadow_owners) { + Mesh *shadow_owner = E; shadow_owner->shadow_mesh = RID(); shadow_owner->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_MESH); } @@ -742,8 +742,8 @@ void MeshStorage::mesh_clear(RID p_mesh) { mesh->has_bone_weights = false; mesh->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_MESH); - for (RBSet<Mesh *>::Element *E = mesh->shadow_owners.front(); E; E = E->next()) { - Mesh *shadow_owner = E->get(); + for (Mesh *E : mesh->shadow_owners) { + Mesh *shadow_owner = E; shadow_owner->shadow_mesh = RID(); shadow_owner->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_MESH); } diff --git a/servers/rendering/renderer_rd/storage_rd/particles_storage.cpp b/servers/rendering/renderer_rd/storage_rd/particles_storage.cpp index 1701b56b0b..e15d3e13a9 100644 --- a/servers/rendering/renderer_rd/storage_rd/particles_storage.cpp +++ b/servers/rendering/renderer_rd/storage_rd/particles_storage.cpp @@ -838,8 +838,8 @@ void ParticlesStorage::_particles_process(Particles *p_particles, double p_delta } uint32_t collision_3d_textures_used = 0; - for (const RBSet<RID>::Element *E = p_particles->collisions.front(); E; E = E->next()) { - ParticlesCollisionInstance *pci = particles_collision_instance_owner.get_or_null(E->get()); + for (const RID &E : p_particles->collisions) { + ParticlesCollisionInstance *pci = particles_collision_instance_owner.get_or_null(E); if (!pci || !pci->active) { continue; } diff --git a/servers/rendering/renderer_scene_cull.cpp b/servers/rendering/renderer_scene_cull.cpp index 37bbab86ff..89bd12ea3d 100644 --- a/servers/rendering/renderer_scene_cull.cpp +++ b/servers/rendering/renderer_scene_cull.cpp @@ -653,8 +653,8 @@ void RendererSceneCull::instance_set_base(RID p_instance, RID p_base) { scene_render->geometry_instance_set_lightmap_capture(geom->geometry_instance, instance->lightmap_sh.ptr()); } - for (RBSet<Instance *>::Element *E = instance->visibility_dependencies.front(); E; E = E->next()) { - Instance *dep_instance = E->get(); + for (Instance *E : instance->visibility_dependencies) { + Instance *dep_instance = E; ERR_CONTINUE(dep_instance->array_index == -1); ERR_CONTINUE(dep_instance->scenario->instance_data[dep_instance->array_index].parent_array_index != -1); dep_instance->scenario->instance_data[dep_instance->array_index].parent_array_index = instance->array_index; @@ -1299,8 +1299,8 @@ bool RendererSceneCull::_update_instance_visibility_depth(Instance *p_instance) while (instance) { if (!instance->visibility_dependencies.is_empty()) { uint32_t depth = 0; - for (RBSet<Instance *>::Element *E = instance->visibility_dependencies.front(); E; E = E->next()) { - depth = MAX(depth, E->get()->visibility_dependencies_depth); + for (const Instance *E : instance->visibility_dependencies) { + depth = MAX(depth, E->visibility_dependencies_depth); } instance->visibility_dependencies_depth = depth + 1; } else { @@ -1559,8 +1559,8 @@ void RendererSceneCull::_update_instance(Instance *p_instance) { InstanceLightmapData *lightmap_data = static_cast<InstanceLightmapData *>(p_instance->base_data); //erase dependencies, since no longer a lightmap - for (RBSet<Instance *>::Element *E = lightmap_data->geometries.front(); E; E = E->next()) { - Instance *geom = E->get(); + for (Instance *E : lightmap_data->geometries) { + Instance *geom = E; _instance_queue_update(geom, true, false); } } @@ -1574,8 +1574,8 @@ void RendererSceneCull::_update_instance(Instance *p_instance) { //make sure lights are updated if it casts shadow if (geom->can_cast_shadows) { - for (RBSet<Instance *>::Element *E = geom->lights.front(); E; E = E->next()) { - InstanceLightData *light = static_cast<InstanceLightData *>(E->get()->base_data); + for (const Instance *E : geom->lights) { + InstanceLightData *light = static_cast<InstanceLightData *>(E->base_data); light->shadow_dirty = true; } } @@ -1632,8 +1632,8 @@ void RendererSceneCull::_update_instance(Instance *p_instance) { idata.parent_array_index = p_instance->visibility_parent ? p_instance->visibility_parent->array_index : -1; idata.visibility_index = p_instance->visibility_index; - for (RBSet<Instance *>::Element *E = p_instance->visibility_dependencies.front(); E; E = E->next()) { - Instance *dep_instance = E->get(); + for (Instance *E : p_instance->visibility_dependencies) { + Instance *dep_instance = E; if (dep_instance->array_index != -1) { dep_instance->scenario->instance_data[dep_instance->array_index].parent_array_index = p_instance->array_index; } @@ -1800,8 +1800,8 @@ void RendererSceneCull::_unpair_instance(Instance *p_instance) { swapped_instance->scenario->instance_visibility[swapped_instance->visibility_index].array_index = swapped_instance->array_index; } - for (RBSet<Instance *>::Element *E = swapped_instance->visibility_dependencies.front(); E; E = E->next()) { - Instance *dep_instance = E->get(); + for (Instance *E : swapped_instance->visibility_dependencies) { + Instance *dep_instance = E; if (dep_instance != p_instance && dep_instance->array_index != -1) { dep_instance->scenario->instance_data[dep_instance->array_index].parent_array_index = swapped_instance->array_index; } @@ -1824,8 +1824,8 @@ void RendererSceneCull::_unpair_instance(Instance *p_instance) { scene_render->geometry_instance_pair_voxel_gi_instances(geom->geometry_instance, nullptr, 0); } - for (RBSet<Instance *>::Element *E = p_instance->visibility_dependencies.front(); E; E = E->next()) { - Instance *dep_instance = E->get(); + for (Instance *E : p_instance->visibility_dependencies) { + Instance *dep_instance = E; if (dep_instance->array_index != -1) { dep_instance->scenario->instance_data[dep_instance->array_index].parent_array_index = -1; if ((1 << dep_instance->base_type) & RS::INSTANCE_GEOMETRY_MASK) { @@ -1923,8 +1923,8 @@ void RendererSceneCull::_update_instance_lightmap_captures(Instance *p_instance) float accum_blend = 0.0; InstanceGeometryData *geom = static_cast<InstanceGeometryData *>(p_instance->base_data); - for (RBSet<Instance *>::Element *E = geom->lightmap_captures.front(); E; E = E->next()) { - Instance *lightmap = E->get(); + for (Instance *E : geom->lightmap_captures) { + Instance *lightmap = E; bool interior = RSG::light_storage->lightmap_is_interior(lightmap->base); @@ -2744,8 +2744,8 @@ void RendererSceneCull::_scene_cull(CullData &cull_data, InstanceCullResult &cul InstanceGeometryData *geom = static_cast<InstanceGeometryData *>(idata.instance->base_data); uint32_t idx = 0; - for (RBSet<Instance *>::Element *E = geom->lights.front(); E; E = E->next()) { - InstanceLightData *light = static_cast<InstanceLightData *>(E->get()->base_data); + for (const Instance *E : geom->lights) { + InstanceLightData *light = static_cast<InstanceLightData *>(E->base_data); instance_pair_buffer[idx++] = light->instance; if (idx == MAX_INSTANCE_PAIRS) { break; @@ -2767,8 +2767,8 @@ void RendererSceneCull::_scene_cull(CullData &cull_data, InstanceCullResult &cul InstanceGeometryData *geom = static_cast<InstanceGeometryData *>(idata.instance->base_data); uint32_t idx = 0; - for (RBSet<Instance *>::Element *E = geom->reflection_probes.front(); E; E = E->next()) { - InstanceReflectionProbeData *reflection_probe = static_cast<InstanceReflectionProbeData *>(E->get()->base_data); + for (const Instance *E : geom->reflection_probes) { + InstanceReflectionProbeData *reflection_probe = static_cast<InstanceReflectionProbeData *>(E->base_data); instance_pair_buffer[idx++] = reflection_probe->instance; if (idx == MAX_INSTANCE_PAIRS) { @@ -2784,8 +2784,8 @@ void RendererSceneCull::_scene_cull(CullData &cull_data, InstanceCullResult &cul InstanceGeometryData *geom = static_cast<InstanceGeometryData *>(idata.instance->base_data); uint32_t idx = 0; - for (RBSet<Instance *>::Element *E = geom->decals.front(); E; E = E->next()) { - InstanceDecalData *decal = static_cast<InstanceDecalData *>(E->get()->base_data); + for (const Instance *E : geom->decals) { + InstanceDecalData *decal = static_cast<InstanceDecalData *>(E->base_data); instance_pair_buffer[idx++] = decal->instance; if (idx == MAX_INSTANCE_PAIRS) { @@ -2799,8 +2799,8 @@ void RendererSceneCull::_scene_cull(CullData &cull_data, InstanceCullResult &cul if (idata.flags & InstanceData::FLAG_GEOM_VOXEL_GI_DIRTY) { InstanceGeometryData *geom = static_cast<InstanceGeometryData *>(idata.instance->base_data); uint32_t idx = 0; - for (RBSet<Instance *>::Element *E = geom->voxel_gi_instances.front(); E; E = E->next()) { - InstanceVoxelGIData *voxel_gi = static_cast<InstanceVoxelGIData *>(E->get()->base_data); + for (const Instance *E : geom->voxel_gi_instances) { + InstanceVoxelGIData *voxel_gi = static_cast<InstanceVoxelGIData *>(E->base_data); instance_pair_buffer[idx++] = voxel_gi->probe_instance; if (idx == MAX_INSTANCE_PAIRS) { @@ -3420,8 +3420,8 @@ void RendererSceneCull::render_probes() { const RID *instance_caches = probe->light_instances.ptr(); int idx = 0; //must count visible lights - for (RBSet<Instance *>::Element *E = probe->lights.front(); E; E = E->next()) { - Instance *instance = E->get(); + for (Instance *E : probe->lights) { + Instance *instance = E; InstanceLightData *instance_light = (InstanceLightData *)instance->base_data; if (!instance->visible) { continue; @@ -3502,8 +3502,8 @@ void RendererSceneCull::render_probes() { RID *instance_caches = probe->light_instances.ptrw(); int idx = 0; //must count visible lights - for (RBSet<Instance *>::Element *E = probe->lights.front(); E; E = E->next()) { - Instance *instance = E->get(); + for (Instance *E : probe->lights) { + Instance *instance = E; InstanceLightData *instance_light = (InstanceLightData *)instance->base_data; if (!instance->visible) { continue; @@ -3557,8 +3557,8 @@ void RendererSceneCull::render_probes() { RID instance_pair_buffer[MAX_INSTANCE_PAIRS]; - for (RBSet<Instance *>::Element *E = probe->dynamic_geometries.front(); E; E = E->next()) { - Instance *ins = E->get(); + for (Instance *E : probe->dynamic_geometries) { + Instance *ins = E; if (!ins->visible) { continue; } @@ -3566,8 +3566,8 @@ void RendererSceneCull::render_probes() { if (ins->scenario && ins->array_index >= 0 && (ins->scenario->instance_data[ins->array_index].flags & InstanceData::FLAG_GEOM_VOXEL_GI_DIRTY)) { uint32_t idx = 0; - for (RBSet<Instance *>::Element *F = geom->voxel_gi_instances.front(); F; F = F->next()) { - InstanceVoxelGIData *voxel_gi2 = static_cast<InstanceVoxelGIData *>(F->get()->base_data); + for (const Instance *F : geom->voxel_gi_instances) { + InstanceVoxelGIData *voxel_gi2 = static_cast<InstanceVoxelGIData *>(F->base_data); instance_pair_buffer[idx++] = voxel_gi2->probe_instance; if (idx == MAX_INSTANCE_PAIRS) { @@ -3823,8 +3823,8 @@ void RendererSceneCull::_update_dirty_instance(Instance *p_instance) { if (can_cast_shadows != geom->can_cast_shadows) { //ability to cast shadows change, let lights now - for (RBSet<Instance *>::Element *E = geom->lights.front(); E; E = E->next()) { - InstanceLightData *light = static_cast<InstanceLightData *>(E->get()->base_data); + for (const Instance *E : geom->lights) { + InstanceLightData *light = static_cast<InstanceLightData *>(E->base_data); light->shadow_dirty = true; } diff --git a/servers/rendering/renderer_storage.h b/servers/rendering/renderer_storage.h index 7f35d2ca99..672fd4e4f1 100644 --- a/servers/rendering/renderer_storage.h +++ b/servers/rendering/renderer_storage.h @@ -85,8 +85,8 @@ public: void update_end() { //call after updating dependencies List<Pair<Dependency *, DependencyTracker *>> to_clean_up; - for (RBSet<Dependency *>::Element *E = dependencies.front(); E; E = E->next()) { - Dependency *dep = E->get(); + for (Dependency *E : dependencies) { + Dependency *dep = E; HashMap<DependencyTracker *, uint32_t>::Iterator F = dep->instances.find(this); ERR_CONTINUE(!F); if (F->value != instance_version) { @@ -105,8 +105,8 @@ public: } void clear() { // clear all dependencies - for (RBSet<Dependency *>::Element *E = dependencies.front(); E; E = E->next()) { - Dependency *dep = E->get(); + for (Dependency *E : dependencies) { + Dependency *dep = E; dep->instances.erase(this); } dependencies.clear(); diff --git a/servers/rendering/renderer_viewport.cpp b/servers/rendering/renderer_viewport.cpp index d612fb4aa7..7c2d7a1e1d 100644 --- a/servers/rendering/renderer_viewport.cpp +++ b/servers/rendering/renderer_viewport.cpp @@ -247,15 +247,15 @@ void RendererViewport::_draw_viewport(Viewport *p_viewport) { RendererCanvasCull::Canvas *canvas = static_cast<RendererCanvasCull::Canvas *>(E.value.canvas); Transform2D xf = _canvas_get_transform(p_viewport, canvas, &E.value, clip_rect.size); - for (RBSet<RendererCanvasRender::LightOccluderInstance *>::Element *F = canvas->occluders.front(); F; F = F->next()) { - if (!F->get()->enabled) { + for (RendererCanvasRender::LightOccluderInstance *F : canvas->occluders) { + if (!F->enabled) { continue; } - F->get()->xform_cache = xf * F->get()->xform; + F->xform_cache = xf * F->xform; - if (sdf_rect.intersects_transformed(F->get()->xform_cache, F->get()->aabb_cache)) { - F->get()->next = occluders; - occluders = F->get(); + if (sdf_rect.intersects_transformed(F->xform_cache, F->aabb_cache)) { + F->next = occluders; + occluders = F; } } } @@ -281,8 +281,8 @@ void RendererViewport::_draw_viewport(Viewport *p_viewport) { // Find lights in canvas. - for (RBSet<RendererCanvasRender::Light *>::Element *F = canvas->lights.front(); F; F = F->next()) { - RendererCanvasRender::Light *cl = F->get(); + for (RendererCanvasRender::Light *F : canvas->lights) { + RendererCanvasRender::Light *cl = F; if (cl->enabled && cl->texture.is_valid()) { //not super efficient.. Size2 tsize = RSG::texture_storage->texture_size_with_proxy(cl->texture); @@ -313,8 +313,8 @@ void RendererViewport::_draw_viewport(Viewport *p_viewport) { } } - for (RBSet<RendererCanvasRender::Light *>::Element *F = canvas->directional_lights.front(); F; F = F->next()) { - RendererCanvasRender::Light *cl = F->get(); + for (RendererCanvasRender::Light *F : canvas->directional_lights) { + RendererCanvasRender::Light *cl = F; if (cl->enabled) { cl->filter_next_ptr = directional_lights; directional_lights = cl; @@ -349,14 +349,14 @@ void RendererViewport::_draw_viewport(Viewport *p_viewport) { RendererCanvasCull::Canvas *canvas = static_cast<RendererCanvasCull::Canvas *>(E.value.canvas); Transform2D xf = _canvas_get_transform(p_viewport, canvas, &E.value, clip_rect.size); - for (RBSet<RendererCanvasRender::LightOccluderInstance *>::Element *F = canvas->occluders.front(); F; F = F->next()) { - if (!F->get()->enabled) { + for (RendererCanvasRender::LightOccluderInstance *F : canvas->occluders) { + if (!F->enabled) { continue; } - F->get()->xform_cache = xf * F->get()->xform; - if (shadow_rect.intersects_transformed(F->get()->xform_cache, F->get()->aabb_cache)) { - F->get()->next = occluders; - occluders = F->get(); + F->xform_cache = xf * F->xform; + if (shadow_rect.intersects_transformed(F->xform_cache, F->aabb_cache)) { + F->next = occluders; + occluders = F; } } } @@ -429,19 +429,19 @@ void RendererViewport::_draw_viewport(Viewport *p_viewport) { RendererCanvasCull::Canvas *canvas = static_cast<RendererCanvasCull::Canvas *>(E.value.canvas); Transform2D xf = _canvas_get_transform(p_viewport, canvas, &E.value, clip_rect.size); - for (RBSet<RendererCanvasRender::LightOccluderInstance *>::Element *F = canvas->occluders.front(); F; F = F->next()) { - if (!F->get()->enabled) { + for (RendererCanvasRender::LightOccluderInstance *F : canvas->occluders) { + if (!F->enabled) { continue; } - F->get()->xform_cache = xf * F->get()->xform; - Transform2D localizer = F->get()->xform_cache.affine_inverse(); + F->xform_cache = xf * F->xform; + Transform2D localizer = F->xform_cache.affine_inverse(); for (int j = 0; j < point_count; j++) { xf_points[j] = localizer.xform(points[j]); } - if (F->get()->aabb_cache.intersects_filled_polygon(xf_points, point_count)) { - F->get()->next = occluders; - occluders = F->get(); + if (F->aabb_cache.intersects_filled_polygon(xf_points, point_count)) { + F->next = occluders; + occluders = F; } } } diff --git a/servers/rendering/shader_compiler.cpp b/servers/rendering/shader_compiler.cpp index c88d9e8222..662016e6f4 100644 --- a/servers/rendering/shader_compiler.cpp +++ b/servers/rendering/shader_compiler.cpp @@ -303,8 +303,8 @@ void ShaderCompiler::_dump_function_deps(const SL::ShaderNode *p_node, const Str Vector<StringName> uses_functions; - for (RBSet<StringName>::Element *E = p_node->functions[fidx].uses_function.front(); E; E = E->next()) { - uses_functions.push_back(E->get()); + for (const StringName &E : p_node->functions[fidx].uses_function) { + uses_functions.push_back(E); } uses_functions.sort_custom<StringName::AlphCompare>(); //ensure order is deterministic so the same shader is always produced diff --git a/servers/rendering/shader_language.cpp b/servers/rendering/shader_language.cpp index 8a3ab92714..d2e188a9a7 100644 --- a/servers/rendering/shader_language.cpp +++ b/servers/rendering/shader_language.cpp @@ -4036,8 +4036,8 @@ void ShaderLanguage::get_keyword_list(List<String> *r_keywords) { idx++; } - for (RBSet<String>::Element *E = kws.front(); E; E = E->next()) { - r_keywords->push_back(E->get()); + for (const String &E : kws) { + r_keywords->push_back(E); } } @@ -4066,8 +4066,8 @@ void ShaderLanguage::get_builtin_funcs(List<String> *r_keywords) { idx++; } - for (RBSet<String>::Element *E = kws.front(); E; E = E->next()) { - r_keywords->push_back(E->get()); + for (const String &E : kws) { + r_keywords->push_back(E); } } @@ -4341,8 +4341,8 @@ bool ShaderLanguage::_propagate_function_call_sampler_uniform_settings(StringNam arg->tex_argument_filter = p_filter; arg->tex_argument_repeat = p_repeat; for (KeyValue<StringName, RBSet<int>> &E : arg->tex_argument_connect) { - for (RBSet<int>::Element *F = E.value.front(); F; F = F->next()) { - if (!_propagate_function_call_sampler_uniform_settings(E.key, F->get(), p_filter, p_repeat)) { + for (const int &F : E.value) { + if (!_propagate_function_call_sampler_uniform_settings(E.key, F, p_filter, p_repeat)) { return false; } } @@ -4375,8 +4375,8 @@ bool ShaderLanguage::_propagate_function_call_sampler_builtin_reference(StringNa arg->tex_builtin = p_builtin; for (KeyValue<StringName, RBSet<int>> &E : arg->tex_argument_connect) { - for (RBSet<int>::Element *F = E.value.front(); F; F = F->next()) { - if (!_propagate_function_call_sampler_builtin_reference(E.key, F->get(), p_builtin)) { + for (const int &F : E.value) { + if (!_propagate_function_call_sampler_builtin_reference(E.key, F, p_builtin)) { return false; } } @@ -7568,12 +7568,12 @@ Error ShaderLanguage::_parse_block(BlockNode *p_block, const FunctionInfo &p_fun String ShaderLanguage::_get_shader_type_list(const RBSet<String> &p_shader_types) const { // Return a list of shader types as an human-readable string String valid_types; - for (const RBSet<String>::Element *E = p_shader_types.front(); E; E = E->next()) { + for (const String &E : p_shader_types) { if (!valid_types.is_empty()) { valid_types += ", "; } - valid_types += "'" + E->get() + "'"; + valid_types += "'" + E + "'"; } return valid_types; diff --git a/servers/rendering/shader_types.cpp b/servers/rendering/shader_types.cpp index 98c7f0d7aa..05700e7ff9 100644 --- a/servers/rendering/shader_types.cpp +++ b/servers/rendering/shader_types.cpp @@ -192,26 +192,26 @@ ShaderTypes::ShaderTypes() { // spatial render modes { - shader_modes[RS::SHADER_SPATIAL].modes.push_back({ "blend", "mix", "add", "sub", "mul" }); - shader_modes[RS::SHADER_SPATIAL].modes.push_back({ "depth_draw", "opaque", "always", "never" }); - shader_modes[RS::SHADER_SPATIAL].modes.push_back({ "depth_prepass_alpha" }); - shader_modes[RS::SHADER_SPATIAL].modes.push_back({ "depth_test_disabled" }); - shader_modes[RS::SHADER_SPATIAL].modes.push_back({ "sss_mode_skin" }); - shader_modes[RS::SHADER_SPATIAL].modes.push_back({ "cull", "back", "front", "disabled" }); - shader_modes[RS::SHADER_SPATIAL].modes.push_back({ "unshaded" }); - shader_modes[RS::SHADER_SPATIAL].modes.push_back({ "wireframe" }); - shader_modes[RS::SHADER_SPATIAL].modes.push_back({ "diffuse", "lambert", "lambert_wrap", "burley", "toon" }); - shader_modes[RS::SHADER_SPATIAL].modes.push_back({ "specular", "schlick_ggx", "toon", "disabled" }); - shader_modes[RS::SHADER_SPATIAL].modes.push_back({ "skip_vertex_transform" }); - shader_modes[RS::SHADER_SPATIAL].modes.push_back({ "world_vertex_coords" }); - shader_modes[RS::SHADER_SPATIAL].modes.push_back({ "ensure_correct_normals" }); - shader_modes[RS::SHADER_SPATIAL].modes.push_back({ "shadows_disabled" }); - shader_modes[RS::SHADER_SPATIAL].modes.push_back({ "ambient_light_disabled" }); - shader_modes[RS::SHADER_SPATIAL].modes.push_back({ "shadow_to_opacity" }); - shader_modes[RS::SHADER_SPATIAL].modes.push_back({ "vertex_lighting" }); - shader_modes[RS::SHADER_SPATIAL].modes.push_back({ "particle_trails" }); - shader_modes[RS::SHADER_SPATIAL].modes.push_back({ "alpha_to_coverage" }); - shader_modes[RS::SHADER_SPATIAL].modes.push_back({ "alpha_to_coverage_and_one" }); + shader_modes[RS::SHADER_SPATIAL].modes.push_back({ PNAME("blend"), "mix", "add", "sub", "mul" }); + shader_modes[RS::SHADER_SPATIAL].modes.push_back({ PNAME("depth_draw"), "opaque", "always", "never" }); + shader_modes[RS::SHADER_SPATIAL].modes.push_back({ PNAME("depth_prepass_alpha") }); + shader_modes[RS::SHADER_SPATIAL].modes.push_back({ PNAME("depth_test_disabled") }); + shader_modes[RS::SHADER_SPATIAL].modes.push_back({ PNAME("sss_mode_skin") }); + shader_modes[RS::SHADER_SPATIAL].modes.push_back({ PNAME("cull"), "back", "front", "disabled" }); + shader_modes[RS::SHADER_SPATIAL].modes.push_back({ PNAME("unshaded") }); + shader_modes[RS::SHADER_SPATIAL].modes.push_back({ PNAME("wireframe") }); + shader_modes[RS::SHADER_SPATIAL].modes.push_back({ PNAME("diffuse"), "lambert", "lambert_wrap", "burley", "toon" }); + shader_modes[RS::SHADER_SPATIAL].modes.push_back({ PNAME("specular"), "schlick_ggx", "toon", "disabled" }); + shader_modes[RS::SHADER_SPATIAL].modes.push_back({ PNAME("skip_vertex_transform") }); + shader_modes[RS::SHADER_SPATIAL].modes.push_back({ PNAME("world_vertex_coords") }); + shader_modes[RS::SHADER_SPATIAL].modes.push_back({ PNAME("ensure_correct_normals") }); + shader_modes[RS::SHADER_SPATIAL].modes.push_back({ PNAME("shadows_disabled") }); + shader_modes[RS::SHADER_SPATIAL].modes.push_back({ PNAME("ambient_light_disabled") }); + shader_modes[RS::SHADER_SPATIAL].modes.push_back({ PNAME("shadow_to_opacity") }); + shader_modes[RS::SHADER_SPATIAL].modes.push_back({ PNAME("vertex_lighting") }); + shader_modes[RS::SHADER_SPATIAL].modes.push_back({ PNAME("particle_trails") }); + shader_modes[RS::SHADER_SPATIAL].modes.push_back({ PNAME("alpha_to_coverage") }); + shader_modes[RS::SHADER_SPATIAL].modes.push_back({ PNAME("alpha_to_coverage_and_one") }); } /************ CANVAS ITEM **************************/ @@ -299,10 +299,10 @@ ShaderTypes::ShaderTypes() { // canvasitem render modes { - shader_modes[RS::SHADER_CANVAS_ITEM].modes.push_back({ "skip_vertex_transform" }); - shader_modes[RS::SHADER_CANVAS_ITEM].modes.push_back({ "blend", "mix", "add", "sub", "mul", "premul_alpha", "disabled" }); - shader_modes[RS::SHADER_CANVAS_ITEM].modes.push_back({ "unshaded" }); - shader_modes[RS::SHADER_CANVAS_ITEM].modes.push_back({ "light_only" }); + shader_modes[RS::SHADER_CANVAS_ITEM].modes.push_back({ PNAME("skip_vertex_transform") }); + shader_modes[RS::SHADER_CANVAS_ITEM].modes.push_back({ PNAME("blend"), "mix", "add", "sub", "mul", "premul_alpha", "disabled" }); + shader_modes[RS::SHADER_CANVAS_ITEM].modes.push_back({ PNAME("unshaded") }); + shader_modes[RS::SHADER_CANVAS_ITEM].modes.push_back({ PNAME("light_only") }); } /************ PARTICLES **************************/ @@ -380,10 +380,10 @@ ShaderTypes::ShaderTypes() { // particles render modes { - shader_modes[RS::SHADER_PARTICLES].modes.push_back({ "collision_use_scale" }); - shader_modes[RS::SHADER_PARTICLES].modes.push_back({ "disable_force" }); - shader_modes[RS::SHADER_PARTICLES].modes.push_back({ "disable_velocity" }); - shader_modes[RS::SHADER_PARTICLES].modes.push_back({ "keep_data" }); + shader_modes[RS::SHADER_PARTICLES].modes.push_back({ PNAME("collision_use_scale") }); + shader_modes[RS::SHADER_PARTICLES].modes.push_back({ PNAME("disable_force") }); + shader_modes[RS::SHADER_PARTICLES].modes.push_back({ PNAME("disable_velocity") }); + shader_modes[RS::SHADER_PARTICLES].modes.push_back({ PNAME("keep_data") }); } /************ SKY **************************/ @@ -430,9 +430,9 @@ ShaderTypes::ShaderTypes() { // sky render modes { - shader_modes[RS::SHADER_SKY].modes.push_back({ "use_half_res_pass" }); - shader_modes[RS::SHADER_SKY].modes.push_back({ "use_quarter_res_pass" }); - shader_modes[RS::SHADER_SKY].modes.push_back({ "disable_fog" }); + shader_modes[RS::SHADER_SKY].modes.push_back({ PNAME("use_half_res_pass") }); + shader_modes[RS::SHADER_SKY].modes.push_back({ PNAME("use_quarter_res_pass") }); + shader_modes[RS::SHADER_SKY].modes.push_back({ PNAME("disable_fog") }); } /************ FOG **************************/ diff --git a/tests/test_macros.h b/tests/test_macros.h index 189554bd1a..778ba36517 100644 --- a/tests/test_macros.h +++ b/tests/test_macros.h @@ -125,10 +125,9 @@ typedef void (*TestFunc)(); extern HashMap<String, TestFunc> *test_commands; int register_test_command(String p_command, TestFunc p_function); -#define REGISTER_TEST_COMMAND(m_command, m_function) \ - DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(_DOCTEST_ANON_VAR_)) = \ - register_test_command(m_command, m_function); \ - DOCTEST_GLOBAL_NO_WARNINGS_END() +#define REGISTER_TEST_COMMAND(m_command, m_function) \ + DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(DOCTEST_ANON_VAR_), \ + register_test_command(m_command, m_function)) // Utility macros to send an event actions to a given object // Requires Message Queue and InputMap to be setup. diff --git a/thirdparty/README.md b/thirdparty/README.md index b147f9754f..0047f1c66c 100644 --- a/thirdparty/README.md +++ b/thirdparty/README.md @@ -62,10 +62,13 @@ Files extracted from upstream source: ## doctest - Upstream: https://github.com/onqtam/doctest -- Version: 2.4.4 (97d5a9447e66cd5e107b7a6c463be4a468a40496, 2020) +- Version: 2.4.8 (7b9885133108ae301ddd16e2651320f54cafeba7, 2022) - License: MIT -Extracted from .zip provided. Extracted license and header only. +Files extracted from upstream source: + +- `doctest/doctest.h` as `doctest.h` +- `LICENSE.txt` ## embree @@ -159,8 +162,9 @@ Files extracted from upstream source: Files extracted from upstream source: -- the `src/` folder, minus the `.mk` files and the `dlg` and `tools` subfolders -- the `include/` folder, minus the `dlg` subfolder +- `src/` folder, minus the `dlg` and `tools` subfolders + * These files can be removed: `.dat`, `.diff`, `.mk`, `.rc`, `README*` +- `include/` folder, minus the `dlg` subfolder - `LICENSE.TXT` and `docs/FTL.TXT` @@ -336,7 +340,7 @@ File extracted from upstream release tarball: ## meshoptimizer - Upstream: https://github.com/zeux/meshoptimizer -- Version: git (f4c356d79fadb99cbf432f7e199d823581b0e19e, 2021) +- Version: git (8a7d69caa68f778cb559f1879b6beb7987c8c6b7, 2022) - License: MIT Files extracted from upstream repository: @@ -531,7 +535,7 @@ Exclude: ## pcre2 - Upstream: http://www.pcre.org -- Version: 10.39 (35fee4193b852cb504892352bd0155de10809889, 2021) +- Version: 10.40 (3103b8f20a3b9944b177e812fde29fbfb8b90558, 2022) - License: BSD-3-Clause Files extracted from upstream source: @@ -543,11 +547,14 @@ Files extracted from upstream source: - src/sljit/ - AUTHORS and LICENCE +A sljit patch from upstream was backported to fix macOS < 11.0 compilation +in 10.40, it can be found in the `patches` folder. + ## recastnavigation - Upstream: https://github.com/recastnavigation/recastnavigation -- Version: git (57610fa6ef31b39020231906f8c5d40eaa8294ae, 2019) +- Version: git (5a870d427e47abd4a8e4ce58a95582ec049434d5, 2022) - License: zlib Files extracted from upstream source: @@ -559,17 +566,17 @@ Files extracted from upstream source: ## rvo2 - Upstream: https://github.com/snape/RVO2-3D -- Version: 1.0.1 (e3883f288a9e55ecfed3633a01af3e12778c6acf, 2016) +- Version: git (bfc048670a4e85066e86a1f923d8ea92e3add3b2, 2021) - License: Apache 2.0 Files extracted from upstream source: -- All .cpp and .h files in the `src/` folder except for RVO.h, RVOSimulator.cpp and RVOSimulator.h +- All .cpp and .h files in the `src/` folder except for Export.h, RVO.h, RVOSimulator.cpp and RVOSimulator.h - LICENSE Important: Some files have Godot-made changes; so to enrich the features originally proposed by this library and better integrate this library with -Godot. Please check the file to know what's new. +Godot. See the patch in the `patches` folder for details. ## spirv-reflect @@ -714,7 +721,7 @@ File extracted from upstream release tarball: ## xatlas - Upstream: https://github.com/jpcy/xatlas -- Version: git (ec707faeac3b95e6b416076a9509718cce105b6a, 2021) +- Version: git (16ace528acd2cf1f16a7c0dde99c42c486488dbe, 2022) - License: MIT Files extracted from upstream source: diff --git a/thirdparty/certs/ca-certificates.crt b/thirdparty/certs/ca-certificates.crt index 7f89e81d01..e218b024d0 100644 --- a/thirdparty/certs/ca-certificates.crt +++ b/thirdparty/certs/ca-certificates.crt @@ -1,7 +1,7 @@ ## ## Bundle of CA Root Certificates ## -## Certificate data from Mozilla as of: Mon Nov 1 15:39:58 2021 GMT +## Certificate data from Mozilla as of: Thu Mar 31 08:10:21 2022 GMT ## ## This is a bundle of X.509 certificates of public Certificate Authorities ## (CA). These were automatically extracted from Mozilla's root certificates @@ -13,8 +13,8 @@ ## an Apache+mod_ssl webserver for SSL client authentication. ## Just configure this file as the SSLCACertificateFile. ## -## Conversion done with mk-ca-bundle.pl version 1.28. -## SHA256: bb36818a81feaa4cca61101e6d6276cd09e972efcb08112dfed846918ca41d7f +## Conversion done with mk-ca-bundle.pl version 1.29. +## SHA256: d59c5c83ce7a7635fa95521d8d245677949b86d5574bfcc6f855b6a48f2d5566 ## @@ -39,28 +39,6 @@ hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== -----END CERTIFICATE----- -GlobalSign Root CA - R2 -======================= ------BEGIN CERTIFICATE----- -MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv -YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh -bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT -aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln -bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6 -ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp -s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN -S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL -TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C -ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E -FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i -YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN -BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp -9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu -01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7 -9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 -TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== ------END CERTIFICATE----- - Entrust.net Premium 2048 Secure Server CA ========================================= -----BEGIN CERTIFICATE----- @@ -573,28 +551,6 @@ PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== -----END CERTIFICATE----- -Cybertrust Global Root -====================== ------BEGIN CERTIFICATE----- -MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li -ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4 -MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD -ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA -+Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW -0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL -AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin -89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT -8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP -BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2 -MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G -A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO -lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi -5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2 -hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T -X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW -WL1WMRJOEcgh4LMRkWXbtKaIOM5V ------END CERTIFICATE----- - ePKI Root Certification Authority ================================= -----BEGIN CERTIFICATE----- @@ -1037,36 +993,6 @@ tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29 mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 -----END CERTIFICATE----- -EC-ACC -====== ------BEGIN CERTIFICATE----- -MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE -BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w -ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD -VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE -CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT -BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7 -MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt -SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl -Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh -cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK -w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT -ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4 -HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a -E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw -0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E -BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD -VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0 -Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l -dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ -lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa -Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe -l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2 -E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D -5EI= ------END CERTIFICATE----- - Hellenic Academic and Research Institutions RootCA 2011 ======================================================= -----BEGIN CERTIFICATE----- @@ -1737,20 +1663,6 @@ HU6+4WMBzzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbWRNZu 9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg= -----END CERTIFICATE----- -GlobalSign ECC Root CA - R4 -=========================== ------BEGIN CERTIFICATE----- -MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEkMCIGA1UECxMb -R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD -EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb -R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD -EwpHbG9iYWxTaWduMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprl -OQcJFspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAwDgYDVR0P -AQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61FuOJAf/sKbvu+M8k8o4TV -MAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGXkPoUVy0D7O48027KqGx2vKLeuwIgJ6iF -JzWbVsaj8kfSt24bAgAXqmemFZHe+pTsewv4n4Q= ------END CERTIFICATE----- - GlobalSign ECC Root CA - R5 =========================== -----BEGIN CERTIFICATE----- @@ -2472,96 +2384,6 @@ AwMDaAAwZQIwJsdpW9zV57LnyAyMjMPdeYwbY9XJUpROTYJKcx6ygISpJcBMWm1JKWB4E+J+SOtk AjEA2zQgMgj/mkkCtojeFK9dbJlxjRo/i9fgojaGHAeCOnZT/cKi7e97sIBPWA9LUzm9 -----END CERTIFICATE----- -GTS Root R1 -=========== ------BEGIN CERTIFICATE----- -MIIFWjCCA0KgAwIBAgIQbkepxUtHDA3sM9CJuRz04TANBgkqhkiG9w0BAQwFADBHMQswCQYDVQQG -EwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJv -b3QgUjEwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAG -A1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2EQKLHuOhd5s73L+UPreVp0A8of2C+X0yBoJx -9vaMf/vo27xqLpeXo4xL+Sv2sfnOhB2x+cWX3u+58qPpvBKJXqeqUqv4IyfLpLGcY9vXmX7wCl7r -aKb0xlpHDU0QM+NOsROjyBhsS+z8CZDfnWQpJSMHobTSPS5g4M/SCYe7zUjwTcLCeoiKu7rPWRnW -r4+wB7CeMfGCwcDfLqZtbBkOtdh+JhpFAz2weaSUKK0PfyblqAj+lug8aJRT7oM6iCsVlgmy4HqM -LnXWnOunVmSPlk9orj2XwoSPwLxAwAtcvfaHszVsrBhQf4TgTM2S0yDpM7xSma8ytSmzJSq0SPly -4cpk9+aCEI3oncKKiPo4Zor8Y/kB+Xj9e1x3+naH+uzfsQ55lVe0vSbv1gHR6xYKu44LtcXFilWr -06zqkUspzBmkMiVOKvFlRNACzqrOSbTqn3yDsEB750Orp2yjj32JgfpMpf/VjsPOS+C12LOORc92 -wO1AK/1TD7Cn1TsNsYqiA94xrcx36m97PtbfkSIS5r762DL8EGMUUXLeXdYWk70paDPvOmbsB4om -3xPXV2V4J95eSRQAogB/mqghtqmxlbCluQ0WEdrHbEg8QOB+DVrNVjzRlwW5y0vtOUucxD/SVRNu -JLDWcfr0wbrM7Rv1/oFB2ACYPTrIrnqYNxgFlQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD -VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU5K8rJnEaK0gnhS9SZizv8IkTcT4wDQYJKoZIhvcNAQEM -BQADggIBADiWCu49tJYeX++dnAsznyvgyv3SjgofQXSlfKqE1OXyHuY3UjKcC9FhHb8owbZEKTV1 -d5iyfNm9dKyKaOOpMQkpAWBz40d8U6iQSifvS9efk+eCNs6aaAyC58/UEBZvXw6ZXPYfcX3v73sv -fuo21pdwCxXu11xWajOl40k4DLh9+42FpLFZXvRq4d2h9mREruZRgyFmxhE+885H7pwoHyXa/6xm -ld01D1zvICxi/ZG6qcz8WpyTgYMpl0p8WnK0OdC3d8t5/Wk6kjftbjhlRn7pYL15iJdfOBL07q9b -gsiG1eGZbYwE8na6SfZu6W0eX6DvJ4J2QPim01hcDyxC2kLGe4g0x8HYRZvBPsVhHdljUEn2NIVq -4BjFbkerQUIpm/ZgDdIx02OYI5NaAIFItO/Nis3Jz5nu2Z6qNuFoS3FJFDYoOj0dzpqPJeaAcWEr -tXvM+SUWgeExX6GjfhaknBZqlxi9dnKlC54dNuYvoS++cJEPqOba+MSSQGwlfnuzCdyyF62ARPBo -pY+Udf90WuioAnwMCeKpSwughQtiue+hMZL77/ZRBIls6Kl0obsXs7X9SQ98POyDGCBDTtWTurQ0 -sR8WNh8M5mQ5Fkzc4P4dyKliPUDqysU0ArSuiYgzNdwsE3PYJ/HQcu51OyLemGhmW/HGY0dVHLql -CFF1pkgl ------END CERTIFICATE----- - -GTS Root R2 -=========== ------BEGIN CERTIFICATE----- -MIIFWjCCA0KgAwIBAgIQbkepxlqz5yDFMJo/aFLybzANBgkqhkiG9w0BAQwFADBHMQswCQYDVQQG -EwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJv -b3QgUjIwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAG -A1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDO3v2m++zsFDQ8BwZabFn3GTXd98GdVarTzTuk -k3LvCvptnfbwhYBboUhSnznFt+4orO/LdmgUud+tAWyZH8QiHZ/+cnfgLFuv5AS/T3KgGjSY6Dlo -7JUle3ah5mm5hRm9iYz+re026nO8/4Piy33B0s5Ks40FnotJk9/BW9BuXvAuMC6C/Pq8tBcKSOWI -m8Wba96wyrQD8Nr0kLhlZPdcTK3ofmZemde4wj7I0BOdre7kRXuJVfeKH2JShBKzwkCX44ofR5Gm -dFrS+LFjKBC4swm4VndAoiaYecb+3yXuPuWgf9RhD1FLPD+M2uFwdNjCaKH5wQzpoeJ/u1U8dgbu -ak7MkogwTZq9TwtImoS1mKPV+3PBV2HdKFZ1E66HjucMUQkQdYhMvI35ezzUIkgfKtzra7tEscsz -cTJGr61K8YzodDqs5xoic4DSMPclQsciOzsSrZYuxsN2B6ogtzVJV+mSSeh2FnIxZyuWfoqjx5RW -Ir9qS34BIbIjMt/kmkRtWVtd9QCgHJvGeJeNkP+byKq0rxFROV7Z+2et1VsRnTKaG73Vululycsl -aVNVJ1zgyjbLiGH7HrfQy+4W+9OmTN6SpdTi3/UGVN4unUu0kzCqgc7dGtxRcw1PcOnlthYhGXmy -5okLdWTK1au8CcEYof/UVKGFPP0UJAOyh9OktwIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD -VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUu//KjiOfT5nK2+JopqUVJxce2Q4wDQYJKoZIhvcNAQEM -BQADggIBALZp8KZ3/p7uC4Gt4cCpx/k1HUCCq+YEtN/L9x0Pg/B+E02NjO7jMyLDOfxA325BS0JT -vhaI8dI4XsRomRyYUpOM52jtG2pzegVATX9lO9ZY8c6DR2Dj/5epnGB3GFW1fgiTz9D2PGcDFWEJ -+YF59exTpJ/JjwGLc8R3dtyDovUMSRqodt6Sm2T4syzFJ9MHwAiApJiS4wGWAqoC7o87xdFtCjMw -c3i5T1QWvwsHoaRc5svJXISPD+AVdyx+Jn7axEvbpxZ3B7DNdehyQtaVhJ2Gg/LkkM0JR9SLA3Da -WsYDQvTtN6LwG1BUSw7YhN4ZKJmBR64JGz9I0cNv4rBgF/XuIwKl2gBbbZCr7qLpGzvpx0QnRY5r -n/WkhLx3+WuXrD5RRaIRpsyF7gpo8j5QOHokYh4XIDdtak23CZvJ/KRY9bb7nE4Yu5UC56Gtmwfu -Nmsk0jmGwZODUNKBRqhfYlcsu2xkiAhu7xNUX90txGdj08+JN7+dIPT7eoOboB6BAFDC5AwiWVIQ -7UNWhwD4FFKnHYuTjKJNRn8nxnGbJN7k2oaLDX5rIMHAnuFl2GqjpuiFizoHCBy69Y9Vmhh1fuXs -gWbRIXOhNUQLgD1bnF5vKheW0YMjiGZt5obicDIvUiLnyOd/xCxgXS/Dr55FBcOEArf9LAhST4Ld -o/DUhgkC ------END CERTIFICATE----- - -GTS Root R3 -=========== ------BEGIN CERTIFICATE----- -MIICDDCCAZGgAwIBAgIQbkepx2ypcyRAiQ8DVd2NHTAKBggqhkjOPQQDAzBHMQswCQYDVQQGEwJV -UzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3Qg -UjMwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UE -ChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMwdjAQBgcq -hkjOPQIBBgUrgQQAIgNiAAQfTzOHMymKoYTey8chWEGJ6ladK0uFxh1MJ7x/JlFyb+Kf1qPKzEUU -Rout736GjOyxfi//qXGdGIRFBEFVbivqJn+7kAHjSxm65FSWRQmx1WyRRK2EE46ajA2ADDL24Cej -QjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTB8Sa6oC2uhYHP -0/EqEr24Cmf9vDAKBggqhkjOPQQDAwNpADBmAjEAgFukfCPAlaUs3L6JbyO5o91lAFJekazInXJ0 -glMLfalAvWhgxeG4VDvBNhcl2MG9AjEAnjWSdIUlUfUk7GRSJFClH9voy8l27OyCbvWFGFPouOOa -KaqW04MjyaR7YbPMAuhd ------END CERTIFICATE----- - -GTS Root R4 -=========== ------BEGIN CERTIFICATE----- -MIICCjCCAZGgAwIBAgIQbkepyIuUtui7OyrYorLBmTAKBggqhkjOPQQDAzBHMQswCQYDVQQGEwJV -UzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3Qg -UjQwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UE -ChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQwdjAQBgcq -hkjOPQIBBgUrgQQAIgNiAATzdHOnaItgrkO4NcWBMHtLSZ37wWHO5t5GvWvVYRg1rkDdc/eJkTBa -6zzuhXyiQHY7qca4R9gq55KRanPpsXI5nymfopjTX15YhmUPoYRlBtHci8nHc8iMai/lxKvRHYqj -QjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSATNbrdP9JNqPV -2Py1PsVq8JQdjDAKBggqhkjOPQQDAwNnADBkAjBqUFJ0CMRw3J5QdCHojXohw0+WbhXRIjVhLfoI -N+4Zba3bssx9BzT1YBkstTTZbyACMANxsbqjYAuG7ZoIapVon+Kz4ZNkfF6Tpt95LY2F45TPI11x -zPKwTdb+mciUqXWi4w== ------END CERTIFICATE----- - UCA Global G2 Root ================== -----BEGIN CERTIFICATE----- @@ -3230,3 +3052,230 @@ ECUqqHgtvpBBWJAVcqeht6NCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUyRtTgRL+BNUW rcJRQO9gcS3ujwLEXQNwSaSS6sUUiHCm0w2wqsosQJz76YJumgIwK0eaB8bRwoF8yguWGEEbo/Qw CZ61IygNnxS2PFOiTAZpffpskcYqSUXm7LcT4Tps -----END CERTIFICATE----- + +Autoridad de Certificacion Firmaprofesional CIF A62634068 +========================================================= +-----BEGIN CERTIFICATE----- +MIIGFDCCA/ygAwIBAgIIG3Dp0v+ubHEwDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCRVMxQjBA +BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2 +MjYzNDA2ODAeFw0xNDA5MjMxNTIyMDdaFw0zNjA1MDUxNTIyMDdaMFExCzAJBgNVBAYTAkVTMUIw +QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB +NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD +Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P +B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY +7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH +ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI +plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX +MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX +LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK +bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU +vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMB0GA1Ud +DgQWBBRlzeurNR4APn7VdMActHNHDhpkLzASBgNVHRMBAf8ECDAGAQH/AgEBMIGmBgNVHSAEgZ4w +gZswgZgGBFUdIAAwgY8wLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuZmlybWFwcm9mZXNpb25hbC5j +b20vY3BzMFwGCCsGAQUFBwICMFAeTgBQAGEAcwBlAG8AIABkAGUAIABsAGEAIABCAG8AbgBhAG4A +bwB2AGEAIAA0ADcAIABCAGEAcgBjAGUAbABvAG4AYQAgADAAOAAwADEANzAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQELBQADggIBAHSHKAIrdx9miWTtj3QuRhy7qPj4Cx2Dtjqn6EWKB7fgPiDL +4QjbEwj4KKE1soCzC1HA01aajTNFSa9J8OA9B3pFE1r/yJfY0xgsfZb43aJlQ3CTkBW6kN/oGbDb +LIpgD7dvlAceHabJhfa9NPhAeGIQcDq+fUs5gakQ1JZBu/hfHAsdCPKxsIl68veg4MSPi3i1O1il +I45PVf42O+AMt8oqMEEgtIDNrvx2ZnOorm7hfNoD6JQg5iKj0B+QXSBTFCZX2lSX3xZEEAEeiGaP +cjiT3SC3NL7X8e5jjkd5KAb881lFJWAiMxujX6i6KtoaPc1A6ozuBRWV1aUsIC+nmCjuRfzxuIgA +LI9C2lHVnOUTaHFFQ4ueCyE8S1wF3BqfmI7avSKecs2tCsvMo2ebKHTEm9caPARYpoKdrcd7b/+A +lun4jWq9GJAd/0kakFI3ky88Al2CdgtR5xbHV/g4+afNmyJU72OwFW1TZQNKXkqgsqeOSQBZONXH +9IBk9W6VULgRfhVwOEqwf9DEMnDAGf/JOC0ULGb0QkTmVXYbgBVX/8Cnp6o5qtjTcNAuuuuUavpf +NIbnYrX9ivAwhZTJryQCL2/W3Wf+47BVTwSYT6RBVuKT0Gro1vP7ZeDOdcQxWQzugsgMYDNKGbqE +ZycPvEJdvSRUDewdcAZfpLz6IHxV +-----END CERTIFICATE----- + +vTrus ECC Root CA +================= +-----BEGIN CERTIFICATE----- +MIICDzCCAZWgAwIBAgIUbmq8WapTvpg5Z6LSa6Q75m0c1towCgYIKoZIzj0EAwMwRzELMAkGA1UE +BhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4xGjAYBgNVBAMTEXZUcnVzIEVDQyBS +b290IENBMB4XDTE4MDczMTA3MjY0NFoXDTQzMDczMTA3MjY0NFowRzELMAkGA1UEBhMCQ04xHDAa +BgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4xGjAYBgNVBAMTEXZUcnVzIEVDQyBSb290IENBMHYw +EAYHKoZIzj0CAQYFK4EEACIDYgAEZVBKrox5lkqqHAjDo6LN/llWQXf9JpRCux3NCNtzslt188+c +ToL0v/hhJoVs1oVbcnDS/dtitN9Ti72xRFhiQgnH+n9bEOf+QP3A2MMrMudwpremIFUde4BdS49n +TPEQo0IwQDAdBgNVHQ4EFgQUmDnNvtiyjPeyq+GtJK97fKHbH88wDwYDVR0TAQH/BAUwAwEB/zAO +BgNVHQ8BAf8EBAMCAQYwCgYIKoZIzj0EAwMDaAAwZQIwV53dVvHH4+m4SVBrm2nDb+zDfSXkV5UT +QJtS0zvzQBm8JsctBp61ezaf9SXUY2sAAjEA6dPGnlaaKsyh2j/IZivTWJwghfqrkYpwcBE4YGQL +YgmRWAD5Tfs0aNoJrSEGGJTO +-----END CERTIFICATE----- + +vTrus Root CA +============= +-----BEGIN CERTIFICATE----- +MIIFVjCCAz6gAwIBAgIUQ+NxE9izWRRdt86M/TX9b7wFjUUwDQYJKoZIhvcNAQELBQAwQzELMAkG +A1UEBhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4xFjAUBgNVBAMTDXZUcnVzIFJv +b3QgQ0EwHhcNMTgwNzMxMDcyNDA1WhcNNDMwNzMxMDcyNDA1WjBDMQswCQYDVQQGEwJDTjEcMBoG +A1UEChMTaVRydXNDaGluYSBDby4sTHRkLjEWMBQGA1UEAxMNdlRydXMgUm9vdCBDQTCCAiIwDQYJ +KoZIhvcNAQEBBQADggIPADCCAgoCggIBAL1VfGHTuB0EYgWgrmy3cLRB6ksDXhA/kFocizuwZots +SKYcIrrVQJLuM7IjWcmOvFjai57QGfIvWcaMY1q6n6MLsLOaXLoRuBLpDLvPbmyAhykUAyyNJJrI +ZIO1aqwTLDPxn9wsYTwaP3BVm60AUn/PBLn+NvqcwBauYv6WTEN+VRS+GrPSbcKvdmaVayqwlHeF +XgQPYh1jdfdr58tbmnDsPmcF8P4HCIDPKNsFxhQnL4Z98Cfe/+Z+M0jnCx5Y0ScrUw5XSmXX+6KA +YPxMvDVTAWqXcoKv8R1w6Jz1717CbMdHflqUhSZNO7rrTOiwCcJlwp2dCZtOtZcFrPUGoPc2BX70 +kLJrxLT5ZOrpGgrIDajtJ8nU57O5q4IikCc9Kuh8kO+8T/3iCiSn3mUkpF3qwHYw03dQ+A0Em5Q2 +AXPKBlim0zvc+gRGE1WKyURHuFE5Gi7oNOJ5y1lKCn+8pu8fA2dqWSslYpPZUxlmPCdiKYZNpGvu +/9ROutW04o5IWgAZCfEF2c6Rsffr6TlP9m8EQ5pV9T4FFL2/s1m02I4zhKOQUqqzApVg+QxMaPnu +1RcN+HFXtSXkKe5lXa/R7jwXC1pDxaWG6iSe4gUH3DRCEpHWOXSuTEGC2/KmSNGzm/MzqvOmwMVO +9fSddmPmAsYiS8GVP1BkLFTltvA8Kc9XAgMBAAGjQjBAMB0GA1UdDgQWBBRUYnBj8XWEQ1iO0RYg +scasGrz2iTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOC +AgEAKbqSSaet8PFww+SX8J+pJdVrnjT+5hpk9jprUrIQeBqfTNqK2uwcN1LgQkv7bHbKJAs5EhWd +nxEt/Hlk3ODg9d3gV8mlsnZwUKT+twpw1aA08XXXTUm6EdGz2OyC/+sOxL9kLX1jbhd47F18iMjr +jld22VkE+rxSH0Ws8HqA7Oxvdq6R2xCOBNyS36D25q5J08FsEhvMKar5CKXiNxTKsbhm7xqC5PD4 +8acWabfbqWE8n/Uxy+QARsIvdLGx14HuqCaVvIivTDUHKgLKeBRtRytAVunLKmChZwOgzoy8sHJn +xDHO2zTlJQNgJXtxmOTAGytfdELSS8VZCAeHvsXDf+eW2eHcKJfWjwXj9ZtOyh1QRwVTsMo554Wg +icEFOwE30z9J4nfrI8iIZjs9OXYhRvHsXyO466JmdXTBQPfYaJqT4i2pLr0cox7IdMakLXogqzu4 +sEb9b91fUlV1YvCXoHzXOP0l382gmxDPi7g4Xl7FtKYCNqEeXxzP4padKar9mK5S4fNBUvupLnKW +nyfjqnN9+BojZns7q2WwMgFLFT49ok8MKzWixtlnEjUwzXYuFrOZnk1PTi07NEPhmg4NpGaXutIc +SkwsKouLgU9xGqndXHt7CMUADTdA43x7VF8vhV929vensBxXVsFy6K2ir40zSbofitzmdHxghm+H +l3s= +-----END CERTIFICATE----- + +ISRG Root X2 +============ +-----BEGIN CERTIFICATE----- +MIICGzCCAaGgAwIBAgIQQdKd0XLq7qeAwSxs6S+HUjAKBggqhkjOPQQDAzBPMQswCQYDVQQGEwJV +UzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElT +UkcgUm9vdCBYMjAeFw0yMDA5MDQwMDAwMDBaFw00MDA5MTcxNjAwMDBaME8xCzAJBgNVBAYTAlVT +MSkwJwYDVQQKEyBJbnRlcm5ldCBTZWN1cml0eSBSZXNlYXJjaCBHcm91cDEVMBMGA1UEAxMMSVNS +RyBSb290IFgyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEzZvVn4CDCuwJSvMWSj5cz3es3mcFDR0H +ttwW+1qLFNvicWDEukWVEYmO6gbf9yoWHKS5xcUy4APgHoIYOIvXRdgKam7mAHf7AlF9ItgKbppb +d9/w+kHsOdx1ymgHDB/qo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV +HQ4EFgQUfEKWrt5LSDv6kviejM9ti6lyN5UwCgYIKoZIzj0EAwMDaAAwZQIwe3lORlCEwkSHRhtF +cP9Ymd70/aTSVaYgLXTWNLxBo1BfASdWtL4ndQavEi51mI38AjEAi/V3bNTIZargCyzuFJ0nN6T5 +U6VR5CmD1/iQMVtCnwr1/q4AaOeMSQ+2b1tbFfLn +-----END CERTIFICATE----- + +HiPKI Root CA - G1 +================== +-----BEGIN CERTIFICATE----- +MIIFajCCA1KgAwIBAgIQLd2szmKXlKFD6LDNdmpeYDANBgkqhkiG9w0BAQsFADBPMQswCQYDVQQG +EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xGzAZBgNVBAMMEkhpUEtJ +IFJvb3QgQ0EgLSBHMTAeFw0xOTAyMjIwOTQ2MDRaFw0zNzEyMzExNTU5NTlaME8xCzAJBgNVBAYT +AlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEbMBkGA1UEAwwSSGlQS0kg +Um9vdCBDQSAtIEcxMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA9B5/UnMyDHPkvRN0 +o9QwqNCuS9i233VHZvR85zkEHmpwINJaR3JnVfSl6J3VHiGh8Ge6zCFovkRTv4354twvVcg3Px+k +wJyz5HdcoEb+d/oaoDjq7Zpy3iu9lFc6uux55199QmQ5eiY29yTw1S+6lZgRZq2XNdZ1AYDgr/SE +YYwNHl98h5ZeQa/rh+r4XfEuiAU+TCK72h8q3VJGZDnzQs7ZngyzsHeXZJzA9KMuH5UHsBffMNsA +GJZMoYFL3QRtU6M9/Aes1MU3guvklQgZKILSQjqj2FPseYlgSGDIcpJQ3AOPgz+yQlda22rpEZfd +hSi8MEyr48KxRURHH+CKFgeW0iEPU8DtqX7UTuybCeyvQqww1r/REEXgphaypcXTT3OUM3ECoWqj +1jOXTyFjHluP2cFeRXF3D4FdXyGarYPM+l7WjSNfGz1BryB1ZlpK9p/7qxj3ccC2HTHsOyDry+K4 +9a6SsvfhhEvyovKTmiKe0xRvNlS9H15ZFblzqMF8b3ti6RZsR1pl8w4Rm0bZ/W3c1pzAtH2lsN0/ +Vm+h+fbkEkj9Bn8SV7apI09bA8PgcSojt/ewsTu8mL3WmKgMa/aOEmem8rJY5AIJEzypuxC00jBF +8ez3ABHfZfjcK0NVvxaXxA/VLGGEqnKG/uY6fsI/fe78LxQ+5oXdUG+3Se0CAwEAAaNCMEAwDwYD +VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU8ncX+l6o/vY9cdVouslGDDjYr7AwDgYDVR0PAQH/BAQD +AgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBQUfB13HAE4/+qddRxosuej6ip0691x1TPOhwEmSKsxBHi +7zNKpiMdDg1H2DfHb680f0+BazVP6XKlMeJ45/dOlBhbQH3PayFUhuaVevvGyuqcSE5XCV0vrPSl +tJczWNWseanMX/mF+lLFjfiRFOs6DRfQUsJ748JzjkZ4Bjgs6FzaZsT0pPBWGTMpWmWSBUdGSquE +wx4noR8RkpkndZMPvDY7l1ePJlsMu5wP1G4wB9TcXzZoZjmDlicmisjEOf6aIW/Vcobpf2Lll07Q +JNBAsNB1CI69aO4I1258EHBGG3zgiLKecoaZAeO/n0kZtCW+VmWuF2PlHt/o/0elv+EmBYTksMCv +5wiZqAxeJoBF1PhoL5aPruJKHJwWDBNvOIf2u8g0X5IDUXlwpt/L9ZlNec1OvFefQ05rLisY+Gpz +jLrFNe85akEez3GoorKGB1s6yeHvP2UEgEcyRHCVTjFnanRbEEV16rCf0OY1/k6fi8wrkkVbbiVg +hUbN0aqwdmaTd5a+g744tiROJgvM7XpWGuDpWsZkrUx6AEhEL7lAuxM+vhV4nYWBSipX3tUZQ9rb +yltHhoMLP7YNdnhzeSJesYAfz77RP1YQmCuVh6EfnWQUYDksswBVLuT1sw5XxJFBAJw/6KXf6vb/ +yPCtbVKoF6ubYfwSUTXkJf2vqmqGOQ== +-----END CERTIFICATE----- + +GlobalSign ECC Root CA - R4 +=========================== +-----BEGIN CERTIFICATE----- +MIIB3DCCAYOgAwIBAgINAgPlfvU/k/2lCSGypjAKBggqhkjOPQQDAjBQMSQwIgYDVQQLExtHbG9i +YWxTaWduIEVDQyBSb290IENBIC0gUjQxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkds +b2JhbFNpZ24wHhcNMTIxMTEzMDAwMDAwWhcNMzgwMTE5MDMxNDA3WjBQMSQwIgYDVQQLExtHbG9i +YWxTaWduIEVDQyBSb290IENBIC0gUjQxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkds +b2JhbFNpZ24wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAS4xnnTj2wlDp8uORkcA6SumuU5BwkW +ymOxuYb4ilfBV85C+nOh92VC/x7BALJucw7/xyHlGKSq2XE/qNS5zowdo0IwQDAOBgNVHQ8BAf8E +BAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVLB7rUW44kB/+wpu+74zyTyjhNUwCgYI +KoZIzj0EAwIDRwAwRAIgIk90crlgr/HmnKAWBVBfw147bmF0774BxL4YSFlhgjICICadVGNA3jdg +UM/I2O2dgq43mLyjj0xMqTQrbO/7lZsm +-----END CERTIFICATE----- + +GTS Root R1 +=========== +-----BEGIN CERTIFICATE----- +MIIFVzCCAz+gAwIBAgINAgPlk28xsBNJiGuiFzANBgkqhkiG9w0BAQwFADBHMQswCQYDVQQGEwJV +UzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3Qg +UjEwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UE +ChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwggIiMA0G +CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2EQKLHuOhd5s73L+UPreVp0A8of2C+X0yBoJx9vaM +f/vo27xqLpeXo4xL+Sv2sfnOhB2x+cWX3u+58qPpvBKJXqeqUqv4IyfLpLGcY9vXmX7wCl7raKb0 +xlpHDU0QM+NOsROjyBhsS+z8CZDfnWQpJSMHobTSPS5g4M/SCYe7zUjwTcLCeoiKu7rPWRnWr4+w +B7CeMfGCwcDfLqZtbBkOtdh+JhpFAz2weaSUKK0PfyblqAj+lug8aJRT7oM6iCsVlgmy4HqMLnXW +nOunVmSPlk9orj2XwoSPwLxAwAtcvfaHszVsrBhQf4TgTM2S0yDpM7xSma8ytSmzJSq0SPly4cpk +9+aCEI3oncKKiPo4Zor8Y/kB+Xj9e1x3+naH+uzfsQ55lVe0vSbv1gHR6xYKu44LtcXFilWr06zq +kUspzBmkMiVOKvFlRNACzqrOSbTqn3yDsEB750Orp2yjj32JgfpMpf/VjsPOS+C12LOORc92wO1A +K/1TD7Cn1TsNsYqiA94xrcx36m97PtbfkSIS5r762DL8EGMUUXLeXdYWk70paDPvOmbsB4om3xPX +V2V4J95eSRQAogB/mqghtqmxlbCluQ0WEdrHbEg8QOB+DVrNVjzRlwW5y0vtOUucxD/SVRNuJLDW +cfr0wbrM7Rv1/oFB2ACYPTrIrnqYNxgFlQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0T +AQH/BAUwAwEB/zAdBgNVHQ4EFgQU5K8rJnEaK0gnhS9SZizv8IkTcT4wDQYJKoZIhvcNAQEMBQAD +ggIBAJ+qQibbC5u+/x6Wki4+omVKapi6Ist9wTrYggoGxval3sBOh2Z5ofmmWJyq+bXmYOfg6LEe +QkEzCzc9zolwFcq1JKjPa7XSQCGYzyI0zzvFIoTgxQ6KfF2I5DUkzps+GlQebtuyh6f88/qBVRRi +ClmpIgUxPoLW7ttXNLwzldMXG+gnoot7TiYaelpkttGsN/H9oPM47HLwEXWdyzRSjeZ2axfG34ar +J45JK3VmgRAhpuo+9K4l/3wV3s6MJT/KYnAK9y8JZgfIPxz88NtFMN9iiMG1D53Dn0reWVlHxYci +NuaCp+0KueIHoI17eko8cdLiA6EfMgfdG+RCzgwARWGAtQsgWSl4vflVy2PFPEz0tv/bal8xa5me +LMFrUKTX5hgUvYU/Z6tGn6D/Qqc6f1zLXbBwHSs09dR2CQzreExZBfMzQsNhFRAbd03OIozUhfJF +fbdT6u9AWpQKXCBfTkBdYiJ23//OYb2MI3jSNwLgjt7RETeJ9r/tSQdirpLsQBqvFAnZ0E6yove+ +7u7Y/9waLd64NnHi/Hm3lCXRSHNboTXns5lndcEZOitHTtNCjv0xyBZm2tIMPNuzjsmhDYAPexZ3 +FL//2wmUspO8IFgV6dtxQ/PeEMMA3KgqlbbC1j+Qa3bbbP6MvPJwNQzcmRk13NfIRmPVNnGuV/u3 +gm3c +-----END CERTIFICATE----- + +GTS Root R2 +=========== +-----BEGIN CERTIFICATE----- +MIIFVzCCAz+gAwIBAgINAgPlrsWNBCUaqxElqjANBgkqhkiG9w0BAQwFADBHMQswCQYDVQQGEwJV +UzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3Qg +UjIwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UE +ChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwggIiMA0G +CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDO3v2m++zsFDQ8BwZabFn3GTXd98GdVarTzTukk3Lv +CvptnfbwhYBboUhSnznFt+4orO/LdmgUud+tAWyZH8QiHZ/+cnfgLFuv5AS/T3KgGjSY6Dlo7JUl +e3ah5mm5hRm9iYz+re026nO8/4Piy33B0s5Ks40FnotJk9/BW9BuXvAuMC6C/Pq8tBcKSOWIm8Wb +a96wyrQD8Nr0kLhlZPdcTK3ofmZemde4wj7I0BOdre7kRXuJVfeKH2JShBKzwkCX44ofR5GmdFrS ++LFjKBC4swm4VndAoiaYecb+3yXuPuWgf9RhD1FLPD+M2uFwdNjCaKH5wQzpoeJ/u1U8dgbuak7M +kogwTZq9TwtImoS1mKPV+3PBV2HdKFZ1E66HjucMUQkQdYhMvI35ezzUIkgfKtzra7tEscszcTJG +r61K8YzodDqs5xoic4DSMPclQsciOzsSrZYuxsN2B6ogtzVJV+mSSeh2FnIxZyuWfoqjx5RWIr9q +S34BIbIjMt/kmkRtWVtd9QCgHJvGeJeNkP+byKq0rxFROV7Z+2et1VsRnTKaG73VululycslaVNV +J1zgyjbLiGH7HrfQy+4W+9OmTN6SpdTi3/UGVN4unUu0kzCqgc7dGtxRcw1PcOnlthYhGXmy5okL +dWTK1au8CcEYof/UVKGFPP0UJAOyh9OktwIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0T +AQH/BAUwAwEB/zAdBgNVHQ4EFgQUu//KjiOfT5nK2+JopqUVJxce2Q4wDQYJKoZIhvcNAQEMBQAD +ggIBAB/Kzt3HvqGf2SdMC9wXmBFqiN495nFWcrKeGk6c1SuYJF2ba3uwM4IJvd8lRuqYnrYb/oM8 +0mJhwQTtzuDFycgTE1XnqGOtjHsB/ncw4c5omwX4Eu55MaBBRTUoCnGkJE+M3DyCB19m3H0Q/gxh +swWV7uGugQ+o+MePTagjAiZrHYNSVc61LwDKgEDg4XSsYPWHgJ2uNmSRXbBoGOqKYcl3qJfEycel +/FVL8/B/uWU9J2jQzGv6U53hkRrJXRqWbTKH7QMgyALOWr7Z6v2yTcQvG99fevX4i8buMTolUVVn +jWQye+mew4K6Ki3pHrTgSAai/GevHyICc/sgCq+dVEuhzf9gR7A/Xe8bVr2XIZYtCtFenTgCR2y5 +9PYjJbigapordwj6xLEokCZYCDzifqrXPW+6MYgKBesntaFJ7qBFVHvmJ2WZICGoo7z7GJa7Um8M +7YNRTOlZ4iBgxcJlkoKM8xAfDoqXvneCbT+PHV28SSe9zE8P4c52hgQjxcCMElv924SgJPFI/2R8 +0L5cFtHvma3AH/vLrrw4IgYmZNralw4/KBVEqE8AyvCazM90arQ+POuV7LXTWtiBmelDGDfrs7vR +WGJB82bSj6p4lVQgw1oudCvV0b4YacCs1aTPObpRhANl6WLAYv7YTVWW4tAR+kg0Eeye7QUd5MjW +HYbL +-----END CERTIFICATE----- + +GTS Root R3 +=========== +-----BEGIN CERTIFICATE----- +MIICCTCCAY6gAwIBAgINAgPluILrIPglJ209ZjAKBggqhkjOPQQDAzBHMQswCQYDVQQGEwJVUzEi +MCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMw +HhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZ +R29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMwdjAQBgcqhkjO +PQIBBgUrgQQAIgNiAAQfTzOHMymKoYTey8chWEGJ6ladK0uFxh1MJ7x/JlFyb+Kf1qPKzEUURout +736GjOyxfi//qXGdGIRFBEFVbivqJn+7kAHjSxm65FSWRQmx1WyRRK2EE46ajA2ADDL24CejQjBA +MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTB8Sa6oC2uhYHP0/Eq +Er24Cmf9vDAKBggqhkjOPQQDAwNpADBmAjEA9uEglRR7VKOQFhG/hMjqb2sXnh5GmCCbn9MN2azT +L818+FsuVbu/3ZL3pAzcMeGiAjEA/JdmZuVDFhOD3cffL74UOO0BzrEXGhF16b0DjyZ+hOXJYKaV +11RZt+cRLInUue4X +-----END CERTIFICATE----- + +GTS Root R4 +=========== +-----BEGIN CERTIFICATE----- +MIICCTCCAY6gAwIBAgINAgPlwGjvYxqccpBQUjAKBggqhkjOPQQDAzBHMQswCQYDVQQGEwJVUzEi +MCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQw +HhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZ +R29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQwdjAQBgcqhkjO +PQIBBgUrgQQAIgNiAATzdHOnaItgrkO4NcWBMHtLSZ37wWHO5t5GvWvVYRg1rkDdc/eJkTBa6zzu +hXyiQHY7qca4R9gq55KRanPpsXI5nymfopjTX15YhmUPoYRlBtHci8nHc8iMai/lxKvRHYqjQjBA +MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSATNbrdP9JNqPV2Py1 +PsVq8JQdjDAKBggqhkjOPQQDAwNpADBmAjEA6ED/g94D9J+uHXqnLrmvT/aDHQ4thQEd0dlq7A/C +r8deVl5c1RxYIigL9zC2L7F8AjEA8GE8p/SgguMh1YQdc4acLa/KNJvxn7kjNuK8YAOdgLOaVsjh +4rsUecrNIdSUtUlD +-----END CERTIFICATE----- diff --git a/thirdparty/doctest/doctest.h b/thirdparty/doctest/doctest.h index 42eb039979..d25f526827 100644 --- a/thirdparty/doctest/doctest.h +++ b/thirdparty/doctest/doctest.h @@ -11,7 +11,7 @@ // https://opensource.org/licenses/MIT // // The documentation can be found at the library's page: -// https://github.com/onqtam/doctest/blob/master/doc/markdown/readme.md +// https://github.com/doctest/doctest/blob/master/doc/markdown/readme.md // // ================================================================================================= // ================================================================================================= @@ -48,8 +48,16 @@ #define DOCTEST_VERSION_MAJOR 2 #define DOCTEST_VERSION_MINOR 4 -#define DOCTEST_VERSION_PATCH 6 -#define DOCTEST_VERSION_STR "2.4.6" +#define DOCTEST_VERSION_PATCH 8 + +// util we need here +#define DOCTEST_TOSTR_IMPL(x) #x +#define DOCTEST_TOSTR(x) DOCTEST_TOSTR_IMPL(x) + +#define DOCTEST_VERSION_STR \ + DOCTEST_TOSTR(DOCTEST_VERSION_MAJOR) "." \ + DOCTEST_TOSTR(DOCTEST_VERSION_MINOR) "." \ + DOCTEST_TOSTR(DOCTEST_VERSION_PATCH) #define DOCTEST_VERSION \ (DOCTEST_VERSION_MAJOR * 10000 + DOCTEST_VERSION_MINOR * 100 + DOCTEST_VERSION_PATCH) @@ -137,85 +145,93 @@ // == COMPILER WARNINGS ============================================================================ // ================================================================================================= +// both the header and the implementation suppress all of these, +// so it only makes sense to aggregrate them like so +#define DOCTEST_SUPPRESS_COMMON_WARNINGS_PUSH \ + DOCTEST_CLANG_SUPPRESS_WARNING_PUSH \ + DOCTEST_CLANG_SUPPRESS_WARNING("-Wunknown-pragmas") \ + DOCTEST_CLANG_SUPPRESS_WARNING("-Wweak-vtables") \ + DOCTEST_CLANG_SUPPRESS_WARNING("-Wpadded") \ + DOCTEST_CLANG_SUPPRESS_WARNING("-Wmissing-prototypes") \ + DOCTEST_CLANG_SUPPRESS_WARNING("-Wunused-local-typedef") \ + DOCTEST_CLANG_SUPPRESS_WARNING("-Wc++98-compat") \ + DOCTEST_CLANG_SUPPRESS_WARNING("-Wc++98-compat-pedantic") \ + \ + DOCTEST_GCC_SUPPRESS_WARNING_PUSH \ + DOCTEST_GCC_SUPPRESS_WARNING("-Wunknown-pragmas") \ + DOCTEST_GCC_SUPPRESS_WARNING("-Wpragmas") \ + DOCTEST_GCC_SUPPRESS_WARNING("-Weffc++") \ + DOCTEST_GCC_SUPPRESS_WARNING("-Wstrict-overflow") \ + DOCTEST_GCC_SUPPRESS_WARNING("-Wstrict-aliasing") \ + DOCTEST_GCC_SUPPRESS_WARNING("-Wmissing-declarations") \ + DOCTEST_GCC_SUPPRESS_WARNING("-Wunused-local-typedefs") \ + DOCTEST_GCC_SUPPRESS_WARNING("-Wuseless-cast") \ + DOCTEST_GCC_SUPPRESS_WARNING("-Wnoexcept") \ + \ + DOCTEST_MSVC_SUPPRESS_WARNING_PUSH \ + /* these 4 also disabled globally via cmake: */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4514) /* unreferenced inline function has been removed */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4571) /* SEH related */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4710) /* function not inlined */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4711) /* function selected for inline expansion*/ \ + /* */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4616) /* invalid compiler warning */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4619) /* invalid compiler warning */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4996) /* The compiler encountered a deprecated declaration */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4706) /* assignment within conditional expression */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4512) /* 'class' : assignment operator could not be generated */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4127) /* conditional expression is constant */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4820) /* padding */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4625) /* copy constructor was implicitly deleted */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4626) /* assignment operator was implicitly deleted */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(5027) /* move assignment operator implicitly deleted */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(5026) /* move constructor was implicitly deleted */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4640) /* construction of local static object not thread-safe */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(5045) /* Spectre mitigation for memory load */ \ + /* static analysis */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(26439) /* Function may not throw. Declare it 'noexcept' */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(26495) /* Always initialize a member variable */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(26451) /* Arithmetic overflow ... */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(26444) /* Avoid unnamed objects with custom ctor and dtor... */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(26812) /* Prefer 'enum class' over 'enum' */ + +#define DOCTEST_SUPPRESS_COMMON_WARNINGS_POP \ + DOCTEST_CLANG_SUPPRESS_WARNING_POP \ + DOCTEST_GCC_SUPPRESS_WARNING_POP \ + DOCTEST_MSVC_SUPPRESS_WARNING_POP + +DOCTEST_SUPPRESS_COMMON_WARNINGS_PUSH + DOCTEST_CLANG_SUPPRESS_WARNING_PUSH -DOCTEST_CLANG_SUPPRESS_WARNING("-Wunknown-pragmas") DOCTEST_CLANG_SUPPRESS_WARNING("-Wnon-virtual-dtor") -DOCTEST_CLANG_SUPPRESS_WARNING("-Wweak-vtables") -DOCTEST_CLANG_SUPPRESS_WARNING("-Wpadded") DOCTEST_CLANG_SUPPRESS_WARNING("-Wdeprecated") -DOCTEST_CLANG_SUPPRESS_WARNING("-Wmissing-prototypes") -DOCTEST_CLANG_SUPPRESS_WARNING("-Wunused-local-typedef") -DOCTEST_CLANG_SUPPRESS_WARNING("-Wc++98-compat") -DOCTEST_CLANG_SUPPRESS_WARNING("-Wc++98-compat-pedantic") DOCTEST_GCC_SUPPRESS_WARNING_PUSH -DOCTEST_GCC_SUPPRESS_WARNING("-Wunknown-pragmas") -DOCTEST_GCC_SUPPRESS_WARNING("-Wpragmas") -DOCTEST_GCC_SUPPRESS_WARNING("-Weffc++") -DOCTEST_GCC_SUPPRESS_WARNING("-Wstrict-overflow") -DOCTEST_GCC_SUPPRESS_WARNING("-Wstrict-aliasing") DOCTEST_GCC_SUPPRESS_WARNING("-Wctor-dtor-privacy") -DOCTEST_GCC_SUPPRESS_WARNING("-Wmissing-declarations") DOCTEST_GCC_SUPPRESS_WARNING("-Wnon-virtual-dtor") -DOCTEST_GCC_SUPPRESS_WARNING("-Wunused-local-typedefs") -DOCTEST_GCC_SUPPRESS_WARNING("-Wuseless-cast") -DOCTEST_GCC_SUPPRESS_WARNING("-Wnoexcept") DOCTEST_GCC_SUPPRESS_WARNING("-Wsign-promo") DOCTEST_MSVC_SUPPRESS_WARNING_PUSH -DOCTEST_MSVC_SUPPRESS_WARNING(4616) // invalid compiler warning -DOCTEST_MSVC_SUPPRESS_WARNING(4619) // invalid compiler warning -DOCTEST_MSVC_SUPPRESS_WARNING(4996) // The compiler encountered a deprecated declaration -DOCTEST_MSVC_SUPPRESS_WARNING(4706) // assignment within conditional expression -DOCTEST_MSVC_SUPPRESS_WARNING(4512) // 'class' : assignment operator could not be generated -DOCTEST_MSVC_SUPPRESS_WARNING(4127) // conditional expression is constant -DOCTEST_MSVC_SUPPRESS_WARNING(4820) // padding -DOCTEST_MSVC_SUPPRESS_WARNING(4625) // copy constructor was implicitly defined as deleted -DOCTEST_MSVC_SUPPRESS_WARNING(4626) // assignment operator was implicitly defined as deleted -DOCTEST_MSVC_SUPPRESS_WARNING(5027) // move assignment operator was implicitly defined as deleted -DOCTEST_MSVC_SUPPRESS_WARNING(5026) // move constructor was implicitly defined as deleted DOCTEST_MSVC_SUPPRESS_WARNING(4623) // default constructor was implicitly defined as deleted -DOCTEST_MSVC_SUPPRESS_WARNING(4640) // construction of local static object is not thread-safe -// static analysis -DOCTEST_MSVC_SUPPRESS_WARNING(26439) // This kind of function may not throw. Declare it 'noexcept' -DOCTEST_MSVC_SUPPRESS_WARNING(26495) // Always initialize a member variable -DOCTEST_MSVC_SUPPRESS_WARNING(26451) // Arithmetic overflow ... -DOCTEST_MSVC_SUPPRESS_WARNING(26444) // Avoid unnamed objects with custom construction and dtr... -DOCTEST_MSVC_SUPPRESS_WARNING(26812) // Prefer 'enum class' over 'enum' - -// 4548 - expression before comma has no effect; expected expression with side - effect -// 4265 - class has virtual functions, but destructor is not virtual -// 4986 - exception specification does not match previous declaration -// 4350 - behavior change: 'member1' called instead of 'member2' -// 4668 - 'x' is not defined as a preprocessor macro, replacing with '0' for '#if/#elif' -// 4365 - conversion from 'int' to 'unsigned long', signed/unsigned mismatch -// 4774 - format string expected in argument 'x' is not a string literal -// 4820 - padding in structs - -// only 4 should be disabled globally: -// - 4514 # unreferenced inline function has been removed -// - 4571 # SEH related -// - 4710 # function not inlined -// - 4711 # function 'x' selected for automatic inline expansion #define DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_BEGIN \ DOCTEST_MSVC_SUPPRESS_WARNING_PUSH \ - DOCTEST_MSVC_SUPPRESS_WARNING(4548) \ - DOCTEST_MSVC_SUPPRESS_WARNING(4265) \ - DOCTEST_MSVC_SUPPRESS_WARNING(4986) \ - DOCTEST_MSVC_SUPPRESS_WARNING(4350) \ - DOCTEST_MSVC_SUPPRESS_WARNING(4668) \ - DOCTEST_MSVC_SUPPRESS_WARNING(4365) \ - DOCTEST_MSVC_SUPPRESS_WARNING(4774) \ - DOCTEST_MSVC_SUPPRESS_WARNING(4820) \ - DOCTEST_MSVC_SUPPRESS_WARNING(4625) \ - DOCTEST_MSVC_SUPPRESS_WARNING(4626) \ - DOCTEST_MSVC_SUPPRESS_WARNING(5027) \ - DOCTEST_MSVC_SUPPRESS_WARNING(5026) \ - DOCTEST_MSVC_SUPPRESS_WARNING(4623) \ - DOCTEST_MSVC_SUPPRESS_WARNING(5039) \ - DOCTEST_MSVC_SUPPRESS_WARNING(5045) \ - DOCTEST_MSVC_SUPPRESS_WARNING(5105) + DOCTEST_MSVC_SUPPRESS_WARNING(4548) /* before comma no effect; expected side - effect */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4265) /* virtual functions, but destructor is not virtual */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4986) /* exception specification does not match previous */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4350) /* 'member1' called instead of 'member2' */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4668) /* not defined as a preprocessor macro */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4365) /* signed/unsigned mismatch */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4774) /* format string not a string literal */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4820) /* padding */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4625) /* copy constructor was implicitly deleted */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4626) /* assignment operator was implicitly deleted */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(5027) /* move assignment operator implicitly deleted */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(5026) /* move constructor was implicitly deleted */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4623) /* default constructor was implicitly deleted */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(5039) /* pointer to pot. throwing function passed to extern C */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(5045) /* Spectre mitigation for memory load */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(5105) /* macro producing 'defined' has undefined behavior */ #define DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_END DOCTEST_MSVC_SUPPRESS_WARNING_POP @@ -228,6 +244,7 @@ DOCTEST_MSVC_SUPPRESS_WARNING(26812) // Prefer 'enum class' over 'enum' // GCC C++11 feature support table: https://gcc.gnu.org/projects/cxx-status.html // MSVC version table: // https://en.wikipedia.org/wiki/Microsoft_Visual_C%2B%2B#Internal_version_numbering +// MSVC++ 14.3 (17) _MSC_VER == 1930 (Visual Studio 2022) // MSVC++ 14.2 (16) _MSC_VER == 1920 (Visual Studio 2019) // MSVC++ 14.1 (15) _MSC_VER == 1910 (Visual Studio 2017) // MSVC++ 14.0 _MSC_VER == 1900 (Visual Studio 2015) @@ -237,6 +254,10 @@ DOCTEST_MSVC_SUPPRESS_WARNING(26812) // Prefer 'enum class' over 'enum' // MSVC++ 9.0 _MSC_VER == 1500 (Visual Studio 2008) // MSVC++ 8.0 _MSC_VER == 1400 (Visual Studio 2005) +// Universal Windows Platform support +#if defined(WINAPI_FAMILY) && (WINAPI_FAMILY == WINAPI_FAMILY_APP) +#define DOCTEST_CONFIG_NO_WINDOWS_SEH +#endif // WINAPI_FAMILY #if DOCTEST_MSVC && !defined(DOCTEST_CONFIG_WINDOWS_SEH) #define DOCTEST_CONFIG_WINDOWS_SEH #endif // MSVC @@ -312,13 +333,29 @@ DOCTEST_MSVC_SUPPRESS_WARNING(26812) // Prefer 'enum class' over 'enum' #endif #ifndef DOCTEST_NORETURN +#if DOCTEST_MSVC && (DOCTEST_MSVC < DOCTEST_COMPILER(19, 0, 0)) +#define DOCTEST_NORETURN +#else // DOCTEST_MSVC #define DOCTEST_NORETURN [[noreturn]] +#endif // DOCTEST_MSVC #endif // DOCTEST_NORETURN #ifndef DOCTEST_NOEXCEPT +#if DOCTEST_MSVC && (DOCTEST_MSVC < DOCTEST_COMPILER(19, 0, 0)) +#define DOCTEST_NOEXCEPT +#else // DOCTEST_MSVC #define DOCTEST_NOEXCEPT noexcept +#endif // DOCTEST_MSVC #endif // DOCTEST_NOEXCEPT +#ifndef DOCTEST_CONSTEXPR +#if DOCTEST_MSVC && (DOCTEST_MSVC < DOCTEST_COMPILER(19, 0, 0)) +#define DOCTEST_CONSTEXPR const +#else // DOCTEST_MSVC +#define DOCTEST_CONSTEXPR constexpr +#endif // DOCTEST_MSVC +#endif // DOCTEST_CONSTEXPR + // ================================================================================================= // == FEATURE DETECTION END ======================================================================== // ================================================================================================= @@ -332,8 +369,6 @@ DOCTEST_MSVC_SUPPRESS_WARNING(26812) // Prefer 'enum class' over 'enum' #define DOCTEST_ANONYMOUS(x) DOCTEST_CAT(x, __LINE__) #endif // __COUNTER__ -#define DOCTEST_TOSTR(x) #x - #ifndef DOCTEST_CONFIG_ASSERTION_PARAMETERS_BY_VALUE #define DOCTEST_REF_WRAP(x) x& #else // DOCTEST_CONFIG_ASSERTION_PARAMETERS_BY_VALUE @@ -351,11 +386,14 @@ DOCTEST_MSVC_SUPPRESS_WARNING(26812) // Prefer 'enum class' over 'enum' #define DOCTEST_PLATFORM_LINUX #endif // DOCTEST_PLATFORM -#define DOCTEST_GLOBAL_NO_WARNINGS(var) \ +namespace doctest { namespace detail { + static DOCTEST_CONSTEXPR int consume(const int*, int) { return 0; } +}} + +#define DOCTEST_GLOBAL_NO_WARNINGS(var, ...) \ DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wglobal-constructors") \ - DOCTEST_CLANG_SUPPRESS_WARNING("-Wunused-variable") \ - static const int var DOCTEST_UNUSED // NOLINT(fuchsia-statically-constructed-objects,cert-err58-cpp) -#define DOCTEST_GLOBAL_NO_WARNINGS_END() DOCTEST_CLANG_SUPPRESS_WARNING_POP + static const int var = doctest::detail::consume(&var, __VA_ARGS__); \ + DOCTEST_CLANG_SUPPRESS_WARNING_POP #ifndef DOCTEST_BREAK_INTO_DEBUGGER // should probably take a look at https://github.com/scottt/debugbreak @@ -390,32 +428,31 @@ DOCTEST_GCC_SUPPRESS_WARNING_POP #define DOCTEST_CONFIG_USE_STD_HEADERS #endif // DOCTEST_CONFIG_USE_IOSFWD +// for clang - always include ciso646 (which drags some std stuff) because +// we want to check if we are using libc++ with the _LIBCPP_VERSION macro in +// which case we don't want to forward declare stuff from std - for reference: +// https://github.com/doctest/doctest/issues/126 +// https://github.com/doctest/doctest/issues/356 +#if DOCTEST_CLANG +#include <ciso646> +#ifdef _LIBCPP_VERSION +#define DOCTEST_CONFIG_USE_STD_HEADERS +#endif // _LIBCPP_VERSION +#endif // clang + #ifdef DOCTEST_CONFIG_USE_STD_HEADERS #ifndef DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS #define DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS #endif // DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS -#include <iosfwd> #include <cstddef> #include <ostream> +#include <istream> #else // DOCTEST_CONFIG_USE_STD_HEADERS -#if DOCTEST_CLANG -// to detect if libc++ is being used with clang (the _LIBCPP_VERSION identifier) -#include <ciso646> -#endif // clang - -#ifdef _LIBCPP_VERSION -#define DOCTEST_STD_NAMESPACE_BEGIN _LIBCPP_BEGIN_NAMESPACE_STD -#define DOCTEST_STD_NAMESPACE_END _LIBCPP_END_NAMESPACE_STD -#else // _LIBCPP_VERSION -#define DOCTEST_STD_NAMESPACE_BEGIN namespace std { -#define DOCTEST_STD_NAMESPACE_END } -#endif // _LIBCPP_VERSION - // Forward declaring 'X' in namespace std is not permitted by the C++ Standard. DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4643) -DOCTEST_STD_NAMESPACE_BEGIN // NOLINT (cert-dcl58-cpp) +namespace std { // NOLINT (cert-dcl58-cpp) typedef decltype(nullptr) nullptr_t; template <class charT> struct char_traits; @@ -424,17 +461,20 @@ struct char_traits<char>; template <class charT, class traits> class basic_ostream; typedef basic_ostream<char, char_traits<char>> ostream; +template <class charT, class traits> +class basic_istream; +typedef basic_istream<char, char_traits<char>> istream; template <class... Types> class tuple; #if DOCTEST_MSVC >= DOCTEST_COMPILER(19, 20, 0) -// see this issue on why this is needed: https://github.com/onqtam/doctest/issues/183 -template <class _Ty> +// see this issue on why this is needed: https://github.com/doctest/doctest/issues/183 +template <class Ty> class allocator; -template <class _Elem, class _Traits, class _Alloc> +template <class Elem, class Traits, class Alloc> class basic_string; using string = basic_string<char, char_traits<char>, allocator<char>>; #endif // VS 2019 -DOCTEST_STD_NAMESPACE_END +} // namespace std DOCTEST_MSVC_SUPPRESS_WARNING_POP @@ -486,6 +526,8 @@ class DOCTEST_INTERFACE String view data; }; + char* allocate(unsigned sz); + bool isOnStack() const { return (buf[last] & 128) == 0; } void setOnHeap(); void setLast(unsigned in = last); @@ -500,11 +542,12 @@ public: String(const char* in); String(const char* in, unsigned in_size); + String(std::istream& in, unsigned in_size); + String(const String& other); String& operator=(const String& other); String& operator+=(const String& other); - String operator+(const String& other) const; String(String&& other); String& operator=(String&& other); @@ -527,6 +570,8 @@ public: int compare(const String& other, bool no_case = false) const; }; +DOCTEST_INTERFACE String operator+(const String& lhs, const String& rhs); + DOCTEST_INTERFACE bool operator==(const String& lhs, const String& rhs); DOCTEST_INTERFACE bool operator!=(const String& lhs, const String& rhs); DOCTEST_INTERFACE bool operator<(const String& lhs, const String& rhs); @@ -723,9 +768,8 @@ namespace detail { struct ContextOptions //!OCLINT too many fields { - std::ostream* cout; // stdout stream - std::cout by default - std::ostream* cerr; // stderr stream - std::cerr by default - String binary_name; // the test binary name + std::ostream* cout = nullptr; // stdout stream + String binary_name; // the test binary name const detail::TestCase* currentTest = nullptr; @@ -744,9 +788,12 @@ struct ContextOptions //!OCLINT too many fields bool case_sensitive; // if filtering should be case sensitive bool exit; // if the program should be exited after the tests are ran/whatever bool duration; // print the time duration of each test case + bool minimal; // minimal console output (only test failures) + bool quiet; // no console output bool no_throw; // to skip exceptions-related assertion macros bool no_exitcode; // if the framework should return 0 as the exitcode bool no_run; // to not run the tests at all (can be done with an "*" exclude) + bool no_intro; // to not print the intro of the framework bool no_version; // to not print the version of the framework bool no_colors; // if output to the console should be colorized bool force_colors; // forces the use of colors even when a tty cannot be detected @@ -790,6 +837,9 @@ namespace detail { template<class T> struct is_lvalue_reference { const static bool value=false; }; template<class T> struct is_lvalue_reference<T&> { const static bool value=true; }; + template<class T> struct is_rvalue_reference { const static bool value=false; }; + template<class T> struct is_rvalue_reference<T&&> { const static bool value=true; }; + template <class T> inline T&& forward(typename remove_reference<T>::type& t) DOCTEST_NOEXCEPT { @@ -811,7 +861,7 @@ namespace detail { template<class T> struct underlying_type : public std::underlying_type<T> {}; #else // Use compiler intrinsics - template<class T> struct is_enum { constexpr static bool value = __is_enum(T); }; + template<class T> struct is_enum { DOCTEST_CONSTEXPR static bool value = __is_enum(T); }; template<class T> struct underlying_type { typedef __underlying_type(T) type; }; #endif // clang-format on @@ -828,22 +878,21 @@ namespace detail { template<class, class = void> struct check { - static constexpr bool value = false; + static DOCTEST_CONSTEXPR bool value = false; }; template<class T> struct check<T, decltype(os() << val<T>(), void())> { - static constexpr bool value = true; + static DOCTEST_CONSTEXPR bool value = true; }; } // namespace has_insertion_operator_impl template<class T> using has_insertion_operator = has_insertion_operator_impl::check<const T>; - DOCTEST_INTERFACE void my_memcpy(void* dest, const void* src, unsigned num); + DOCTEST_INTERFACE std::ostream* tlssPush(); + DOCTEST_INTERFACE String tlssPop(); - DOCTEST_INTERFACE std::ostream* getTlsOss(); // returns a thread-local ostringstream - DOCTEST_INTERFACE String getTlsOssResult(); template <bool C> struct StringMakerBase @@ -854,13 +903,61 @@ namespace detail { } }; + // Vector<int> and various type other than pointer or array. + template<typename T> + struct filldata + { + static void fill(std::ostream* stream, const T &in) { + *stream << in; + } + }; + + template<typename T,unsigned long N> + struct filldata<T[N]> + { + static void fill(std::ostream* stream, const T (&in)[N]) { + for (unsigned long i = 0; i < N; i++) { + *stream << in[i]; + } + } + }; + + // Specialized since we don't want the terminating null byte! + template<unsigned long N> + struct filldata<const char[N]> + { + static void fill(std::ostream* stream, const char(&in)[N]) { + *stream << in; + } + }; + + template<typename T> + void filloss(std::ostream* stream, const T& in) { + filldata<T>::fill(stream, in); + } + + template<typename T,unsigned long N> + void filloss(std::ostream* stream, const T (&in)[N]) { + // T[N], T(&)[N], T(&&)[N] have same behaviour. + // Hence remove reference. + filldata<typename remove_reference<decltype(in)>::type>::fill(stream, in); + } + template <> struct StringMakerBase<true> { template <typename T> static String convert(const DOCTEST_REF_WRAP(T) in) { - *getTlsOss() << in; - return getTlsOssResult(); + /* When parameter "in" is a null terminated const char* it works. + * When parameter "in" is a T arr[N] without '\0' we can fill the + * stringstream with N objects (T=char).If in is char pointer * + * without '\0' , it would cause segfault + * stepping over unaccessible memory. + */ + + std::ostream* stream = tlssPush(); + filloss(stream, in); + return tlssPop(); } }; @@ -936,7 +1033,7 @@ String toString(const DOCTEST_REF_WRAP(T) value) { } #if DOCTEST_MSVC >= DOCTEST_COMPILER(19, 20, 0) -// see this issue on why this is needed: https://github.com/onqtam/doctest/issues/183 +// see this issue on why this is needed: https://github.com/doctest/doctest/issues/183 DOCTEST_INTERFACE String toString(const std::string& in); #endif // VS 2019 @@ -1079,12 +1176,21 @@ DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wunused-comparison") // If not it doesn't find the operator or if the operator at global scope is defined after // this template, the template won't be instantiated due to SFINAE. Once the template is not // instantiated it can look for global operator using normal conversions. -#define SFINAE_OP(ret,op) decltype(doctest::detail::declval<L>() op doctest::detail::declval<R>(),static_cast<ret>(0)) +#define SFINAE_OP(ret,op) decltype((void)(doctest::detail::declval<L>() op doctest::detail::declval<R>()),ret{}) #define DOCTEST_DO_BINARY_EXPRESSION_COMPARISON(op, op_str, op_macro) \ template <typename R> \ - DOCTEST_NOINLINE SFINAE_OP(Result,op) operator op(R&& rhs) { \ - bool res = op_macro(doctest::detail::forward<L>(lhs), doctest::detail::forward<R>(rhs)); \ + DOCTEST_NOINLINE SFINAE_OP(Result,op) operator op(const R&& rhs) { \ + bool res = op_macro(doctest::detail::forward<const L>(lhs), doctest::detail::forward<const R>(rhs)); \ + if(m_at & assertType::is_false) \ + res = !res; \ + if(!res || doctest::getContextOptions()->success) \ + return Result(res, stringifyBinaryExpr(lhs, op_str, rhs)); \ + return Result(res); \ + } \ + template <typename R ,typename enable_if<!doctest::detail::is_rvalue_reference<R>::value, void >::type* = nullptr> \ + DOCTEST_NOINLINE SFINAE_OP(Result,op) operator op(const R& rhs) { \ + bool res = op_macro(doctest::detail::forward<const L>(lhs), rhs); \ if(m_at & assertType::is_false) \ res = !res; \ if(!res || doctest::getContextOptions()->success) \ @@ -1108,6 +1214,7 @@ DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wunused-comparison") bool m_passed; String m_decomp; + Result() = default; Result(bool passed, const String& decomposition = String()); // forbidding some expressions based on this table: https://en.cppreference.com/w/cpp/language/operator_precedence @@ -1217,8 +1324,7 @@ DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wunused-comparison") , m_at(at) {} DOCTEST_NOINLINE operator Result() { -// this is needed only foc MSVC 2015: -// https://ci.appveyor.com/project/onqtam/doctest/builds/38181202 +// this is needed only for MSVC 2015 DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4800) // 'int': forcing value to bool bool res = static_cast<bool>(lhs); DOCTEST_MSVC_SUPPRESS_WARNING_POP @@ -1230,9 +1336,8 @@ DOCTEST_MSVC_SUPPRESS_WARNING_POP return Result(res); } - /* This is required for user-defined conversions from Expression_lhs to L */ - //operator L() const { return lhs; } - operator L() const { return lhs; } + /* This is required for user-defined conversions from Expression_lhs to L */ + operator L() const { return lhs; } // clang-format off DOCTEST_DO_BINARY_EXPRESSION_COMPARISON(==, " == ", DOCTEST_CMP_EQ) //!OCLINT bitwise operator in conditional @@ -1289,22 +1394,27 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP // https://github.com/catchorg/Catch2/issues/870 // https://github.com/catchorg/Catch2/issues/565 template <typename L> - Expression_lhs<L> operator<<(L &&operand) { - return Expression_lhs<L>(doctest::detail::forward<L>(operand), m_at); + Expression_lhs<const L> operator<<(const L &&operand) { + return Expression_lhs<const L>(doctest::detail::forward<const L>(operand), m_at); + } + + template <typename L,typename enable_if<!doctest::detail::is_rvalue_reference<L>::value,void >::type* = nullptr> + Expression_lhs<const L&> operator<<(const L &operand) { + return Expression_lhs<const L&>(operand, m_at); } }; struct DOCTEST_INTERFACE TestSuite { - const char* m_test_suite; - const char* m_description; - bool m_skip; - bool m_no_breaks; - bool m_no_output; - bool m_may_fail; - bool m_should_fail; - int m_expected_failures; - double m_timeout; + const char* m_test_suite = nullptr; + const char* m_description = nullptr; + bool m_skip = false; + bool m_no_breaks = false; + bool m_no_output = false; + bool m_may_fail = false; + bool m_should_fail = false; + int m_expected_failures = 0; + double m_timeout = 0; TestSuite& operator*(const char* in); @@ -1387,15 +1497,16 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP void setResult(const Result& res); template <int comparison, typename L, typename R> - DOCTEST_NOINLINE void binary_assert(const DOCTEST_REF_WRAP(L) lhs, + DOCTEST_NOINLINE bool binary_assert(const DOCTEST_REF_WRAP(L) lhs, const DOCTEST_REF_WRAP(R) rhs) { m_failed = !RelationalComparator<comparison, L, R>()(lhs, rhs); if(m_failed || getContextOptions()->success) m_decomp = stringifyBinaryExpr(lhs, ", ", rhs); + return !m_failed; } template <typename L> - DOCTEST_NOINLINE void unary_assert(const DOCTEST_REF_WRAP(L) val) { + DOCTEST_NOINLINE bool unary_assert(const DOCTEST_REF_WRAP(L) val) { m_failed = !val; if(m_at & assertType::is_false) //!OCLINT bitwise operator in conditional @@ -1403,6 +1514,8 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP if(m_failed || getContextOptions()->success) m_decomp = toString(val); + + return !m_failed; } void translateException(); @@ -1422,7 +1535,7 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP DOCTEST_INTERFACE void failed_out_of_a_testing_context(const AssertData& ad); - DOCTEST_INTERFACE void decomp_assert(assertType::Enum at, const char* file, int line, + DOCTEST_INTERFACE bool decomp_assert(assertType::Enum at, const char* file, int line, const char* expr, Result result); #define DOCTEST_ASSERT_OUT_OF_TESTS(decomp) \ @@ -1438,7 +1551,7 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP if(checkIfShouldThrow(at)) \ throwException(); \ } \ - return; \ + return !failed; \ } \ } while(false) @@ -1453,7 +1566,7 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP throwException() template <int comparison, typename L, typename R> - DOCTEST_NOINLINE void binary_assert(assertType::Enum at, const char* file, int line, + DOCTEST_NOINLINE bool binary_assert(assertType::Enum at, const char* file, int line, const char* expr, const DOCTEST_REF_WRAP(L) lhs, const DOCTEST_REF_WRAP(R) rhs) { bool failed = !RelationalComparator<comparison, L, R>()(lhs, rhs); @@ -1464,10 +1577,11 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP // ################################################################################### DOCTEST_ASSERT_OUT_OF_TESTS(stringifyBinaryExpr(lhs, ", ", rhs)); DOCTEST_ASSERT_IN_TESTS(stringifyBinaryExpr(lhs, ", ", rhs)); + return !failed; } template <typename L> - DOCTEST_NOINLINE void unary_assert(assertType::Enum at, const char* file, int line, + DOCTEST_NOINLINE bool unary_assert(assertType::Enum at, const char* file, int line, const char* expr, const DOCTEST_REF_WRAP(L) val) { bool failed = !val; @@ -1480,6 +1594,7 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP // ################################################################################### DOCTEST_ASSERT_OUT_OF_TESTS(toString(val)); DOCTEST_ASSERT_IN_TESTS(toString(val)); + return !failed; } struct DOCTEST_INTERFACE IExceptionTranslator @@ -1573,8 +1688,10 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP class DOCTEST_INTERFACE ContextScopeBase : public IContextScope { protected: ContextScopeBase(); + ContextScopeBase(ContextScopeBase&& other); void destroy(); + bool need_to_destroy{true}; }; template <typename L> class ContextScope : public ContextScopeBase @@ -1584,16 +1701,21 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP public: explicit ContextScope(const L &lambda) : lambda_(lambda) {} - ContextScope(ContextScope &&other) : lambda_(other.lambda_) {} + ContextScope(ContextScope &&other) : ContextScopeBase(static_cast<ContextScopeBase&&>(other)), lambda_(other.lambda_) {} void stringify(std::ostream* s) const override { lambda_(s); } - ~ContextScope() override { destroy(); } + ~ContextScope() override { + if (need_to_destroy) { + destroy(); + } + } }; struct DOCTEST_INTERFACE MessageBuilder : public MessageData { std::ostream* m_stream; + bool logged = false; MessageBuilder(const char* file, int line, assertType::Enum severity); MessageBuilder() = delete; @@ -1692,6 +1814,7 @@ public: void addFilter(const char* filter, const char* value); void clearFilters(); + void setOption(const char* option, bool value); void setOption(const char* option, int value); void setOption(const char* option, const char* value); @@ -1701,6 +1824,8 @@ public: void setAssertHandler(detail::assert_handler ah); + void setCout(std::ostream* out); + int run(); }; @@ -1727,6 +1852,7 @@ struct DOCTEST_INTERFACE CurrentTestCaseStats int numAssertsFailedCurrentTest; double seconds; int failure_flags; // use TestCaseFailureReason::Enum + bool testCaseSuccess; }; struct DOCTEST_INTERFACE TestCaseException @@ -1824,10 +1950,11 @@ int registerReporter(const char* name, int priority, bool isReporter) { #if !defined(DOCTEST_CONFIG_DISABLE) // common code in asserts - for convenience -#define DOCTEST_ASSERT_LOG_AND_REACT(b) \ +#define DOCTEST_ASSERT_LOG_REACT_RETURN(b) \ if(b.log()) \ DOCTEST_BREAK_INTO_DEBUGGER(); \ - b.react() + b.react(); \ + return !b.m_failed #ifdef DOCTEST_CONFIG_NO_TRY_CATCH_IN_ASSERTS #define DOCTEST_WRAP_IN_TRY(x) x; @@ -1835,7 +1962,7 @@ int registerReporter(const char* name, int priority, bool isReporter) { #define DOCTEST_WRAP_IN_TRY(x) \ try { \ x; \ - } catch(...) { _DOCTEST_RB.translateException(); } + } catch(...) { DOCTEST_RB.translateException(); } #endif // DOCTEST_CONFIG_NO_TRY_CATCH_IN_ASSERTS #ifdef DOCTEST_CONFIG_VOID_CAST_EXPRESSIONS @@ -1849,13 +1976,12 @@ int registerReporter(const char* name, int priority, bool isReporter) { // registers the test by initializing a dummy var with a function #define DOCTEST_REGISTER_FUNCTION(global_prefix, f, decorators) \ - global_prefix DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(_DOCTEST_ANON_VAR_)) = \ + global_prefix DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(DOCTEST_ANON_VAR_), \ doctest::detail::regTest( \ doctest::detail::TestCase( \ f, __FILE__, __LINE__, \ doctest_detail_test_suite_ns::getCurrentTestSuite()) * \ - decorators); \ - DOCTEST_GLOBAL_NO_WARNINGS_END() + decorators)) #define DOCTEST_IMPLEMENT_FIXTURE(der, base, func, decorators) \ namespace { \ @@ -1878,18 +2004,18 @@ int registerReporter(const char* name, int priority, bool isReporter) { #define DOCTEST_CREATE_AND_REGISTER_FUNCTION_IN_CLASS(f, proxy, decorators) \ static doctest::detail::funcType proxy() { return f; } \ - DOCTEST_REGISTER_FUNCTION(inline const, proxy(), decorators) \ + DOCTEST_REGISTER_FUNCTION(inline, proxy(), decorators) \ static void f() // for registering tests #define DOCTEST_TEST_CASE(decorators) \ - DOCTEST_CREATE_AND_REGISTER_FUNCTION(DOCTEST_ANONYMOUS(_DOCTEST_ANON_FUNC_), decorators) + DOCTEST_CREATE_AND_REGISTER_FUNCTION(DOCTEST_ANONYMOUS(DOCTEST_ANON_FUNC_), decorators) // for registering tests in classes - requires C++17 for inline variables! #if __cplusplus >= 201703L || (DOCTEST_MSVC >= DOCTEST_COMPILER(19, 12, 0) && _MSVC_LANG >= 201703L) #define DOCTEST_TEST_CASE_CLASS(decorators) \ - DOCTEST_CREATE_AND_REGISTER_FUNCTION_IN_CLASS(DOCTEST_ANONYMOUS(_DOCTEST_ANON_FUNC_), \ - DOCTEST_ANONYMOUS(_DOCTEST_ANON_PROXY_), \ + DOCTEST_CREATE_AND_REGISTER_FUNCTION_IN_CLASS(DOCTEST_ANONYMOUS(DOCTEST_ANON_FUNC_), \ + DOCTEST_ANONYMOUS(DOCTEST_ANON_PROXY_), \ decorators) #else // DOCTEST_TEST_CASE_CLASS #define DOCTEST_TEST_CASE_CLASS(...) \ @@ -1898,8 +2024,8 @@ int registerReporter(const char* name, int priority, bool isReporter) { // for registering tests with a fixture #define DOCTEST_TEST_CASE_FIXTURE(c, decorators) \ - DOCTEST_IMPLEMENT_FIXTURE(DOCTEST_ANONYMOUS(_DOCTEST_ANON_CLASS_), c, \ - DOCTEST_ANONYMOUS(_DOCTEST_ANON_FUNC_), decorators) + DOCTEST_IMPLEMENT_FIXTURE(DOCTEST_ANONYMOUS(DOCTEST_ANON_CLASS_), c, \ + DOCTEST_ANONYMOUS(DOCTEST_ANON_FUNC_), decorators) // for converting types to strings without the <typeinfo> header and demangling #define DOCTEST_TYPE_TO_STRING_IMPL(...) \ @@ -1912,7 +2038,7 @@ int registerReporter(const char* name, int priority, bool isReporter) { DOCTEST_TYPE_TO_STRING_IMPL(__VA_ARGS__) \ } \ } \ - typedef int DOCTEST_ANONYMOUS(_DOCTEST_ANON_FOR_SEMICOLON_) + static_assert(true, "") #define DOCTEST_TEST_CASE_TEMPLATE_DEFINE_IMPL(dec, T, iter, func) \ template <typename T> \ @@ -1943,20 +2069,20 @@ int registerReporter(const char* name, int priority, bool isReporter) { #define DOCTEST_TEST_CASE_TEMPLATE_DEFINE(dec, T, id) \ DOCTEST_TEST_CASE_TEMPLATE_DEFINE_IMPL(dec, T, DOCTEST_CAT(id, ITERATOR), \ - DOCTEST_ANONYMOUS(_DOCTEST_ANON_TMP_)) + DOCTEST_ANONYMOUS(DOCTEST_ANON_TMP_)) #define DOCTEST_TEST_CASE_TEMPLATE_INSTANTIATE_IMPL(id, anon, ...) \ - DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_CAT(anon, DUMMY)) = \ - doctest::detail::instantiationHelper(DOCTEST_CAT(id, ITERATOR)<__VA_ARGS__>(__FILE__, __LINE__, 0));\ - DOCTEST_GLOBAL_NO_WARNINGS_END() + DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_CAT(anon, DUMMY), \ + doctest::detail::instantiationHelper( \ + DOCTEST_CAT(id, ITERATOR)<__VA_ARGS__>(__FILE__, __LINE__, 0))) #define DOCTEST_TEST_CASE_TEMPLATE_INVOKE(id, ...) \ - DOCTEST_TEST_CASE_TEMPLATE_INSTANTIATE_IMPL(id, DOCTEST_ANONYMOUS(_DOCTEST_ANON_TMP_), std::tuple<__VA_ARGS__>) \ - typedef int DOCTEST_ANONYMOUS(_DOCTEST_ANON_FOR_SEMICOLON_) + DOCTEST_TEST_CASE_TEMPLATE_INSTANTIATE_IMPL(id, DOCTEST_ANONYMOUS(DOCTEST_ANON_TMP_), std::tuple<__VA_ARGS__>) \ + static_assert(true, "") #define DOCTEST_TEST_CASE_TEMPLATE_APPLY(id, ...) \ - DOCTEST_TEST_CASE_TEMPLATE_INSTANTIATE_IMPL(id, DOCTEST_ANONYMOUS(_DOCTEST_ANON_TMP_), __VA_ARGS__) \ - typedef int DOCTEST_ANONYMOUS(_DOCTEST_ANON_FOR_SEMICOLON_) + DOCTEST_TEST_CASE_TEMPLATE_INSTANTIATE_IMPL(id, DOCTEST_ANONYMOUS(DOCTEST_ANON_TMP_), __VA_ARGS__) \ + static_assert(true, "") #define DOCTEST_TEST_CASE_TEMPLATE_IMPL(dec, T, anon, ...) \ DOCTEST_TEST_CASE_TEMPLATE_DEFINE_IMPL(dec, T, DOCTEST_CAT(anon, ITERATOR), anon); \ @@ -1965,11 +2091,11 @@ int registerReporter(const char* name, int priority, bool isReporter) { static void anon() #define DOCTEST_TEST_CASE_TEMPLATE(dec, T, ...) \ - DOCTEST_TEST_CASE_TEMPLATE_IMPL(dec, T, DOCTEST_ANONYMOUS(_DOCTEST_ANON_TMP_), __VA_ARGS__) + DOCTEST_TEST_CASE_TEMPLATE_IMPL(dec, T, DOCTEST_ANONYMOUS(DOCTEST_ANON_TMP_), __VA_ARGS__) // for subcases #define DOCTEST_SUBCASE(name) \ - if(const doctest::detail::Subcase & DOCTEST_ANONYMOUS(_DOCTEST_ANON_SUBCASE_) DOCTEST_UNUSED = \ + if(const doctest::detail::Subcase & DOCTEST_ANONYMOUS(DOCTEST_ANON_SUBCASE_) DOCTEST_UNUSED = \ doctest::detail::Subcase(name, __FILE__, __LINE__)) // for grouping tests in test suites by using code blocks @@ -1995,53 +2121,53 @@ int registerReporter(const char* name, int priority, bool isReporter) { namespace ns_name #define DOCTEST_TEST_SUITE(decorators) \ - DOCTEST_TEST_SUITE_IMPL(decorators, DOCTEST_ANONYMOUS(_DOCTEST_ANON_SUITE_)) + DOCTEST_TEST_SUITE_IMPL(decorators, DOCTEST_ANONYMOUS(DOCTEST_ANON_SUITE_)) // for starting a testsuite block #define DOCTEST_TEST_SUITE_BEGIN(decorators) \ - DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(_DOCTEST_ANON_VAR_)) = \ - doctest::detail::setTestSuite(doctest::detail::TestSuite() * decorators); \ - DOCTEST_GLOBAL_NO_WARNINGS_END() \ - typedef int DOCTEST_ANONYMOUS(_DOCTEST_ANON_FOR_SEMICOLON_) + DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(DOCTEST_ANON_VAR_), \ + doctest::detail::setTestSuite(doctest::detail::TestSuite() * decorators)) \ + static_assert(true, "") // for ending a testsuite block #define DOCTEST_TEST_SUITE_END \ - DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(_DOCTEST_ANON_VAR_)) = \ - doctest::detail::setTestSuite(doctest::detail::TestSuite() * ""); \ - DOCTEST_GLOBAL_NO_WARNINGS_END() \ - typedef int DOCTEST_ANONYMOUS(_DOCTEST_ANON_FOR_SEMICOLON_) + DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(DOCTEST_ANON_VAR_), \ + doctest::detail::setTestSuite(doctest::detail::TestSuite() * "")) \ + typedef int DOCTEST_ANONYMOUS(DOCTEST_ANON_FOR_SEMICOLON_) // for registering exception translators #define DOCTEST_REGISTER_EXCEPTION_TRANSLATOR_IMPL(translatorName, signature) \ inline doctest::String translatorName(signature); \ - DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(_DOCTEST_ANON_TRANSLATOR_)) = \ - doctest::registerExceptionTranslator(translatorName); \ - DOCTEST_GLOBAL_NO_WARNINGS_END() \ + DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(DOCTEST_ANON_TRANSLATOR_), \ + doctest::registerExceptionTranslator(translatorName)) \ doctest::String translatorName(signature) #define DOCTEST_REGISTER_EXCEPTION_TRANSLATOR(signature) \ - DOCTEST_REGISTER_EXCEPTION_TRANSLATOR_IMPL(DOCTEST_ANONYMOUS(_DOCTEST_ANON_TRANSLATOR_), \ + DOCTEST_REGISTER_EXCEPTION_TRANSLATOR_IMPL(DOCTEST_ANONYMOUS(DOCTEST_ANON_TRANSLATOR_), \ signature) // for registering reporters #define DOCTEST_REGISTER_REPORTER(name, priority, reporter) \ - DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(_DOCTEST_ANON_REPORTER_)) = \ - doctest::registerReporter<reporter>(name, priority, true); \ - DOCTEST_GLOBAL_NO_WARNINGS_END() typedef int DOCTEST_ANONYMOUS(_DOCTEST_ANON_FOR_SEMICOLON_) + DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(DOCTEST_ANON_REPORTER_), \ + doctest::registerReporter<reporter>(name, priority, true)) \ + static_assert(true, "") // for registering listeners #define DOCTEST_REGISTER_LISTENER(name, priority, reporter) \ - DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(_DOCTEST_ANON_REPORTER_)) = \ - doctest::registerReporter<reporter>(name, priority, false); \ - DOCTEST_GLOBAL_NO_WARNINGS_END() typedef int DOCTEST_ANONYMOUS(_DOCTEST_ANON_FOR_SEMICOLON_) + DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(DOCTEST_ANON_REPORTER_), \ + doctest::registerReporter<reporter>(name, priority, false)) \ + static_assert(true, "") -// for logging +// clang-format off +// for logging - disabling formatting because it's important to have these on 2 separate lines - see PR #557 #define DOCTEST_INFO(...) \ - DOCTEST_INFO_IMPL(DOCTEST_ANONYMOUS(_DOCTEST_CAPTURE_), DOCTEST_ANONYMOUS(_DOCTEST_CAPTURE_), \ + DOCTEST_INFO_IMPL(DOCTEST_ANONYMOUS(DOCTEST_CAPTURE_), \ + DOCTEST_ANONYMOUS(DOCTEST_CAPTURE_OTHER_), \ __VA_ARGS__) +// clang-format on #define DOCTEST_INFO_IMPL(mb_name, s_name, ...) \ - auto DOCTEST_ANONYMOUS(_DOCTEST_CAPTURE_) = doctest::detail::MakeContextScope( \ + auto DOCTEST_ANONYMOUS(DOCTEST_CAPTURE_) = doctest::detail::MakeContextScope( \ [&](std::ostream* s_name) { \ doctest::detail::MessageBuilder mb_name(__FILE__, __LINE__, doctest::assertType::is_warn); \ mb_name.m_stream = s_name; \ @@ -2051,16 +2177,18 @@ int registerReporter(const char* name, int priority, bool isReporter) { #define DOCTEST_CAPTURE(x) DOCTEST_INFO(#x " := ", x) #define DOCTEST_ADD_AT_IMPL(type, file, line, mb, ...) \ - do { \ + [&] { \ doctest::detail::MessageBuilder mb(file, line, doctest::assertType::type); \ mb * __VA_ARGS__; \ - DOCTEST_ASSERT_LOG_AND_REACT(mb); \ - } while(false) + if(mb.log()) \ + DOCTEST_BREAK_INTO_DEBUGGER(); \ + mb.react(); \ + }() // clang-format off -#define DOCTEST_ADD_MESSAGE_AT(file, line, ...) DOCTEST_ADD_AT_IMPL(is_warn, file, line, DOCTEST_ANONYMOUS(_DOCTEST_MESSAGE_), __VA_ARGS__) -#define DOCTEST_ADD_FAIL_CHECK_AT(file, line, ...) DOCTEST_ADD_AT_IMPL(is_check, file, line, DOCTEST_ANONYMOUS(_DOCTEST_MESSAGE_), __VA_ARGS__) -#define DOCTEST_ADD_FAIL_AT(file, line, ...) DOCTEST_ADD_AT_IMPL(is_require, file, line, DOCTEST_ANONYMOUS(_DOCTEST_MESSAGE_), __VA_ARGS__) +#define DOCTEST_ADD_MESSAGE_AT(file, line, ...) DOCTEST_ADD_AT_IMPL(is_warn, file, line, DOCTEST_ANONYMOUS(DOCTEST_MESSAGE_), __VA_ARGS__) +#define DOCTEST_ADD_FAIL_CHECK_AT(file, line, ...) DOCTEST_ADD_AT_IMPL(is_check, file, line, DOCTEST_ANONYMOUS(DOCTEST_MESSAGE_), __VA_ARGS__) +#define DOCTEST_ADD_FAIL_AT(file, line, ...) DOCTEST_ADD_AT_IMPL(is_require, file, line, DOCTEST_ANONYMOUS(DOCTEST_MESSAGE_), __VA_ARGS__) // clang-format on #define DOCTEST_MESSAGE(...) DOCTEST_ADD_MESSAGE_AT(__FILE__, __LINE__, __VA_ARGS__) @@ -2073,18 +2201,18 @@ int registerReporter(const char* name, int priority, bool isReporter) { #define DOCTEST_ASSERT_IMPLEMENT_2(assert_type, ...) \ DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Woverloaded-shift-op-parentheses") \ - doctest::detail::ResultBuilder _DOCTEST_RB(doctest::assertType::assert_type, __FILE__, \ + doctest::detail::ResultBuilder DOCTEST_RB(doctest::assertType::assert_type, __FILE__, \ __LINE__, #__VA_ARGS__); \ - DOCTEST_WRAP_IN_TRY(_DOCTEST_RB.setResult( \ + DOCTEST_WRAP_IN_TRY(DOCTEST_RB.setResult( \ doctest::detail::ExpressionDecomposer(doctest::assertType::assert_type) \ << __VA_ARGS__)) \ - DOCTEST_ASSERT_LOG_AND_REACT(_DOCTEST_RB) \ + DOCTEST_ASSERT_LOG_REACT_RETURN(DOCTEST_RB) \ DOCTEST_CLANG_SUPPRESS_WARNING_POP #define DOCTEST_ASSERT_IMPLEMENT_1(assert_type, ...) \ - do { \ + [&] { \ DOCTEST_ASSERT_IMPLEMENT_2(assert_type, __VA_ARGS__); \ - } while(false) + }() #else // DOCTEST_CONFIG_SUPER_FAST_ASSERTS @@ -2108,51 +2236,55 @@ int registerReporter(const char* name, int priority, bool isReporter) { #define DOCTEST_REQUIRE_FALSE(...) DOCTEST_ASSERT_IMPLEMENT_1(DT_REQUIRE_FALSE, __VA_ARGS__) // clang-format off -#define DOCTEST_WARN_MESSAGE(cond, ...) do { DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_WARN, cond); } while(false) -#define DOCTEST_CHECK_MESSAGE(cond, ...) do { DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_CHECK, cond); } while(false) -#define DOCTEST_REQUIRE_MESSAGE(cond, ...) do { DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_REQUIRE, cond); } while(false) -#define DOCTEST_WARN_FALSE_MESSAGE(cond, ...) do { DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_WARN_FALSE, cond); } while(false) -#define DOCTEST_CHECK_FALSE_MESSAGE(cond, ...) do { DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_CHECK_FALSE, cond); } while(false) -#define DOCTEST_REQUIRE_FALSE_MESSAGE(cond, ...) do { DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_REQUIRE_FALSE, cond); } while(false) +#define DOCTEST_WARN_MESSAGE(cond, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_WARN, cond); }() +#define DOCTEST_CHECK_MESSAGE(cond, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_CHECK, cond); }() +#define DOCTEST_REQUIRE_MESSAGE(cond, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_REQUIRE, cond); }() +#define DOCTEST_WARN_FALSE_MESSAGE(cond, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_WARN_FALSE, cond); }() +#define DOCTEST_CHECK_FALSE_MESSAGE(cond, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_CHECK_FALSE, cond); }() +#define DOCTEST_REQUIRE_FALSE_MESSAGE(cond, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_REQUIRE_FALSE, cond); }() // clang-format on #define DOCTEST_ASSERT_THROWS_AS(expr, assert_type, message, ...) \ - do { \ + [&] { \ if(!doctest::getContextOptions()->no_throw) { \ - doctest::detail::ResultBuilder _DOCTEST_RB(doctest::assertType::assert_type, __FILE__, \ + doctest::detail::ResultBuilder DOCTEST_RB(doctest::assertType::assert_type, __FILE__, \ __LINE__, #expr, #__VA_ARGS__, message); \ try { \ DOCTEST_CAST_TO_VOID(expr) \ } catch(const typename doctest::detail::remove_const< \ typename doctest::detail::remove_reference<__VA_ARGS__>::type>::type&) { \ - _DOCTEST_RB.translateException(); \ - _DOCTEST_RB.m_threw_as = true; \ - } catch(...) { _DOCTEST_RB.translateException(); } \ - DOCTEST_ASSERT_LOG_AND_REACT(_DOCTEST_RB); \ + DOCTEST_RB.translateException(); \ + DOCTEST_RB.m_threw_as = true; \ + } catch(...) { DOCTEST_RB.translateException(); } \ + DOCTEST_ASSERT_LOG_REACT_RETURN(DOCTEST_RB); \ + } else { \ + return false; \ } \ - } while(false) + }() #define DOCTEST_ASSERT_THROWS_WITH(expr, expr_str, assert_type, ...) \ - do { \ + [&] { \ if(!doctest::getContextOptions()->no_throw) { \ - doctest::detail::ResultBuilder _DOCTEST_RB(doctest::assertType::assert_type, __FILE__, \ + doctest::detail::ResultBuilder DOCTEST_RB(doctest::assertType::assert_type, __FILE__, \ __LINE__, expr_str, "", __VA_ARGS__); \ try { \ DOCTEST_CAST_TO_VOID(expr) \ - } catch(...) { _DOCTEST_RB.translateException(); } \ - DOCTEST_ASSERT_LOG_AND_REACT(_DOCTEST_RB); \ + } catch(...) { DOCTEST_RB.translateException(); } \ + DOCTEST_ASSERT_LOG_REACT_RETURN(DOCTEST_RB); \ + } else { \ + return false; \ } \ - } while(false) + }() #define DOCTEST_ASSERT_NOTHROW(assert_type, ...) \ - do { \ - doctest::detail::ResultBuilder _DOCTEST_RB(doctest::assertType::assert_type, __FILE__, \ + [&] { \ + doctest::detail::ResultBuilder DOCTEST_RB(doctest::assertType::assert_type, __FILE__, \ __LINE__, #__VA_ARGS__); \ try { \ DOCTEST_CAST_TO_VOID(__VA_ARGS__) \ - } catch(...) { _DOCTEST_RB.translateException(); } \ - DOCTEST_ASSERT_LOG_AND_REACT(_DOCTEST_RB); \ - } while(false) + } catch(...) { DOCTEST_RB.translateException(); } \ + DOCTEST_ASSERT_LOG_REACT_RETURN(DOCTEST_RB); \ + }() // clang-format off #define DOCTEST_WARN_THROWS(...) DOCTEST_ASSERT_THROWS_WITH((__VA_ARGS__), #__VA_ARGS__, DT_WARN_THROWS, "") @@ -2175,42 +2307,42 @@ int registerReporter(const char* name, int priority, bool isReporter) { #define DOCTEST_CHECK_NOTHROW(...) DOCTEST_ASSERT_NOTHROW(DT_CHECK_NOTHROW, __VA_ARGS__) #define DOCTEST_REQUIRE_NOTHROW(...) DOCTEST_ASSERT_NOTHROW(DT_REQUIRE_NOTHROW, __VA_ARGS__) -#define DOCTEST_WARN_THROWS_MESSAGE(expr, ...) do { DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_THROWS(expr); } while(false) -#define DOCTEST_CHECK_THROWS_MESSAGE(expr, ...) do { DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_THROWS(expr); } while(false) -#define DOCTEST_REQUIRE_THROWS_MESSAGE(expr, ...) do { DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_THROWS(expr); } while(false) -#define DOCTEST_WARN_THROWS_AS_MESSAGE(expr, ex, ...) do { DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_THROWS_AS(expr, ex); } while(false) -#define DOCTEST_CHECK_THROWS_AS_MESSAGE(expr, ex, ...) do { DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_THROWS_AS(expr, ex); } while(false) -#define DOCTEST_REQUIRE_THROWS_AS_MESSAGE(expr, ex, ...) do { DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_THROWS_AS(expr, ex); } while(false) -#define DOCTEST_WARN_THROWS_WITH_MESSAGE(expr, with, ...) do { DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_THROWS_WITH(expr, with); } while(false) -#define DOCTEST_CHECK_THROWS_WITH_MESSAGE(expr, with, ...) do { DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_THROWS_WITH(expr, with); } while(false) -#define DOCTEST_REQUIRE_THROWS_WITH_MESSAGE(expr, with, ...) do { DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_THROWS_WITH(expr, with); } while(false) -#define DOCTEST_WARN_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) do { DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_THROWS_WITH_AS(expr, with, ex); } while(false) -#define DOCTEST_CHECK_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) do { DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_THROWS_WITH_AS(expr, with, ex); } while(false) -#define DOCTEST_REQUIRE_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) do { DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_THROWS_WITH_AS(expr, with, ex); } while(false) -#define DOCTEST_WARN_NOTHROW_MESSAGE(expr, ...) do { DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_NOTHROW(expr); } while(false) -#define DOCTEST_CHECK_NOTHROW_MESSAGE(expr, ...) do { DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_NOTHROW(expr); } while(false) -#define DOCTEST_REQUIRE_NOTHROW_MESSAGE(expr, ...) do { DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_NOTHROW(expr); } while(false) +#define DOCTEST_WARN_THROWS_MESSAGE(expr, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_THROWS(expr); }() +#define DOCTEST_CHECK_THROWS_MESSAGE(expr, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_THROWS(expr); }() +#define DOCTEST_REQUIRE_THROWS_MESSAGE(expr, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_THROWS(expr); }() +#define DOCTEST_WARN_THROWS_AS_MESSAGE(expr, ex, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_THROWS_AS(expr, ex); }() +#define DOCTEST_CHECK_THROWS_AS_MESSAGE(expr, ex, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_THROWS_AS(expr, ex); }() +#define DOCTEST_REQUIRE_THROWS_AS_MESSAGE(expr, ex, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_THROWS_AS(expr, ex); }() +#define DOCTEST_WARN_THROWS_WITH_MESSAGE(expr, with, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_THROWS_WITH(expr, with); }() +#define DOCTEST_CHECK_THROWS_WITH_MESSAGE(expr, with, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_THROWS_WITH(expr, with); }() +#define DOCTEST_REQUIRE_THROWS_WITH_MESSAGE(expr, with, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_THROWS_WITH(expr, with); }() +#define DOCTEST_WARN_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_THROWS_WITH_AS(expr, with, ex); }() +#define DOCTEST_CHECK_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_THROWS_WITH_AS(expr, with, ex); }() +#define DOCTEST_REQUIRE_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_THROWS_WITH_AS(expr, with, ex); }() +#define DOCTEST_WARN_NOTHROW_MESSAGE(expr, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_NOTHROW(expr); }() +#define DOCTEST_CHECK_NOTHROW_MESSAGE(expr, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_NOTHROW(expr); }() +#define DOCTEST_REQUIRE_NOTHROW_MESSAGE(expr, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_NOTHROW(expr); }() // clang-format on #ifndef DOCTEST_CONFIG_SUPER_FAST_ASSERTS #define DOCTEST_BINARY_ASSERT(assert_type, comp, ...) \ - do { \ - doctest::detail::ResultBuilder _DOCTEST_RB(doctest::assertType::assert_type, __FILE__, \ + [&] { \ + doctest::detail::ResultBuilder DOCTEST_RB(doctest::assertType::assert_type, __FILE__, \ __LINE__, #__VA_ARGS__); \ DOCTEST_WRAP_IN_TRY( \ - _DOCTEST_RB.binary_assert<doctest::detail::binaryAssertComparison::comp>( \ + DOCTEST_RB.binary_assert<doctest::detail::binaryAssertComparison::comp>( \ __VA_ARGS__)) \ - DOCTEST_ASSERT_LOG_AND_REACT(_DOCTEST_RB); \ - } while(false) + DOCTEST_ASSERT_LOG_REACT_RETURN(DOCTEST_RB); \ + }() #define DOCTEST_UNARY_ASSERT(assert_type, ...) \ - do { \ - doctest::detail::ResultBuilder _DOCTEST_RB(doctest::assertType::assert_type, __FILE__, \ + [&] { \ + doctest::detail::ResultBuilder DOCTEST_RB(doctest::assertType::assert_type, __FILE__, \ __LINE__, #__VA_ARGS__); \ - DOCTEST_WRAP_IN_TRY(_DOCTEST_RB.unary_assert(__VA_ARGS__)) \ - DOCTEST_ASSERT_LOG_AND_REACT(_DOCTEST_RB); \ - } while(false) + DOCTEST_WRAP_IN_TRY(DOCTEST_RB.unary_assert(__VA_ARGS__)) \ + DOCTEST_ASSERT_LOG_REACT_RETURN(DOCTEST_RB); \ + }() #else // DOCTEST_CONFIG_SUPER_FAST_ASSERTS @@ -2286,37 +2418,37 @@ int registerReporter(const char* name, int priority, bool isReporter) { #ifdef DOCTEST_CONFIG_NO_EXCEPTIONS_BUT_WITH_ALL_ASSERTS -#define DOCTEST_WARN_THROWS(...) (static_cast<void>(0)) -#define DOCTEST_CHECK_THROWS(...) (static_cast<void>(0)) -#define DOCTEST_REQUIRE_THROWS(...) (static_cast<void>(0)) -#define DOCTEST_WARN_THROWS_AS(expr, ...) (static_cast<void>(0)) -#define DOCTEST_CHECK_THROWS_AS(expr, ...) (static_cast<void>(0)) -#define DOCTEST_REQUIRE_THROWS_AS(expr, ...) (static_cast<void>(0)) -#define DOCTEST_WARN_THROWS_WITH(expr, ...) (static_cast<void>(0)) -#define DOCTEST_CHECK_THROWS_WITH(expr, ...) (static_cast<void>(0)) -#define DOCTEST_REQUIRE_THROWS_WITH(expr, ...) (static_cast<void>(0)) -#define DOCTEST_WARN_THROWS_WITH_AS(expr, with, ...) (static_cast<void>(0)) -#define DOCTEST_CHECK_THROWS_WITH_AS(expr, with, ...) (static_cast<void>(0)) -#define DOCTEST_REQUIRE_THROWS_WITH_AS(expr, with, ...) (static_cast<void>(0)) -#define DOCTEST_WARN_NOTHROW(...) (static_cast<void>(0)) -#define DOCTEST_CHECK_NOTHROW(...) (static_cast<void>(0)) -#define DOCTEST_REQUIRE_NOTHROW(...) (static_cast<void>(0)) - -#define DOCTEST_WARN_THROWS_MESSAGE(expr, ...) (static_cast<void>(0)) -#define DOCTEST_CHECK_THROWS_MESSAGE(expr, ...) (static_cast<void>(0)) -#define DOCTEST_REQUIRE_THROWS_MESSAGE(expr, ...) (static_cast<void>(0)) -#define DOCTEST_WARN_THROWS_AS_MESSAGE(expr, ex, ...) (static_cast<void>(0)) -#define DOCTEST_CHECK_THROWS_AS_MESSAGE(expr, ex, ...) (static_cast<void>(0)) -#define DOCTEST_REQUIRE_THROWS_AS_MESSAGE(expr, ex, ...) (static_cast<void>(0)) -#define DOCTEST_WARN_THROWS_WITH_MESSAGE(expr, with, ...) (static_cast<void>(0)) -#define DOCTEST_CHECK_THROWS_WITH_MESSAGE(expr, with, ...) (static_cast<void>(0)) -#define DOCTEST_REQUIRE_THROWS_WITH_MESSAGE(expr, with, ...) (static_cast<void>(0)) -#define DOCTEST_WARN_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) (static_cast<void>(0)) -#define DOCTEST_CHECK_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) (static_cast<void>(0)) -#define DOCTEST_REQUIRE_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) (static_cast<void>(0)) -#define DOCTEST_WARN_NOTHROW_MESSAGE(expr, ...) (static_cast<void>(0)) -#define DOCTEST_CHECK_NOTHROW_MESSAGE(expr, ...) (static_cast<void>(0)) -#define DOCTEST_REQUIRE_NOTHROW_MESSAGE(expr, ...) (static_cast<void>(0)) +#define DOCTEST_WARN_THROWS(...) ([] { return false; }) +#define DOCTEST_CHECK_THROWS(...) ([] { return false; }) +#define DOCTEST_REQUIRE_THROWS(...) ([] { return false; }) +#define DOCTEST_WARN_THROWS_AS(expr, ...) ([] { return false; }) +#define DOCTEST_CHECK_THROWS_AS(expr, ...) ([] { return false; }) +#define DOCTEST_REQUIRE_THROWS_AS(expr, ...) ([] { return false; }) +#define DOCTEST_WARN_THROWS_WITH(expr, ...) ([] { return false; }) +#define DOCTEST_CHECK_THROWS_WITH(expr, ...) ([] { return false; }) +#define DOCTEST_REQUIRE_THROWS_WITH(expr, ...) ([] { return false; }) +#define DOCTEST_WARN_THROWS_WITH_AS(expr, with, ...) ([] { return false; }) +#define DOCTEST_CHECK_THROWS_WITH_AS(expr, with, ...) ([] { return false; }) +#define DOCTEST_REQUIRE_THROWS_WITH_AS(expr, with, ...) ([] { return false; }) +#define DOCTEST_WARN_NOTHROW(...) ([] { return false; }) +#define DOCTEST_CHECK_NOTHROW(...) ([] { return false; }) +#define DOCTEST_REQUIRE_NOTHROW(...) ([] { return false; }) + +#define DOCTEST_WARN_THROWS_MESSAGE(expr, ...) ([] { return false; }) +#define DOCTEST_CHECK_THROWS_MESSAGE(expr, ...) ([] { return false; }) +#define DOCTEST_REQUIRE_THROWS_MESSAGE(expr, ...) ([] { return false; }) +#define DOCTEST_WARN_THROWS_AS_MESSAGE(expr, ex, ...) ([] { return false; }) +#define DOCTEST_CHECK_THROWS_AS_MESSAGE(expr, ex, ...) ([] { return false; }) +#define DOCTEST_REQUIRE_THROWS_AS_MESSAGE(expr, ex, ...) ([] { return false; }) +#define DOCTEST_WARN_THROWS_WITH_MESSAGE(expr, with, ...) ([] { return false; }) +#define DOCTEST_CHECK_THROWS_WITH_MESSAGE(expr, with, ...) ([] { return false; }) +#define DOCTEST_REQUIRE_THROWS_WITH_MESSAGE(expr, with, ...) ([] { return false; }) +#define DOCTEST_WARN_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) ([] { return false; }) +#define DOCTEST_CHECK_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) ([] { return false; }) +#define DOCTEST_REQUIRE_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) ([] { return false; }) +#define DOCTEST_WARN_NOTHROW_MESSAGE(expr, ...) ([] { return false; }) +#define DOCTEST_CHECK_NOTHROW_MESSAGE(expr, ...) ([] { return false; }) +#define DOCTEST_REQUIRE_NOTHROW_MESSAGE(expr, ...) ([] { return false; }) #else // DOCTEST_CONFIG_NO_EXCEPTIONS_BUT_WITH_ALL_ASSERTS @@ -2358,35 +2490,32 @@ int registerReporter(const char* name, int priority, bool isReporter) { // for registering tests #define DOCTEST_TEST_CASE(name) \ - DOCTEST_CREATE_AND_REGISTER_FUNCTION(DOCTEST_ANONYMOUS(_DOCTEST_ANON_FUNC_), name) + DOCTEST_CREATE_AND_REGISTER_FUNCTION(DOCTEST_ANONYMOUS(DOCTEST_ANON_FUNC_), name) // for registering tests in classes #define DOCTEST_TEST_CASE_CLASS(name) \ - DOCTEST_CREATE_AND_REGISTER_FUNCTION(DOCTEST_ANONYMOUS(_DOCTEST_ANON_FUNC_), name) + DOCTEST_CREATE_AND_REGISTER_FUNCTION(DOCTEST_ANONYMOUS(DOCTEST_ANON_FUNC_), name) // for registering tests with a fixture #define DOCTEST_TEST_CASE_FIXTURE(x, name) \ - DOCTEST_IMPLEMENT_FIXTURE(DOCTEST_ANONYMOUS(_DOCTEST_ANON_CLASS_), x, \ - DOCTEST_ANONYMOUS(_DOCTEST_ANON_FUNC_), name) + DOCTEST_IMPLEMENT_FIXTURE(DOCTEST_ANONYMOUS(DOCTEST_ANON_CLASS_), x, \ + DOCTEST_ANONYMOUS(DOCTEST_ANON_FUNC_), name) // for converting types to strings without the <typeinfo> header and demangling -#define DOCTEST_TYPE_TO_STRING(...) typedef int DOCTEST_ANONYMOUS(_DOCTEST_ANON_FOR_SEMICOLON_) +#define DOCTEST_TYPE_TO_STRING(...) static_assert(true, "") #define DOCTEST_TYPE_TO_STRING_IMPL(...) // for typed tests #define DOCTEST_TEST_CASE_TEMPLATE(name, type, ...) \ template <typename type> \ - inline void DOCTEST_ANONYMOUS(_DOCTEST_ANON_TMP_)() + inline void DOCTEST_ANONYMOUS(DOCTEST_ANON_TMP_)() #define DOCTEST_TEST_CASE_TEMPLATE_DEFINE(name, type, id) \ template <typename type> \ - inline void DOCTEST_ANONYMOUS(_DOCTEST_ANON_TMP_)() + inline void DOCTEST_ANONYMOUS(DOCTEST_ANON_TMP_)() -#define DOCTEST_TEST_CASE_TEMPLATE_INVOKE(id, ...) \ - typedef int DOCTEST_ANONYMOUS(_DOCTEST_ANON_FOR_SEMICOLON_) - -#define DOCTEST_TEST_CASE_TEMPLATE_APPLY(id, ...) \ - typedef int DOCTEST_ANONYMOUS(_DOCTEST_ANON_FOR_SEMICOLON_) +#define DOCTEST_TEST_CASE_TEMPLATE_INVOKE(id, ...) static_assert(true, "") +#define DOCTEST_TEST_CASE_TEMPLATE_APPLY(id, ...) static_assert(true, "") // for subcases #define DOCTEST_SUBCASE(name) @@ -2395,14 +2524,14 @@ int registerReporter(const char* name, int priority, bool isReporter) { #define DOCTEST_TEST_SUITE(name) namespace // for starting a testsuite block -#define DOCTEST_TEST_SUITE_BEGIN(name) typedef int DOCTEST_ANONYMOUS(_DOCTEST_ANON_FOR_SEMICOLON_) +#define DOCTEST_TEST_SUITE_BEGIN(name) static_assert(true, "") // for ending a testsuite block -#define DOCTEST_TEST_SUITE_END typedef int DOCTEST_ANONYMOUS(_DOCTEST_ANON_FOR_SEMICOLON_) +#define DOCTEST_TEST_SUITE_END typedef int DOCTEST_ANONYMOUS(DOCTEST_ANON_FOR_SEMICOLON_) #define DOCTEST_REGISTER_EXCEPTION_TRANSLATOR(signature) \ template <typename DOCTEST_UNUSED_TEMPLATE_TYPE> \ - static inline doctest::String DOCTEST_ANONYMOUS(_DOCTEST_ANON_TRANSLATOR_)(signature) + static inline doctest::String DOCTEST_ANONYMOUS(DOCTEST_ANON_TRANSLATOR_)(signature) #define DOCTEST_REGISTER_REPORTER(name, priority, reporter) #define DOCTEST_REGISTER_LISTENER(name, priority, reporter) @@ -2416,77 +2545,138 @@ int registerReporter(const char* name, int priority, bool isReporter) { #define DOCTEST_FAIL_CHECK(...) (static_cast<void>(0)) #define DOCTEST_FAIL(...) (static_cast<void>(0)) -#define DOCTEST_WARN(...) (static_cast<void>(0)) -#define DOCTEST_CHECK(...) (static_cast<void>(0)) -#define DOCTEST_REQUIRE(...) (static_cast<void>(0)) -#define DOCTEST_WARN_FALSE(...) (static_cast<void>(0)) -#define DOCTEST_CHECK_FALSE(...) (static_cast<void>(0)) -#define DOCTEST_REQUIRE_FALSE(...) (static_cast<void>(0)) - -#define DOCTEST_WARN_MESSAGE(cond, ...) (static_cast<void>(0)) -#define DOCTEST_CHECK_MESSAGE(cond, ...) (static_cast<void>(0)) -#define DOCTEST_REQUIRE_MESSAGE(cond, ...) (static_cast<void>(0)) -#define DOCTEST_WARN_FALSE_MESSAGE(cond, ...) (static_cast<void>(0)) -#define DOCTEST_CHECK_FALSE_MESSAGE(cond, ...) (static_cast<void>(0)) -#define DOCTEST_REQUIRE_FALSE_MESSAGE(cond, ...) (static_cast<void>(0)) - -#define DOCTEST_WARN_THROWS(...) (static_cast<void>(0)) -#define DOCTEST_CHECK_THROWS(...) (static_cast<void>(0)) -#define DOCTEST_REQUIRE_THROWS(...) (static_cast<void>(0)) -#define DOCTEST_WARN_THROWS_AS(expr, ...) (static_cast<void>(0)) -#define DOCTEST_CHECK_THROWS_AS(expr, ...) (static_cast<void>(0)) -#define DOCTEST_REQUIRE_THROWS_AS(expr, ...) (static_cast<void>(0)) -#define DOCTEST_WARN_THROWS_WITH(expr, ...) (static_cast<void>(0)) -#define DOCTEST_CHECK_THROWS_WITH(expr, ...) (static_cast<void>(0)) -#define DOCTEST_REQUIRE_THROWS_WITH(expr, ...) (static_cast<void>(0)) -#define DOCTEST_WARN_THROWS_WITH_AS(expr, with, ...) (static_cast<void>(0)) -#define DOCTEST_CHECK_THROWS_WITH_AS(expr, with, ...) (static_cast<void>(0)) -#define DOCTEST_REQUIRE_THROWS_WITH_AS(expr, with, ...) (static_cast<void>(0)) -#define DOCTEST_WARN_NOTHROW(...) (static_cast<void>(0)) -#define DOCTEST_CHECK_NOTHROW(...) (static_cast<void>(0)) -#define DOCTEST_REQUIRE_NOTHROW(...) (static_cast<void>(0)) - -#define DOCTEST_WARN_THROWS_MESSAGE(expr, ...) (static_cast<void>(0)) -#define DOCTEST_CHECK_THROWS_MESSAGE(expr, ...) (static_cast<void>(0)) -#define DOCTEST_REQUIRE_THROWS_MESSAGE(expr, ...) (static_cast<void>(0)) -#define DOCTEST_WARN_THROWS_AS_MESSAGE(expr, ex, ...) (static_cast<void>(0)) -#define DOCTEST_CHECK_THROWS_AS_MESSAGE(expr, ex, ...) (static_cast<void>(0)) -#define DOCTEST_REQUIRE_THROWS_AS_MESSAGE(expr, ex, ...) (static_cast<void>(0)) -#define DOCTEST_WARN_THROWS_WITH_MESSAGE(expr, with, ...) (static_cast<void>(0)) -#define DOCTEST_CHECK_THROWS_WITH_MESSAGE(expr, with, ...) (static_cast<void>(0)) -#define DOCTEST_REQUIRE_THROWS_WITH_MESSAGE(expr, with, ...) (static_cast<void>(0)) -#define DOCTEST_WARN_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) (static_cast<void>(0)) -#define DOCTEST_CHECK_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) (static_cast<void>(0)) -#define DOCTEST_REQUIRE_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) (static_cast<void>(0)) -#define DOCTEST_WARN_NOTHROW_MESSAGE(expr, ...) (static_cast<void>(0)) -#define DOCTEST_CHECK_NOTHROW_MESSAGE(expr, ...) (static_cast<void>(0)) -#define DOCTEST_REQUIRE_NOTHROW_MESSAGE(expr, ...) (static_cast<void>(0)) - -#define DOCTEST_WARN_EQ(...) (static_cast<void>(0)) -#define DOCTEST_CHECK_EQ(...) (static_cast<void>(0)) -#define DOCTEST_REQUIRE_EQ(...) (static_cast<void>(0)) -#define DOCTEST_WARN_NE(...) (static_cast<void>(0)) -#define DOCTEST_CHECK_NE(...) (static_cast<void>(0)) -#define DOCTEST_REQUIRE_NE(...) (static_cast<void>(0)) -#define DOCTEST_WARN_GT(...) (static_cast<void>(0)) -#define DOCTEST_CHECK_GT(...) (static_cast<void>(0)) -#define DOCTEST_REQUIRE_GT(...) (static_cast<void>(0)) -#define DOCTEST_WARN_LT(...) (static_cast<void>(0)) -#define DOCTEST_CHECK_LT(...) (static_cast<void>(0)) -#define DOCTEST_REQUIRE_LT(...) (static_cast<void>(0)) -#define DOCTEST_WARN_GE(...) (static_cast<void>(0)) -#define DOCTEST_CHECK_GE(...) (static_cast<void>(0)) -#define DOCTEST_REQUIRE_GE(...) (static_cast<void>(0)) -#define DOCTEST_WARN_LE(...) (static_cast<void>(0)) -#define DOCTEST_CHECK_LE(...) (static_cast<void>(0)) -#define DOCTEST_REQUIRE_LE(...) (static_cast<void>(0)) - -#define DOCTEST_WARN_UNARY(...) (static_cast<void>(0)) -#define DOCTEST_CHECK_UNARY(...) (static_cast<void>(0)) -#define DOCTEST_REQUIRE_UNARY(...) (static_cast<void>(0)) -#define DOCTEST_WARN_UNARY_FALSE(...) (static_cast<void>(0)) -#define DOCTEST_CHECK_UNARY_FALSE(...) (static_cast<void>(0)) -#define DOCTEST_REQUIRE_UNARY_FALSE(...) (static_cast<void>(0)) +#ifdef DOCTEST_CONFIG_EVALUATE_ASSERTS_EVEN_WHEN_DISABLED + +#define DOCTEST_WARN(...) [&] { return __VA_ARGS__; }() +#define DOCTEST_CHECK(...) [&] { return __VA_ARGS__; }() +#define DOCTEST_REQUIRE(...) [&] { return __VA_ARGS__; }() +#define DOCTEST_WARN_FALSE(...) [&] { return !(__VA_ARGS__); }() +#define DOCTEST_CHECK_FALSE(...) [&] { return !(__VA_ARGS__); }() +#define DOCTEST_REQUIRE_FALSE(...) [&] { return !(__VA_ARGS__); }() + +#define DOCTEST_WARN_MESSAGE(cond, ...) [&] { return cond; }() +#define DOCTEST_CHECK_MESSAGE(cond, ...) [&] { return cond; }() +#define DOCTEST_REQUIRE_MESSAGE(cond, ...) [&] { return cond; }() +#define DOCTEST_WARN_FALSE_MESSAGE(cond, ...) [&] { return !(cond); }() +#define DOCTEST_CHECK_FALSE_MESSAGE(cond, ...) [&] { return !(cond); }() +#define DOCTEST_REQUIRE_FALSE_MESSAGE(cond, ...) [&] { return !(cond); }() + +namespace doctest { +namespace detail { +#define DOCTEST_RELATIONAL_OP(name, op) \ + template <typename L, typename R> \ + bool name(const DOCTEST_REF_WRAP(L) lhs, const DOCTEST_REF_WRAP(R) rhs) { return lhs op rhs; } + + DOCTEST_RELATIONAL_OP(eq, ==) + DOCTEST_RELATIONAL_OP(ne, !=) + DOCTEST_RELATIONAL_OP(lt, <) + DOCTEST_RELATIONAL_OP(gt, >) + DOCTEST_RELATIONAL_OP(le, <=) + DOCTEST_RELATIONAL_OP(ge, >=) +} // namespace detail +} // namespace doctest + +#define DOCTEST_WARN_EQ(...) [&] { return doctest::detail::eq(__VA_ARGS__); }() +#define DOCTEST_CHECK_EQ(...) [&] { return doctest::detail::eq(__VA_ARGS__); }() +#define DOCTEST_REQUIRE_EQ(...) [&] { return doctest::detail::eq(__VA_ARGS__); }() +#define DOCTEST_WARN_NE(...) [&] { return doctest::detail::ne(__VA_ARGS__); }() +#define DOCTEST_CHECK_NE(...) [&] { return doctest::detail::ne(__VA_ARGS__); }() +#define DOCTEST_REQUIRE_NE(...) [&] { return doctest::detail::ne(__VA_ARGS__); }() +#define DOCTEST_WARN_LT(...) [&] { return doctest::detail::lt(__VA_ARGS__); }() +#define DOCTEST_CHECK_LT(...) [&] { return doctest::detail::lt(__VA_ARGS__); }() +#define DOCTEST_REQUIRE_LT(...) [&] { return doctest::detail::lt(__VA_ARGS__); }() +#define DOCTEST_WARN_GT(...) [&] { return doctest::detail::gt(__VA_ARGS__); }() +#define DOCTEST_CHECK_GT(...) [&] { return doctest::detail::gt(__VA_ARGS__); }() +#define DOCTEST_REQUIRE_GT(...) [&] { return doctest::detail::gt(__VA_ARGS__); }() +#define DOCTEST_WARN_LE(...) [&] { return doctest::detail::le(__VA_ARGS__); }() +#define DOCTEST_CHECK_LE(...) [&] { return doctest::detail::le(__VA_ARGS__); }() +#define DOCTEST_REQUIRE_LE(...) [&] { return doctest::detail::le(__VA_ARGS__); }() +#define DOCTEST_WARN_GE(...) [&] { return doctest::detail::ge(__VA_ARGS__); }() +#define DOCTEST_CHECK_GE(...) [&] { return doctest::detail::ge(__VA_ARGS__); }() +#define DOCTEST_REQUIRE_GE(...) [&] { return doctest::detail::ge(__VA_ARGS__); }() +#define DOCTEST_WARN_UNARY(...) [&] { return __VA_ARGS__; }() +#define DOCTEST_CHECK_UNARY(...) [&] { return __VA_ARGS__; }() +#define DOCTEST_REQUIRE_UNARY(...) [&] { return __VA_ARGS__; }() +#define DOCTEST_WARN_UNARY_FALSE(...) [&] { return !(__VA_ARGS__); }() +#define DOCTEST_CHECK_UNARY_FALSE(...) [&] { return !(__VA_ARGS__); }() +#define DOCTEST_REQUIRE_UNARY_FALSE(...) [&] { return !(__VA_ARGS__); }() + +#else // DOCTEST_CONFIG_EVALUATE_ASSERTS_EVEN_WHEN_DISABLED + +#define DOCTEST_WARN(...) ([] { return false; }) +#define DOCTEST_CHECK(...) ([] { return false; }) +#define DOCTEST_REQUIRE(...) ([] { return false; }) +#define DOCTEST_WARN_FALSE(...) ([] { return false; }) +#define DOCTEST_CHECK_FALSE(...) ([] { return false; }) +#define DOCTEST_REQUIRE_FALSE(...) ([] { return false; }) + +#define DOCTEST_WARN_MESSAGE(cond, ...) ([] { return false; }) +#define DOCTEST_CHECK_MESSAGE(cond, ...) ([] { return false; }) +#define DOCTEST_REQUIRE_MESSAGE(cond, ...) ([] { return false; }) +#define DOCTEST_WARN_FALSE_MESSAGE(cond, ...) ([] { return false; }) +#define DOCTEST_CHECK_FALSE_MESSAGE(cond, ...) ([] { return false; }) +#define DOCTEST_REQUIRE_FALSE_MESSAGE(cond, ...) ([] { return false; }) + +#define DOCTEST_WARN_EQ(...) ([] { return false; }) +#define DOCTEST_CHECK_EQ(...) ([] { return false; }) +#define DOCTEST_REQUIRE_EQ(...) ([] { return false; }) +#define DOCTEST_WARN_NE(...) ([] { return false; }) +#define DOCTEST_CHECK_NE(...) ([] { return false; }) +#define DOCTEST_REQUIRE_NE(...) ([] { return false; }) +#define DOCTEST_WARN_GT(...) ([] { return false; }) +#define DOCTEST_CHECK_GT(...) ([] { return false; }) +#define DOCTEST_REQUIRE_GT(...) ([] { return false; }) +#define DOCTEST_WARN_LT(...) ([] { return false; }) +#define DOCTEST_CHECK_LT(...) ([] { return false; }) +#define DOCTEST_REQUIRE_LT(...) ([] { return false; }) +#define DOCTEST_WARN_GE(...) ([] { return false; }) +#define DOCTEST_CHECK_GE(...) ([] { return false; }) +#define DOCTEST_REQUIRE_GE(...) ([] { return false; }) +#define DOCTEST_WARN_LE(...) ([] { return false; }) +#define DOCTEST_CHECK_LE(...) ([] { return false; }) +#define DOCTEST_REQUIRE_LE(...) ([] { return false; }) + +#define DOCTEST_WARN_UNARY(...) ([] { return false; }) +#define DOCTEST_CHECK_UNARY(...) ([] { return false; }) +#define DOCTEST_REQUIRE_UNARY(...) ([] { return false; }) +#define DOCTEST_WARN_UNARY_FALSE(...) ([] { return false; }) +#define DOCTEST_CHECK_UNARY_FALSE(...) ([] { return false; }) +#define DOCTEST_REQUIRE_UNARY_FALSE(...) ([] { return false; }) + +#endif // DOCTEST_CONFIG_EVALUATE_ASSERTS_EVEN_WHEN_DISABLED + +// TODO: think about if these also need to work properly even when doctest is disabled +#define DOCTEST_WARN_THROWS(...) ([] { return false; }) +#define DOCTEST_CHECK_THROWS(...) ([] { return false; }) +#define DOCTEST_REQUIRE_THROWS(...) ([] { return false; }) +#define DOCTEST_WARN_THROWS_AS(expr, ...) ([] { return false; }) +#define DOCTEST_CHECK_THROWS_AS(expr, ...) ([] { return false; }) +#define DOCTEST_REQUIRE_THROWS_AS(expr, ...) ([] { return false; }) +#define DOCTEST_WARN_THROWS_WITH(expr, ...) ([] { return false; }) +#define DOCTEST_CHECK_THROWS_WITH(expr, ...) ([] { return false; }) +#define DOCTEST_REQUIRE_THROWS_WITH(expr, ...) ([] { return false; }) +#define DOCTEST_WARN_THROWS_WITH_AS(expr, with, ...) ([] { return false; }) +#define DOCTEST_CHECK_THROWS_WITH_AS(expr, with, ...) ([] { return false; }) +#define DOCTEST_REQUIRE_THROWS_WITH_AS(expr, with, ...) ([] { return false; }) +#define DOCTEST_WARN_NOTHROW(...) ([] { return false; }) +#define DOCTEST_CHECK_NOTHROW(...) ([] { return false; }) +#define DOCTEST_REQUIRE_NOTHROW(...) ([] { return false; }) + +#define DOCTEST_WARN_THROWS_MESSAGE(expr, ...) ([] { return false; }) +#define DOCTEST_CHECK_THROWS_MESSAGE(expr, ...) ([] { return false; }) +#define DOCTEST_REQUIRE_THROWS_MESSAGE(expr, ...) ([] { return false; }) +#define DOCTEST_WARN_THROWS_AS_MESSAGE(expr, ex, ...) ([] { return false; }) +#define DOCTEST_CHECK_THROWS_AS_MESSAGE(expr, ex, ...) ([] { return false; }) +#define DOCTEST_REQUIRE_THROWS_AS_MESSAGE(expr, ex, ...) ([] { return false; }) +#define DOCTEST_WARN_THROWS_WITH_MESSAGE(expr, with, ...) ([] { return false; }) +#define DOCTEST_CHECK_THROWS_WITH_MESSAGE(expr, with, ...) ([] { return false; }) +#define DOCTEST_REQUIRE_THROWS_WITH_MESSAGE(expr, with, ...) ([] { return false; }) +#define DOCTEST_WARN_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) ([] { return false; }) +#define DOCTEST_CHECK_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) ([] { return false; }) +#define DOCTEST_REQUIRE_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) ([] { return false; }) +#define DOCTEST_WARN_NOTHROW_MESSAGE(expr, ...) ([] { return false; }) +#define DOCTEST_CHECK_NOTHROW_MESSAGE(expr, ...) ([] { return false; }) +#define DOCTEST_REQUIRE_NOTHROW_MESSAGE(expr, ...) ([] { return false; }) #endif // DOCTEST_CONFIG_DISABLE @@ -2706,6 +2896,8 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP DOCTEST_MSVC_SUPPRESS_WARNING_POP DOCTEST_GCC_SUPPRESS_WARNING_POP +DOCTEST_SUPPRESS_COMMON_WARNINGS_POP + #endif // DOCTEST_LIBRARY_INCLUDED #ifndef DOCTEST_SINGLE_HEADER @@ -2725,13 +2917,11 @@ DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wunused-macros") DOCTEST_CLANG_SUPPRESS_WARNING_POP +DOCTEST_SUPPRESS_COMMON_WARNINGS_PUSH + DOCTEST_CLANG_SUPPRESS_WARNING_PUSH -DOCTEST_CLANG_SUPPRESS_WARNING("-Wunknown-pragmas") -DOCTEST_CLANG_SUPPRESS_WARNING("-Wpadded") -DOCTEST_CLANG_SUPPRESS_WARNING("-Wweak-vtables") DOCTEST_CLANG_SUPPRESS_WARNING("-Wglobal-constructors") DOCTEST_CLANG_SUPPRESS_WARNING("-Wexit-time-destructors") -DOCTEST_CLANG_SUPPRESS_WARNING("-Wmissing-prototypes") DOCTEST_CLANG_SUPPRESS_WARNING("-Wsign-conversion") DOCTEST_CLANG_SUPPRESS_WARNING("-Wshorten-64-to-32") DOCTEST_CLANG_SUPPRESS_WARNING("-Wmissing-variable-declarations") @@ -2739,65 +2929,35 @@ DOCTEST_CLANG_SUPPRESS_WARNING("-Wswitch") DOCTEST_CLANG_SUPPRESS_WARNING("-Wswitch-enum") DOCTEST_CLANG_SUPPRESS_WARNING("-Wcovered-switch-default") DOCTEST_CLANG_SUPPRESS_WARNING("-Wmissing-noreturn") -DOCTEST_CLANG_SUPPRESS_WARNING("-Wunused-local-typedef") DOCTEST_CLANG_SUPPRESS_WARNING("-Wdisabled-macro-expansion") DOCTEST_CLANG_SUPPRESS_WARNING("-Wmissing-braces") DOCTEST_CLANG_SUPPRESS_WARNING("-Wmissing-field-initializers") -DOCTEST_CLANG_SUPPRESS_WARNING("-Wc++98-compat") -DOCTEST_CLANG_SUPPRESS_WARNING("-Wc++98-compat-pedantic") DOCTEST_CLANG_SUPPRESS_WARNING("-Wunused-member-function") DOCTEST_CLANG_SUPPRESS_WARNING("-Wnonportable-system-include-path") DOCTEST_GCC_SUPPRESS_WARNING_PUSH -DOCTEST_GCC_SUPPRESS_WARNING("-Wunknown-pragmas") -DOCTEST_GCC_SUPPRESS_WARNING("-Wpragmas") DOCTEST_GCC_SUPPRESS_WARNING("-Wconversion") -DOCTEST_GCC_SUPPRESS_WARNING("-Weffc++") DOCTEST_GCC_SUPPRESS_WARNING("-Wsign-conversion") -DOCTEST_GCC_SUPPRESS_WARNING("-Wstrict-overflow") -DOCTEST_GCC_SUPPRESS_WARNING("-Wstrict-aliasing") DOCTEST_GCC_SUPPRESS_WARNING("-Wmissing-field-initializers") DOCTEST_GCC_SUPPRESS_WARNING("-Wmissing-braces") -DOCTEST_GCC_SUPPRESS_WARNING("-Wmissing-declarations") DOCTEST_GCC_SUPPRESS_WARNING("-Wswitch") DOCTEST_GCC_SUPPRESS_WARNING("-Wswitch-enum") DOCTEST_GCC_SUPPRESS_WARNING("-Wswitch-default") DOCTEST_GCC_SUPPRESS_WARNING("-Wunsafe-loop-optimizations") DOCTEST_GCC_SUPPRESS_WARNING("-Wold-style-cast") -DOCTEST_GCC_SUPPRESS_WARNING("-Wunused-local-typedefs") -DOCTEST_GCC_SUPPRESS_WARNING("-Wuseless-cast") DOCTEST_GCC_SUPPRESS_WARNING("-Wunused-function") DOCTEST_GCC_SUPPRESS_WARNING("-Wmultiple-inheritance") -DOCTEST_GCC_SUPPRESS_WARNING("-Wnoexcept") DOCTEST_GCC_SUPPRESS_WARNING("-Wsuggest-attribute") DOCTEST_MSVC_SUPPRESS_WARNING_PUSH -DOCTEST_MSVC_SUPPRESS_WARNING(4616) // invalid compiler warning -DOCTEST_MSVC_SUPPRESS_WARNING(4619) // invalid compiler warning -DOCTEST_MSVC_SUPPRESS_WARNING(4996) // The compiler encountered a deprecated declaration DOCTEST_MSVC_SUPPRESS_WARNING(4267) // 'var' : conversion from 'x' to 'y', possible loss of data -DOCTEST_MSVC_SUPPRESS_WARNING(4706) // assignment within conditional expression -DOCTEST_MSVC_SUPPRESS_WARNING(4512) // 'class' : assignment operator could not be generated -DOCTEST_MSVC_SUPPRESS_WARNING(4127) // conditional expression is constant DOCTEST_MSVC_SUPPRESS_WARNING(4530) // C++ exception handler used, but unwind semantics not enabled DOCTEST_MSVC_SUPPRESS_WARNING(4577) // 'noexcept' used with no exception handling mode specified DOCTEST_MSVC_SUPPRESS_WARNING(4774) // format string expected in argument is not a string literal DOCTEST_MSVC_SUPPRESS_WARNING(4365) // conversion from 'int' to 'unsigned', signed/unsigned mismatch -DOCTEST_MSVC_SUPPRESS_WARNING(4820) // padding in structs -DOCTEST_MSVC_SUPPRESS_WARNING(4640) // construction of local static object is not thread-safe DOCTEST_MSVC_SUPPRESS_WARNING(5039) // pointer to potentially throwing function passed to extern C -DOCTEST_MSVC_SUPPRESS_WARNING(5045) // Spectre mitigation stuff -DOCTEST_MSVC_SUPPRESS_WARNING(4626) // assignment operator was implicitly defined as deleted -DOCTEST_MSVC_SUPPRESS_WARNING(5027) // move assignment operator was implicitly defined as deleted -DOCTEST_MSVC_SUPPRESS_WARNING(5026) // move constructor was implicitly defined as deleted -DOCTEST_MSVC_SUPPRESS_WARNING(4625) // copy constructor was implicitly defined as deleted DOCTEST_MSVC_SUPPRESS_WARNING(4800) // forcing value to bool 'true' or 'false' (performance warning) -// static analysis -DOCTEST_MSVC_SUPPRESS_WARNING(26439) // This kind of function may not throw. Declare it 'noexcept' -DOCTEST_MSVC_SUPPRESS_WARNING(26495) // Always initialize a member variable -DOCTEST_MSVC_SUPPRESS_WARNING(26451) // Arithmetic overflow ... -DOCTEST_MSVC_SUPPRESS_WARNING(26444) // Avoid unnamed objects with custom construction and dtor... -DOCTEST_MSVC_SUPPRESS_WARNING(26812) // Prefer 'enum class' over 'enum' +DOCTEST_MSVC_SUPPRESS_WARNING(5245) // unreferenced function with internal linkage has been removed DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_BEGIN @@ -2805,7 +2965,7 @@ DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_BEGIN #include <ctime> #include <cmath> #include <climits> -// borland (Embarcadero) compiler requires math.h and not cmath - https://github.com/onqtam/doctest/pull/37 +// borland (Embarcadero) compiler requires math.h and not cmath - https://github.com/doctest/doctest/pull/37 #ifdef __BORLANDC__ #include <math.h> #endif // __BORLANDC__ @@ -2863,7 +3023,7 @@ DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_BEGIN #endif // DOCTEST_PLATFORM_WINDOWS -// this is a fix for https://github.com/onqtam/doctest/issues/348 +// this is a fix for https://github.com/doctest/doctest/issues/348 // https://mail.gnome.org/archives/xml/2012-January/msg00000.html #if !defined(HAVE_UNISTD_H) && !defined(STDOUT_FILENO) #define STDOUT_FILENO fileno(stdout) @@ -2885,8 +3045,12 @@ DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_END #endif #ifndef DOCTEST_THREAD_LOCAL +#if DOCTEST_MSVC && (DOCTEST_MSVC < DOCTEST_COMPILER(19, 0, 0)) +#define DOCTEST_THREAD_LOCAL +#else // DOCTEST_MSVC #define DOCTEST_THREAD_LOCAL thread_local -#endif +#endif // DOCTEST_MSVC +#endif // DOCTEST_THREAD_LOCAL #ifndef DOCTEST_MULTI_LANE_ATOMICS_THREAD_LANES #define DOCTEST_MULTI_LANE_ATOMICS_THREAD_LANES 32 @@ -2906,12 +3070,34 @@ DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_END #define DOCTEST_CONFIG_NO_MULTI_LANE_ATOMICS #endif +#ifndef DOCTEST_CDECL +#define DOCTEST_CDECL __cdecl +#endif + namespace doctest { bool is_running_in_test = false; namespace { using namespace detail; + + template <typename Ex> + DOCTEST_NORETURN void throw_exception(Ex const& e) { +#ifndef DOCTEST_CONFIG_NO_EXCEPTIONS + throw e; +#else // DOCTEST_CONFIG_NO_EXCEPTIONS + std::cerr << "doctest will terminate because it needed to throw an exception.\n" + << "The message was: " << e.what() << '\n'; + std::terminate(); +#endif // DOCTEST_CONFIG_NO_EXCEPTIONS + } + +#ifndef DOCTEST_INTERNAL_ERROR +#define DOCTEST_INTERNAL_ERROR(msg) \ + throw_exception(std::logic_error( \ + __FILE__ ":" DOCTEST_TOSTR(__LINE__) ": Internal doctest error: " msg)) +#endif // DOCTEST_INTERNAL_ERROR + // case insensitive strcmp int stricmp(const char* a, const char* b) { for(;; a++, b++) { @@ -2955,8 +3141,6 @@ namespace { } // namespace namespace detail { - void my_memcpy(void* dest, const void* src, unsigned num) { memcpy(dest, src, num); } - String rawMemoryToString(const void* object, unsigned size) { // Reverse order for little endian architectures int i = 0, end = static_cast<int>(size), inc = 1; @@ -2966,25 +3150,42 @@ namespace detail { } unsigned const char* bytes = static_cast<unsigned const char*>(object); - std::ostringstream oss; - oss << "0x" << std::setfill('0') << std::hex; + std::ostream* oss = tlssPush(); + *oss << "0x" << std::setfill('0') << std::hex; for(; i != end; i += inc) - oss << std::setw(2) << static_cast<unsigned>(bytes[i]); - return oss.str().c_str(); + *oss << std::setw(2) << static_cast<unsigned>(bytes[i]); + return tlssPop(); } - DOCTEST_THREAD_LOCAL std::ostringstream g_oss; // NOLINT(cert-err58-cpp) + DOCTEST_THREAD_LOCAL class + { + std::vector<std::streampos> stack; + std::stringstream ss; + + public: + std::ostream* push() { + stack.push_back(ss.tellp()); + return &ss; + } + + String pop() { + if (stack.empty()) + DOCTEST_INTERNAL_ERROR("TLSS was empty when trying to pop!"); - std::ostream* getTlsOss() { - g_oss.clear(); // there shouldn't be anything worth clearing in the flags - g_oss.str(""); // the slow way of resetting a string stream - //g_oss.seekp(0); // optimal reset - as seen here: https://stackoverflow.com/a/624291/3162383 - return &g_oss; + std::streampos pos = stack.back(); + stack.pop_back(); + unsigned sz = static_cast<unsigned>(ss.tellp() - pos); + ss.rdbuf()->pubseekpos(pos, std::ios::in | std::ios::out); + return String(ss, sz); + } + } g_oss; + + std::ostream* tlssPush() { + return g_oss.push(); } - String getTlsOssResult() { - //g_oss << std::ends; // needed - as shown here: https://stackoverflow.com/a/624291/3162383 - return g_oss.str().c_str(); + String tlssPop() { + return g_oss.pop(); } #ifndef DOCTEST_CONFIG_DISABLE @@ -2995,8 +3196,7 @@ namespace timer_large_integer #if defined(DOCTEST_PLATFORM_WINDOWS) typedef ULONGLONG type; #else // DOCTEST_PLATFORM_WINDOWS - using namespace std; - typedef uint64_t type; + typedef std::uint64_t type; #endif // DOCTEST_PLATFORM_WINDOWS } @@ -3088,7 +3288,7 @@ typedef timer_large_integer::type ticks_t; return result; } - T operator=(T desired) DOCTEST_NOEXCEPT { + T operator=(T desired) DOCTEST_NOEXCEPT { // lgtm [cpp/assignment-does-not-return-this] store(desired); return desired; } @@ -3103,7 +3303,7 @@ typedef timer_large_integer::type ticks_t; private: // Each thread has a different atomic that it operates on. If more than NumLanes threads - // use this, some will use the same atomic. So performance will degrate a bit, but still + // use this, some will use the same atomic. So performance will degrade a bit, but still // everything will work. // // The logic here is a bit tricky. The call should be as fast as possible, so that there @@ -3198,7 +3398,8 @@ typedef timer_large_integer::type ticks_t; (TestCaseFailureReason::FailedExactlyNumTimes & failure_flags); // if any subcase has failed - the whole test case has failed - if(failure_flags && !ok_to_fail) + testCaseSuccess = !(failure_flags && !ok_to_fail); + if(!testCaseSuccess) numTestCasesFailed++; } }; @@ -3213,19 +3414,29 @@ typedef timer_large_integer::type ticks_t; #endif // DOCTEST_CONFIG_DISABLE } // namespace detail +char* String::allocate(unsigned sz) { + if (sz <= last) { + buf[sz] = '\0'; + setLast(last - sz); + return buf; + } else { + setOnHeap(); + data.size = sz; + data.capacity = data.size + 1; + data.ptr = new char[data.capacity]; + data.ptr[sz] = '\0'; + return data.ptr; + } +} + void String::setOnHeap() { *reinterpret_cast<unsigned char*>(&buf[last]) = 128; } void String::setLast(unsigned in) { buf[last] = char(in); } void String::copy(const String& other) { - using namespace std; if(other.isOnStack()) { memcpy(buf, other.buf, len); } else { - setOnHeap(); - data.size = other.data.size; - data.capacity = data.size + 1; - data.ptr = new char[data.capacity]; - memcpy(data.ptr, other.data.ptr, data.size + 1); + memcpy(allocate(other.data.size), other.data.ptr, other.data.size); } } @@ -3244,19 +3455,11 @@ String::String(const char* in) : String(in, strlen(in)) {} String::String(const char* in, unsigned in_size) { - using namespace std; - if(in_size <= last) { - memcpy(buf, in, in_size); - buf[in_size] = '\0'; - setLast(last - in_size); - } else { - setOnHeap(); - data.size = in_size; - data.capacity = data.size + 1; - data.ptr = new char[data.capacity]; - memcpy(data.ptr, in, in_size); - data.ptr[in_size] = '\0'; - } + memcpy(allocate(in_size), in, in_size); +} + +String::String(std::istream& in, unsigned in_size) { + in.read(allocate(in_size), in_size); } String::String(const String& other) { copy(other); } @@ -3276,7 +3479,6 @@ String& String::operator+=(const String& other) { const unsigned my_old_size = size(); const unsigned other_size = other.size(); const unsigned total_size = my_old_size + other_size; - using namespace std; if(isOnStack()) { if(total_size < len) { // append to the current stack space @@ -3323,18 +3525,13 @@ String& String::operator+=(const String& other) { return *this; } -// NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks) -String String::operator+(const String& other) const { return String(*this) += other; } - String::String(String&& other) { - using namespace std; memcpy(buf, other.buf, len); other.buf[0] = '\0'; other.setLast(); } String& String::operator=(String&& other) { - using namespace std; if(this != &other) { if(!isOnStack()) delete[] data.ptr; @@ -3379,6 +3576,9 @@ int String::compare(const String& other, bool no_case) const { return compare(other.c_str(), no_case); } +// NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks) +String operator+(const String& lhs, const String& rhs) { return String(lhs) += rhs; } + // clang-format off bool operator==(const String& lhs, const String& rhs) { return lhs.compare(rhs) == 0; } bool operator!=(const String& lhs, const String& rhs) { return lhs.compare(rhs) != 0; } @@ -3537,7 +3737,7 @@ DOCTEST_TO_STRING_OVERLOAD(int long long unsigned, "%llu") String toString(std::nullptr_t) { return "NULL"; } #if DOCTEST_MSVC >= DOCTEST_COMPILER(19, 20, 0) -// see this issue on why this is needed: https://github.com/onqtam/doctest/issues/183 +// see this issue on why this is needed: https://github.com/doctest/doctest/issues/183 String toString(const std::string& in) { return in.c_str(); } #endif // VS 2019 @@ -3581,7 +3781,7 @@ bool operator>(const Approx& lhs, double rhs) { return lhs.m_value > rhs && lhs String toString(const Approx& in) { // NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks) - return String("Approx( ") + doctest::toString(in.m_value) + " )"; + return "Approx( " + doctest::toString(in.m_value) + " )"; } const ContextOptions* getContextOptions() { return DOCTEST_BRANCH_ON_DISABLED(nullptr, g_cs); } @@ -3594,11 +3794,13 @@ Context::~Context() = default; void Context::applyCommandLine(int, const char* const*) {} void Context::addFilter(const char*, const char*) {} void Context::clearFilters() {} +void Context::setOption(const char*, bool) {} void Context::setOption(const char*, int) {} void Context::setOption(const char*, const char*) {} bool Context::shouldExit() { return false; } void Context::setAsDefaultForAssertsOutOfTestCases() {} void Context::setAssertHandler(detail::assert_handler) {} +void Context::setCout(std::ostream* out) {} int Context::run() { return 0; } IReporter::~IReporter() = default; @@ -3769,8 +3971,8 @@ namespace detail { DOCTEST_ITERATE_THROUGH_REPORTERS(subcase_start, m_signature); } - DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4996) // std::uncaught_exception is deprecated in C++17 - DOCTEST_GCC_SUPPRESS_WARNING_WITH_PUSH("-Wdeprecated-declarations") + DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4996) // std::uncaught_exception is deprecated in C++17 + DOCTEST_GCC_SUPPRESS_WARNING_WITH_PUSH("-Wdeprecated-declarations") DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wdeprecated-declarations") Subcase::~Subcase() { @@ -3797,8 +3999,8 @@ namespace detail { } } - DOCTEST_CLANG_SUPPRESS_WARNING_POP - DOCTEST_GCC_SUPPRESS_WARNING_POP + DOCTEST_CLANG_SUPPRESS_WARNING_POP + DOCTEST_GCC_SUPPRESS_WARNING_POP DOCTEST_MSVC_SUPPRESS_WARNING_POP Subcase::operator bool() const { return m_entered; } @@ -3812,15 +4014,6 @@ namespace detail { TestSuite& TestSuite::operator*(const char* in) { m_test_suite = in; - // clear state - m_description = nullptr; - m_skip = false; - m_no_breaks = false; - m_no_output = false; - m_may_fail = false; - m_should_fail = false; - m_expected_failures = 0; - m_timeout = 0; return *this; } @@ -3925,29 +4118,6 @@ namespace { return suiteOrderComparator(lhs, rhs); } -#ifdef DOCTEST_CONFIG_COLORS_WINDOWS - HANDLE g_stdoutHandle; - WORD g_origFgAttrs; - WORD g_origBgAttrs; - bool g_attrsInitted = false; - - int colors_init() { - if(!g_attrsInitted) { - g_stdoutHandle = GetStdHandle(STD_OUTPUT_HANDLE); - g_attrsInitted = true; - CONSOLE_SCREEN_BUFFER_INFO csbiInfo; - GetConsoleScreenBufferInfo(g_stdoutHandle, &csbiInfo); - g_origFgAttrs = csbiInfo.wAttributes & ~(BACKGROUND_GREEN | BACKGROUND_RED | - BACKGROUND_BLUE | BACKGROUND_INTENSITY); - g_origBgAttrs = csbiInfo.wAttributes & ~(FOREGROUND_GREEN | FOREGROUND_RED | - FOREGROUND_BLUE | FOREGROUND_INTENSITY); - } - return 0; - } - - int dumy_init_console_colors = colors_init(); -#endif // DOCTEST_CONFIG_COLORS_WINDOWS - DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wdeprecated-declarations") void color_to_stream(std::ostream& s, Color::Enum code) { static_cast<void>(s); // for DOCTEST_CONFIG_COLORS_NONE or DOCTEST_CONFIG_COLORS_WINDOWS @@ -3981,10 +4151,26 @@ namespace { #ifdef DOCTEST_CONFIG_COLORS_WINDOWS if(g_no_colors || - (isatty(fileno(stdout)) == false && getContextOptions()->force_colors == false)) + (_isatty(_fileno(stdout)) == false && getContextOptions()->force_colors == false)) return; -#define DOCTEST_SET_ATTR(x) SetConsoleTextAttribute(g_stdoutHandle, x | g_origBgAttrs) + static struct ConsoleHelper { + HANDLE stdoutHandle; + WORD origFgAttrs; + WORD origBgAttrs; + + ConsoleHelper() { + stdoutHandle = GetStdHandle(STD_OUTPUT_HANDLE); + CONSOLE_SCREEN_BUFFER_INFO csbiInfo; + GetConsoleScreenBufferInfo(stdoutHandle, &csbiInfo); + origFgAttrs = csbiInfo.wAttributes & ~(BACKGROUND_GREEN | BACKGROUND_RED | + BACKGROUND_BLUE | BACKGROUND_INTENSITY); + origBgAttrs = csbiInfo.wAttributes & ~(FOREGROUND_GREEN | FOREGROUND_RED | + FOREGROUND_BLUE | FOREGROUND_INTENSITY); + } + } ch; + +#define DOCTEST_SET_ATTR(x) SetConsoleTextAttribute(ch.stdoutHandle, x | ch.origBgAttrs) // clang-format off switch (code) { @@ -4001,7 +4187,7 @@ namespace { case Color::BrightWhite: DOCTEST_SET_ATTR(FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE); break; case Color::None: case Color::Bright: // invalid - default: DOCTEST_SET_ATTR(g_origFgAttrs); + default: DOCTEST_SET_ATTR(ch.origFgAttrs); } // clang-format on #endif // DOCTEST_CONFIG_COLORS_WINDOWS @@ -4145,8 +4331,16 @@ namespace detail { g_infoContexts.push_back(this); } - DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4996) // std::uncaught_exception is deprecated in C++17 - DOCTEST_GCC_SUPPRESS_WARNING_WITH_PUSH("-Wdeprecated-declarations") + ContextScopeBase::ContextScopeBase(ContextScopeBase&& other) { + if (other.need_to_destroy) { + other.destroy(); + } + other.need_to_destroy = false; + g_infoContexts.push_back(this); + } + + DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4996) // std::uncaught_exception is deprecated in C++17 + DOCTEST_GCC_SUPPRESS_WARNING_WITH_PUSH("-Wdeprecated-declarations") DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wdeprecated-declarations") // destroy cannot be inlined into the destructor because that would mean calling stringify after @@ -4165,8 +4359,8 @@ namespace detail { g_infoContexts.pop_back(); } - DOCTEST_CLANG_SUPPRESS_WARNING_POP - DOCTEST_GCC_SUPPRESS_WARNING_POP + DOCTEST_CLANG_SUPPRESS_WARNING_POP + DOCTEST_GCC_SUPPRESS_WARNING_POP DOCTEST_MSVC_SUPPRESS_WARNING_POP } // namespace detail namespace { @@ -4313,7 +4507,7 @@ namespace { static unsigned int prev_abort_behavior; static int prev_report_mode; static _HFILE prev_report_file; - static void (*prev_sigabrt_handler)(int); + static void (DOCTEST_CDECL *prev_sigabrt_handler)(int); static std::terminate_handler original_terminate_handler; static bool isSet; static ULONG guaranteeSize; @@ -4325,7 +4519,7 @@ namespace { unsigned int FatalConditionHandler::prev_abort_behavior; int FatalConditionHandler::prev_report_mode; _HFILE FatalConditionHandler::prev_report_file; - void (*FatalConditionHandler::prev_sigabrt_handler)(int); + void (DOCTEST_CDECL *FatalConditionHandler::prev_sigabrt_handler)(int); std::terminate_handler FatalConditionHandler::original_terminate_handler; bool FatalConditionHandler::isSet = false; ULONG FatalConditionHandler::guaranteeSize = 0; @@ -4498,7 +4692,7 @@ namespace detail { } if(m_exception.size()) - m_exception = String("\"") + m_exception + "\""; + m_exception = "\"" + m_exception + "\""; if(is_running_in_test) { addAssert(m_at); @@ -4526,7 +4720,7 @@ namespace detail { std::abort(); } - void decomp_assert(assertType::Enum at, const char* file, int line, const char* expr, + bool decomp_assert(assertType::Enum at, const char* file, int line, const char* expr, Result result) { bool failed = !result.m_passed; @@ -4537,20 +4731,30 @@ namespace detail { DOCTEST_ASSERT_OUT_OF_TESTS(result.m_decomp); DOCTEST_ASSERT_IN_TESTS(result.m_decomp); // NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks) + return !failed; } MessageBuilder::MessageBuilder(const char* file, int line, assertType::Enum severity) { - m_stream = getTlsOss(); + m_stream = tlssPush(); m_file = file; m_line = line; m_severity = severity; } + MessageBuilder::~MessageBuilder() { + if (!logged) + tlssPop(); + } + IExceptionTranslator::IExceptionTranslator() = default; IExceptionTranslator::~IExceptionTranslator() = default; bool MessageBuilder::log() { - m_string = getTlsOssResult(); + if (!logged) { + m_string = tlssPop(); + logged = true; + } + DOCTEST_ITERATE_THROUGH_REPORTERS(log_message, *this); const bool isWarn = m_severity & assertType::is_warn; @@ -4569,29 +4773,10 @@ namespace detail { if(m_severity & assertType::is_require) //!OCLINT bitwise operator in conditional throwException(); } - - MessageBuilder::~MessageBuilder() = default; } // namespace detail namespace { using namespace detail; - template <typename Ex> - DOCTEST_NORETURN void throw_exception(Ex const& e) { -#ifndef DOCTEST_CONFIG_NO_EXCEPTIONS - throw e; -#else // DOCTEST_CONFIG_NO_EXCEPTIONS - std::cerr << "doctest will terminate because it needed to throw an exception.\n" - << "The message was: " << e.what() << '\n'; - std::terminate(); -#endif // DOCTEST_CONFIG_NO_EXCEPTIONS - } - -#ifndef DOCTEST_INTERNAL_ERROR -#define DOCTEST_INTERNAL_ERROR(msg) \ - throw_exception(std::logic_error( \ - __FILE__ ":" DOCTEST_TOSTR(__LINE__) ": Internal doctest error: " msg)) -#endif // DOCTEST_INTERNAL_ERROR - // clang-format off // ================================================================================================= @@ -5054,7 +5239,8 @@ namespace { xml.scopedElement("TestCase").writeAttribute("name", in.data[i]->m_name) .writeAttribute("testsuite", in.data[i]->m_test_suite) .writeAttribute("filename", skipPathFromFilename(in.data[i]->m_file.c_str())) - .writeAttribute("line", line(in.data[i]->m_line)); + .writeAttribute("line", line(in.data[i]->m_line)) + .writeAttribute("skipped", in.data[i]->m_skip); } xml.scopedElement("OverallResultsTestCases") .writeAttribute("unskipped", in.run_stats->numTestCasesPassingFilters); @@ -5124,7 +5310,8 @@ namespace { xml.startElement("OverallResultsAsserts") .writeAttribute("successes", st.numAssertsCurrentTest - st.numAssertsFailedCurrentTest) - .writeAttribute("failures", st.numAssertsFailedCurrentTest); + .writeAttribute("failures", st.numAssertsFailedCurrentTest) + .writeAttribute("test_case_success", st.testCaseSuccess); if(opt.duration) xml.writeAttribute("duration", st.seconds); if(tc->m_expected_failures) @@ -5143,8 +5330,6 @@ namespace { } void subcase_start(const SubcaseSignature& in) override { - std::lock_guard<std::mutex> lock(mutex); - xml.startElement("SubCase") .writeAttribute("name", in.m_name) .writeAttribute("filename", skipPathFromFilename(in.m_file)) @@ -5440,7 +5625,6 @@ namespace { } void subcase_start(const SubcaseSignature& in) override { - std::lock_guard<std::mutex> lock(mutex); deepestSubcaseStackNames.push_back(in.m_name); } @@ -5606,9 +5790,11 @@ namespace { } void printIntro() { - printVersion(); - s << Color::Cyan << "[doctest] " << Color::None - << "run with \"--" DOCTEST_OPTIONS_PREFIX_DISPLAY "help\" for options\n"; + if(opt.no_intro == false) { + printVersion(); + s << Color::Cyan << "[doctest] " << Color::None + << "run with \"--" DOCTEST_OPTIONS_PREFIX_DISPLAY "help\" for options\n"; + } } void printHelp() { @@ -5693,12 +5879,18 @@ namespace { << Whitespace(sizePrefixDisplay*1) << "exits after the tests finish\n"; s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "d, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "duration=<bool> " << Whitespace(sizePrefixDisplay*1) << "prints the time duration of each test\n"; + s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "m, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "minimal=<bool> " + << Whitespace(sizePrefixDisplay*1) << "minimal console output (only failures)\n"; + s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "q, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "quiet=<bool> " + << Whitespace(sizePrefixDisplay*1) << "no console output\n"; s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "nt, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "no-throw=<bool> " << Whitespace(sizePrefixDisplay*1) << "skips exceptions-related assert checks\n"; s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "ne, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "no-exitcode=<bool> " << Whitespace(sizePrefixDisplay*1) << "returns (or exits) always with success\n"; s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "nr, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "no-run=<bool> " << Whitespace(sizePrefixDisplay*1) << "skips all runtime doctest operations\n"; + s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "ni, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "no-intro=<bool> " + << Whitespace(sizePrefixDisplay*1) << "omit the framework intro in the output\n"; s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "nv, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "no-version=<bool> " << Whitespace(sizePrefixDisplay*1) << "omit the framework version in the output\n"; s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "nc, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "no-colors=<bool> " @@ -5736,22 +5928,6 @@ namespace { printReporters(getReporters(), "reporters"); } - void list_query_results() { - separator_to_stream(); - if(opt.count || opt.list_test_cases) { - s << Color::Cyan << "[doctest] " << Color::None - << "unskipped test cases passing the current filters: " - << g_cs->numTestCasesPassingFilters << "\n"; - } else if(opt.list_test_suites) { - s << Color::Cyan << "[doctest] " << Color::None - << "unskipped test cases passing the current filters: " - << g_cs->numTestCasesPassingFilters << "\n"; - s << Color::Cyan << "[doctest] " << Color::None - << "test suites with unskipped test cases passing the current filters: " - << g_cs->numTestSuitesPassingFilters << "\n"; - } - } - // ========================================================================================= // WHAT FOLLOWS ARE OVERRIDES OF THE VIRTUAL METHODS OF THE REPORTER INTERFACE // ========================================================================================= @@ -5797,9 +5973,15 @@ namespace { } } - void test_run_start() override { printIntro(); } + void test_run_start() override { + if(!opt.minimal) + printIntro(); + } void test_run_end(const TestRunStats& p) override { + if(opt.minimal && p.numTestCasesFailed == 0) + return; + separator_to_stream(); s << std::dec; @@ -5880,6 +6062,7 @@ namespace { } void test_case_exception(const TestCaseException& e) override { + std::lock_guard<std::mutex> lock(mutex); if(tc->m_no_output) return; @@ -5904,14 +6087,12 @@ namespace { } void subcase_start(const SubcaseSignature& subc) override { - std::lock_guard<std::mutex> lock(mutex); subcasesStack.push_back(subc); ++currentSubcaseLevel; hasLoggedCurrentTestStart = false; } void subcase_end() override { - std::lock_guard<std::mutex> lock(mutex); --currentSubcaseLevel; hasLoggedCurrentTestStart = false; } @@ -6047,18 +6228,42 @@ namespace { std::vector<String>& res) { String filtersString; if(parseOption(argc, argv, pattern, &filtersString)) { - // tokenize with "," as a separator - // cppcheck-suppress strtokCalled - DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wdeprecated-declarations") - auto pch = std::strtok(filtersString.c_str(), ","); // modifies the string - while(pch != nullptr) { - if(strlen(pch)) - res.push_back(pch); - // uses the strtok() internal state to go to the next token - // cppcheck-suppress strtokCalled - pch = std::strtok(nullptr, ","); + // tokenize with "," as a separator, unless escaped with backslash + std::ostringstream s; + auto flush = [&s, &res]() { + auto string = s.str(); + if(string.size() > 0) { + res.push_back(string.c_str()); + } + s.str(""); + }; + + bool seenBackslash = false; + const char* current = filtersString.c_str(); + const char* end = current + strlen(current); + while(current != end) { + char character = *current++; + if(seenBackslash) { + seenBackslash = false; + if(character == ',') { + s.put(','); + continue; + } + s.put('\\'); + } + if(character == '\\') { + seenBackslash = true; + } else if(character == ',') { + flush(); + } else { + s.put(character); + } + } + + if(seenBackslash) { + s.put('\\'); } - DOCTEST_CLANG_SUPPRESS_WARNING_POP + flush(); return true; } return false; @@ -6191,9 +6396,12 @@ void Context::parseArgs(int argc, const char* const* argv, bool withDefaults) { DOCTEST_PARSE_AS_BOOL_OR_FLAG("case-sensitive", "cs", case_sensitive, false); DOCTEST_PARSE_AS_BOOL_OR_FLAG("exit", "e", exit, false); DOCTEST_PARSE_AS_BOOL_OR_FLAG("duration", "d", duration, false); + DOCTEST_PARSE_AS_BOOL_OR_FLAG("minimal", "m", minimal, false); + DOCTEST_PARSE_AS_BOOL_OR_FLAG("quiet", "q", quiet, false); DOCTEST_PARSE_AS_BOOL_OR_FLAG("no-throw", "nt", no_throw, false); DOCTEST_PARSE_AS_BOOL_OR_FLAG("no-exitcode", "ne", no_exitcode, false); DOCTEST_PARSE_AS_BOOL_OR_FLAG("no-run", "nr", no_run, false); + DOCTEST_PARSE_AS_BOOL_OR_FLAG("no-intro", "ni", no_intro, false); DOCTEST_PARSE_AS_BOOL_OR_FLAG("no-version", "nv", no_version, false); DOCTEST_PARSE_AS_BOOL_OR_FLAG("no-colors", "nc", no_colors, false); DOCTEST_PARSE_AS_BOOL_OR_FLAG("force-colors", "fc", force_colors, false); @@ -6257,7 +6465,12 @@ void Context::clearFilters() { curr.clear(); } -// allows the user to override procedurally the int/bool options from the command line +// allows the user to override procedurally the bool options from the command line +void Context::setOption(const char* option, bool value) { + setOption(option, value ? "true" : "false"); +} + +// allows the user to override procedurally the int options from the command line void Context::setOption(const char* option, int value) { setOption(option, toString(value).c_str()); // NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks) @@ -6277,6 +6490,31 @@ void Context::setAsDefaultForAssertsOutOfTestCases() { g_cs = p; } void Context::setAssertHandler(detail::assert_handler ah) { p->ah = ah; } +void Context::setCout(std::ostream* out) { p->cout = out; } + +static class DiscardOStream : public std::ostream +{ +private: + class : public std::streambuf + { + private: + // allowing some buffering decreases the amount of calls to overflow + char buf[1024]; + + protected: + std::streamsize xsputn(const char_type*, std::streamsize count) override { return count; } + + int_type overflow(int_type ch) override { + setp(std::begin(buf), std::end(buf)); + return traits_type::not_eof(ch); + } + } discardBuf; + +public: + DiscardOStream() + : std::ostream(&discardBuf) {} +} discardOut; + // the main function that does all the filtering and test running int Context::run() { using namespace detail; @@ -6290,15 +6528,18 @@ int Context::run() { g_no_colors = p->no_colors; p->resetRunData(); - // stdout by default - p->cout = &std::cout; - p->cerr = &std::cerr; - - // or to a file if specified std::fstream fstr; - if(p->out.size()) { - fstr.open(p->out.c_str(), std::fstream::out); - p->cout = &fstr; + if(p->cout == nullptr) { + if(p->quiet) { + p->cout = &discardOut; + } else if(p->out.size()) { + // to a file if specified + fstr.open(p->out.c_str(), std::fstream::out); + p->cout = &fstr; + } else { + // stdout by default + p->cout = &std::cout; + } } FatalConditionHandler::allocateAltStackMem(); @@ -6531,13 +6772,6 @@ DOCTEST_MSVC_SUPPRESS_WARNING_POP DOCTEST_ITERATE_THROUGH_REPORTERS(report_query, qdata); } - // see these issues on the reasoning for this: - // - https://github.com/onqtam/doctest/issues/143#issuecomment-414418903 - // - https://github.com/onqtam/doctest/issues/126 - auto DOCTEST_FIX_FOR_MACOS_LIBCPP_IOSFWD_STRING_LINK_ERRORS = []() DOCTEST_NOINLINE - { std::cout << std::string(); }; - DOCTEST_FIX_FOR_MACOS_LIBCPP_IOSFWD_STRING_LINK_ERRORS(); - return cleanup_and_return(); } @@ -6576,5 +6810,7 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP DOCTEST_MSVC_SUPPRESS_WARNING_POP DOCTEST_GCC_SUPPRESS_WARNING_POP +DOCTEST_SUPPRESS_COMMON_WARNINGS_POP + #endif // DOCTEST_LIBRARY_IMPLEMENTATION #endif // DOCTEST_CONFIG_IMPLEMENT diff --git a/thirdparty/freetype/src/autofit/afblue.dat b/thirdparty/freetype/src/autofit/afblue.dat deleted file mode 100644 index 201acc4f6f..0000000000 --- a/thirdparty/freetype/src/autofit/afblue.dat +++ /dev/null @@ -1,1121 +0,0 @@ -// afblue.dat -// -// Auto-fitter data for blue strings. -// -// Copyright (C) 2013-2022 by -// David Turner, Robert Wilhelm, and Werner Lemberg. -// -// This file is part of the FreeType project, and may only be used, -// modified, and distributed under the terms of the FreeType project -// license, LICENSE.TXT. By continuing to use, modify, or distribute -// this file you indicate that you have read the license and -// understand and accept it fully. - - -// This file contains data specific to blue zones. It gets processed by -// a script to simulate `jagged arrays', with enumeration values holding -// offsets into the arrays. -// -// The format of the file is rather simple: A section starts with three -// labels separated by whitespace and followed by a colon (everything in a -// single line); the first label gives the name of the enumeration template, -// the second the name of the array template, and the third the name of the -// `maximum' template. The script then fills the corresponding templates -// (indicated by `@' characters around the name). -// -// A section contains one or more data records. Each data record consists -// of two or more lines. The first line holds the enumeration name, and the -// remaining lines the corresponding array data. -// -// There are two possible representations for array data. -// -// - A string of characters or character clusters (for example, representing -// Aksharas, Devanagari syllables) in UTF-8 encoding enclosed in double -// quotes, using C syntax, where the elements are separated by spaces. -// There can be only one string per line, thus the starting and ending -// double quote must be the first and last character in the line, -// respectively, ignoring whitespace before and after the string. If -// there are multiple strings (in multiple lines), they are concatenated -// to a single string. In the output, a string gets represented as a -// series of singles bytes, followed by a zero byte. The enumeration -// values simply hold byte offsets to the start of the corresponding -// strings. -// -// For strings, the `maximum' template holds the maximum number of -// non-space characters in all strings. -// -// - Data blocks enclosed in balanced braces, which get copied verbatim and -// which can span multiple lines. The opening brace of a block must be -// the first character of a line (ignoring whitespace), and the closing -// brace the last (ignoring whitespace also). The script appends a comma -// character after each block and counts the number of blocks to set the -// enumeration values. -// -// For data blocks, the `maximum' template holds the maximum number of -// array elements. -// -// A section can contain either strings only or data blocks only. -// -// A comment line starts with `//'; it gets removed. A preprocessor -// directive line (using the standard syntax of `cpp') starts with `#' and -// gets copied verbatim to both the enumeration and the array. Whitespace -// outside of a string is insignificant. -// -// Preprocessor directives are ignored while the script computes maximum -// values; this essentially means that the maximum values can easily be too -// large. Given that the purpose of those values is to create local -// fixed-size arrays at compile time for further processing of the blue zone -// data, this isn't a problem. Note the final zero byte of a string is not -// counted. Note also that the count holds the number of UTF-8 encoded -// characters, not bytes. - - -// The blue zone string data, to be used in the blue stringsets below. - -AF_BLUE_STRING_ENUM AF_BLUE_STRINGS_ARRAY AF_BLUE_STRING_MAX_LEN: - - AF_BLUE_STRING_ADLAM_CAPITAL_TOP - "𞤌 𞤅 𞤈 𞤠𞤔 𞤚" - AF_BLUE_STRING_ADLAM_CAPITAL_BOTTOM - "𞤂 𞤖" - AF_BLUE_STRING_ADLAM_SMALL_TOP - "𞤬 𞤮 𞤻 𞤼 𞤾" - AF_BLUE_STRING_ADLAM_SMALL_BOTTOM - "𞤤 𞤨 𞤩 𞤠𞤴 𞤸 𞤺 𞥀" - - AF_BLUE_STRING_ARABIC_TOP - "ا Ø¥ Ù„ Ùƒ Ø· ظ" - AF_BLUE_STRING_ARABIC_BOTTOM - "ت Ø« Ø· ظ Ùƒ" - // We don't necessarily have access to medial forms via Unicode in case - // Arabic presentational forms are missing. The only character that is - // guaranteed to have the same vertical position with joining (this is, - // non-isolated) forms is U+0640, ARABIC TATWEEL, which must join both - // round and flat curves. - AF_BLUE_STRING_ARABIC_JOIN - "Ù€" - - AF_BLUE_STRING_ARMENIAN_CAPITAL_TOP - "Ô± Õ„ Õ’ Õ Ô² Ô³ Ô´ Õ•" - AF_BLUE_STRING_ARMENIAN_CAPITAL_BOTTOM - "Õ’ Õˆ Ô´ Õƒ Õ‡ Õ Õ Õ•" - AF_BLUE_STRING_ARMENIAN_SMALL_ASCENDER - "Õ¥ Õ§ Õ« Õ´ Õ¾ Ö† Õ³" - AF_BLUE_STRING_ARMENIAN_SMALL_TOP - "Õ¡ Õµ Ö‚ Õ½ Õ£ Õ· Ö€ Ö…" - AF_BLUE_STRING_ARMENIAN_SMALL_BOTTOM - "Õ° Õ¸ Õ³ Õ¡ Õ¥ Õ® Õ½ Ö…" - AF_BLUE_STRING_ARMENIAN_SMALL_DESCENDER - "Õ¢ Õ¨ Õ« Õ¬ Õ² Õº Öƒ Ö" - - AF_BLUE_STRING_AVESTAN_TOP - "𬀠ð¬ ð¬ ð¬›" - AF_BLUE_STRING_AVESTAN_BOTTOM - "𬀠ð¬" - - AF_BLUE_STRING_BAMUM_TOP - "êš§ ꚨ ê›› ꛉ ê› ê›ˆ ꛫ ꛯ" - AF_BLUE_STRING_BAMUM_BOTTOM - "êš êš³ êš¶ ꛬ ꚢ êš½ ꛯ ꛲" - - AF_BLUE_STRING_BENGALI_BASE - "অ ড ত ন ব ঠল ক" - AF_BLUE_STRING_BENGALI_TOP - "ই ট ঠি à§€ ৈ à§—" - AF_BLUE_STRING_BENGALI_HEAD - "ও ঠড ত ন ব ল ক" - - AF_BLUE_STRING_BUHID_TOP - "á áˆ" - AF_BLUE_STRING_BUHID_LARGE - "á… áŠ áŽ" - AF_BLUE_STRING_BUHID_SMALL - "ႠრበáŒ" - AF_BLUE_STRING_BUHID_BOTTOM - "ဠრᆠበዠá á‘" - - AF_BLUE_STRING_CANADIAN_SYLLABICS_TOP - "á—œ á–´ á á’£ á‘« ᑎ ᔑ á—°" - AF_BLUE_STRING_CANADIAN_SYLLABICS_BOTTOM - "á—¶ á–µ á’§ რᑌ ᒠᔑ á—¢" - AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_TOP - "á““ á“• á“€ á“‚ á“„ á•„ ᕆ ᘣ" - AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_BOTTOM - "ᕃ á“‚ á“€ á•‚ á“— ᓚ ᕆ ᘣ" - AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_TOP - "᪠ᙆ ᣘ ᢠᒾ ᣗ ᔆ" - AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_BOTTOM - "ᙆ á—® á’» ហᔆ á’¡ á’¢ á“‘" - - AF_BLUE_STRING_CARIAN_TOP - "ðŠ§ ðŠ« ðŠ¬ ðŠ ðŠ± ðŠº ðŠ¼ ðŠ¿" - AF_BLUE_STRING_CARIAN_BOTTOM - "ðŠ£ ðŠ§ ðŠ· ð‹€ ðŠ« ðŠ¸ ð‹‰" - - AF_BLUE_STRING_CHAKMA_TOP - "𑄃 ð‘„… 𑄉 ð‘„™ ð‘„—" - AF_BLUE_STRING_CHAKMA_BOTTOM - "ð‘„… ð‘„› ð‘„ ð‘„— ð‘„“" - AF_BLUE_STRING_CHAKMA_DESCENDER - "𑄖𑄳𑄢 𑄘𑄳𑄢 𑄙𑄳𑄢 𑄤𑄳𑄢 𑄥𑄳𑄢" - - AF_BLUE_STRING_CHEROKEE_CAPITAL - "ᆠᎻ Ꭼ რᎤ ᣠᎦ á•" - AF_BLUE_STRING_CHEROKEE_SMALL_ASCENDER - "ê®’ ꮤ ê®¶ ê´ ê¾ ê®— ê® ê®¿" - AF_BLUE_STRING_CHEROKEE_SMALL - "ê®– ê¼ ê®“ ê® ê®³ ê¶ ê®¥ ê®»" - AF_BLUE_STRING_CHEROKEE_SMALL_DESCENDER - "á¸ ê® ê¹ ê»" - - AF_BLUE_STRING_COPTIC_CAPITAL_TOP - "Ⲍ Ⲏ ⲠⳞ Ⲟ ⲠⲤ Ⳋ" - AF_BLUE_STRING_COPTIC_CAPITAL_BOTTOM - "ⳠⳘ Ⳟ Ⲏ Ⲟ ⲠⳜ â²°" - AF_BLUE_STRING_COPTIC_SMALL_TOP - "ⲠⲠⲡ ⳟ ⲟ ⲑ â²¥ ⳋ" - AF_BLUE_STRING_COPTIC_SMALL_BOTTOM - "ⳑ â³™ ⳟ Ⲡⲟ ⲑ â³ â³’" - - AF_BLUE_STRING_CYPRIOT_TOP - "ð ð ™ ð ³ ð ± ð … ð “ ð £ ð ¦" - AF_BLUE_STRING_CYPRIOT_BOTTOM - "ð ƒ ð Š ð › ð £ ð ³ ð µ ð " - AF_BLUE_STRING_CYPRIOT_SMALL - "ð ˆ ð ð –" - - AF_BLUE_STRING_CYRILLIC_CAPITAL_TOP - "Б Ð’ Е П З О С Ð" - AF_BLUE_STRING_CYRILLIC_CAPITAL_BOTTOM - "Б Ð’ Е Ш З О С Ð" - AF_BLUE_STRING_CYRILLIC_SMALL - "Ñ… п н ш е з о Ñ" - AF_BLUE_STRING_CYRILLIC_SMALL_DESCENDER - "Ñ€ у Ñ„" - - AF_BLUE_STRING_DESERET_CAPITAL_TOP - "ð‚ ð„ ð‹ ð— ð‘" - AF_BLUE_STRING_DESERET_CAPITAL_BOTTOM - "ð€ ð‚ ð„ ð— ð›" - AF_BLUE_STRING_DESERET_SMALL_TOP - "ðª ð¬ ð³ ð¿ ð¹" - AF_BLUE_STRING_DESERET_SMALL_BOTTOM - "ð¨ ðª ð¬ ð¿ ð‘ƒ" - - AF_BLUE_STRING_DEVANAGARI_BASE - "क न म उ छ ट ठड" - AF_BLUE_STRING_DEVANAGARI_TOP - "ई ठओ औ ि ी ो ौ" - // note that some fonts have extreme variation in the height of the - // round head elements; for this reason we also define the `base' - // blue zone, which must be always present - AF_BLUE_STRING_DEVANAGARI_HEAD - "क म अ आ थ ध ठश" - AF_BLUE_STRING_DEVANAGARI_BOTTOM - "ॠृ" - - AF_BLUE_STRING_ETHIOPIC_TOP - "ሀ ሃ ዘ á ማ በዋ á‹" - AF_BLUE_STRING_ETHIOPIC_BOTTOM - "ለ ሠበዘ ሀ ሪ ዠጨ" - - AF_BLUE_STRING_GEORGIAN_MKHEDRULI_TOP - "გ დ ე ვ თ ი რღ" - AF_BLUE_STRING_GEORGIAN_MKHEDRULI_BOTTOM - "რზ მ ს შ ძ ხ პ" - AF_BLUE_STRING_GEORGIAN_MKHEDRULI_ASCENDER - "ს ხ ქ ზ მ შ ჩ წ" - AF_BLUE_STRING_GEORGIAN_MKHEDRULI_DESCENDER - "ე ვ ჟ ტ უ ფ ქ ყ" - - AF_BLUE_STRING_GEORGIAN_ASOMTAVRULI_TOP - "Ⴑ á‚§ Ⴙ Ⴜ Ⴄ á‚¥ Ⴓ Ⴚ" - AF_BLUE_STRING_GEORGIAN_ASOMTAVRULI_BOTTOM - "Ⴄ á‚¥ á‚§ Ⴈ Ⴆ Ⴑ Ⴊ á‚«" - - AF_BLUE_STRING_GEORGIAN_NUSKHURI_TOP - "â´ â´— â´‚ â´„ â´… â´‡ â´” â´–" - AF_BLUE_STRING_GEORGIAN_NUSKHURI_BOTTOM - "â´ˆ â´Œ â´– â´Ž â´ƒ â´† â´‹ â´¢" - AF_BLUE_STRING_GEORGIAN_NUSKHURI_ASCENDER - "â´ â´‘ â´“ â´• â´™ â´› â´¡ â´£" - AF_BLUE_STRING_GEORGIAN_NUSKHURI_DESCENDER - "â´„ â´… â´” â´• â´ â´‚ â´˜ â´" - - AF_BLUE_STRING_GEORGIAN_MTAVRULI_TOP - "Ნ Ჟ á²³ Ჸ á²’ á²” á² á²´" - AF_BLUE_STRING_GEORGIAN_MTAVRULI_BOTTOM - "Ი á²² ᲠᲩ á²› Შ Ჯ á²½" - - AF_BLUE_STRING_GLAGOLITIC_CAPITAL_TOP - "â°… â°” â°ª â°„ â°‚ â°Š â°« â°‹" - AF_BLUE_STRING_GLAGOLITIC_CAPITAL_BOTTOM - "â°… â°„ â°‚ â°ª â°ž â°¡ â°Š â°”" - AF_BLUE_STRING_GLAGOLITIC_SMALL_TOP - "â°µ ⱄ ⱚ â°´ â°² â°º â±› â°»" - AF_BLUE_STRING_GLAGOLITIC_SMALL_BOTTOM - "â°µ â°´ â°² ⱚ ⱎ ⱑ â°º ⱄ" - - AF_BLUE_STRING_GOTHIC_TOP - "ðŒ² ðŒ¶ ð€ ð„ ðŒ´ ðƒ ðˆ ðŒ¾" - AF_BLUE_STRING_GOTHIC_BOTTOM - "ðŒ¶ ðŒ´ ðƒ ðˆ" - - AF_BLUE_STRING_GREEK_CAPITAL_TOP - "Γ Î’ Ε Ζ Θ Ο Ω" - AF_BLUE_STRING_GREEK_CAPITAL_BOTTOM - "Î’ Δ Ζ Ξ Θ Ο" - AF_BLUE_STRING_GREEK_SMALL_BETA_TOP - "β θ δ ζ λ ξ" - AF_BLUE_STRING_GREEK_SMALL - "α ε ι ο Ï€ σ Ï„ ω" - AF_BLUE_STRING_GREEK_SMALL_DESCENDER - "β γ η μ Ï Ï† χ ψ" - - AF_BLUE_STRING_GUJARATI_TOP - "ત ન ઋ ઌ છ ટ ર ૦" - AF_BLUE_STRING_GUJARATI_BOTTOM - "ખ ગ ઘ ઞ ઇ ઈ ઠજ" - AF_BLUE_STRING_GUJARATI_ASCENDER - "ઈ ઊ િ à«€ લી શà«àªšàª¿ જિ સી" - AF_BLUE_STRING_GUJARATI_DESCENDER - "ૠૃ à«„ ખૠછૃ છૄ" - AF_BLUE_STRING_GUJARATI_DIGIT_TOP - "૦ à«§ ૨ à«© à«" - - AF_BLUE_STRING_GURMUKHI_BASE - "ਕ ਗ ਙ ਚ ਜ ਤ ਧ ਸ" - AF_BLUE_STRING_GURMUKHI_HEAD - "ਕ ਗ ਙ ਚ ਜ ਤ ਧ ਸ" - AF_BLUE_STRING_GURMUKHI_TOP - "ਇ ਈ ਉ ਠਓ ੳ ਿ à©€" - AF_BLUE_STRING_GURMUKHI_BOTTOM - "ਅ ਠਓ ਗ ਜ ਠਰ ਸ" - AF_BLUE_STRING_GURMUKHI_DIGIT_TOP - "੦ à©§ ੨ à©© à©" - - AF_BLUE_STRING_HEBREW_TOP - "ב ד ×” ×— ך ×› × ×¡" - AF_BLUE_STRING_HEBREW_BOTTOM - "ב ט ×› × ×¡ צ" - AF_BLUE_STRING_HEBREW_DESCENDER - "×§ ך ן ×£ ×¥" - - AF_BLUE_STRING_KANNADA_TOP - "ಇ ಊ ಠಣ ಸಾ ನಾ ದಾ ರಾ" - AF_BLUE_STRING_KANNADA_BOTTOM - "ಅ ಉ ಎ ಲ ೦ ೨ ೬ à³" - - AF_BLUE_STRING_KAYAH_LI_TOP - "꤅ ê¤ ê¤ ê¤‹ ꤀ ê¤" - AF_BLUE_STRING_KAYAH_LI_BOTTOM - "꤈ ꤘ ꤀ ê¤ ê¤¢" - AF_BLUE_STRING_KAYAH_LI_ASCENDER - "ꤖ ꤡ" - AF_BLUE_STRING_KAYAH_LI_DESCENDER - "ꤑ ꤜ ꤞ" - AF_BLUE_STRING_KAYAH_LI_LARGE_DESCENDER - "ꤑ꤬ ê¤œê¤ ê¤”ê¤¬" - - AF_BLUE_STRING_KHMER_TOP - "áž áž‘ áž“ áž§ áž© áž¶" - AF_BLUE_STRING_KHMER_SUBSCRIPT_TOP - "ក្ក ក្ហក្គ ក្áž" - AF_BLUE_STRING_KHMER_BOTTOM - "ហឃ áž… áž‹ áž” ម áž™ áž²" - AF_BLUE_STRING_KHMER_DESCENDER - "ážáŸ’ážš រៀ ឲ្យ អឿ" - AF_BLUE_STRING_KHMER_LARGE_DESCENDER - "ន្ážáŸ’រៃ ង្ážáŸ’áž™ ក្បៀ ច្រៀ ន្ážáž¿ ល្បឿ" - - AF_BLUE_STRING_KHMER_SYMBOLS_WAXING_TOP - "á§ á§¡" - AF_BLUE_STRING_KHMER_SYMBOLS_WANING_BOTTOM - "á§¶ á§¹" - - AF_BLUE_STRING_LAO_TOP - "າ ດ ຠມ ລ ວ ຣ ງ" - AF_BLUE_STRING_LAO_BOTTOM - "າ ຠບ ຠຣ ຮ ວ ຢ" - AF_BLUE_STRING_LAO_ASCENDER - "ປ ຢ ຟ àº" - AF_BLUE_STRING_LAO_LARGE_ASCENDER - "ໂ ໄ ໃ" - AF_BLUE_STRING_LAO_DESCENDER - "ງ ຊ ຖ ຽ ໆ ຯ" - - AF_BLUE_STRING_LATIN_CAPITAL_TOP - "T H E Z O C Q S" - AF_BLUE_STRING_LATIN_CAPITAL_BOTTOM - "H E Z L O C U S" - AF_BLUE_STRING_LATIN_SMALL_F_TOP - "f i j k d b h" - AF_BLUE_STRING_LATIN_SMALL_TOP - "u v x z o e s c" - AF_BLUE_STRING_LATIN_SMALL_BOTTOM - "n r x z o e s c" - AF_BLUE_STRING_LATIN_SMALL_DESCENDER - "p q g j y" - - // we assume that both the subscript and superscript ranges - // don't contain oldstyle digits (actually, most fonts probably - // have digits only in those ranges) - AF_BLUE_STRING_LATIN_SUBS_CAPITAL_TOP - "â‚€ ₃ â‚… ₇ ₈" - AF_BLUE_STRING_LATIN_SUBS_CAPITAL_BOTTOM - "â‚€ â‚ â‚‚ ₃ ₈" - AF_BLUE_STRING_LATIN_SUBS_SMALL_F_TOP - "áµ¢ â±¼ â‚• â‚– â‚—" - AF_BLUE_STRING_LATIN_SUBS_SMALL - "â‚ â‚‘ â‚’ â‚“ â‚™ â‚› áµ¥ ᵤ áµ£" - AF_BLUE_STRING_LATIN_SUBS_SMALL_DESCENDER - "ᵦ áµ§ ᵨ ᵩ ₚ" - - AF_BLUE_STRING_LATIN_SUPS_CAPITAL_TOP - "Ⱐ³ âµ â· áµ€ á´´ á´± á´¼" - AF_BLUE_STRING_LATIN_SUPS_CAPITAL_BOTTOM - "Ⱐ¹ ² ³ á´± á´¸ á´¼ áµ" - AF_BLUE_STRING_LATIN_SUPS_SMALL_F_TOP - "ᵇ ᵈ ᵠʰ ʲ á¶ â±" - AF_BLUE_STRING_LATIN_SUPS_SMALL - "ᵉ áµ’ ʳ Ë¢ Ë£ á¶œ á¶»" - AF_BLUE_STRING_LATIN_SUPS_SMALL_DESCENDER - "áµ– ʸ áµ" - - AF_BLUE_STRING_LISU_TOP - "ê“¡ ê“§ ꓱ ê“¶ ê“© ꓚ ꓵ ꓳ" - AF_BLUE_STRING_LISU_BOTTOM - "ê“• ꓜ ꓞ ê“¡ ê“› ê“¢ ꓳ ê“´" - - AF_BLUE_STRING_MALAYALAM_TOP - "à´’ à´Ÿ à´ à´± à´š à´ª à´šàµà´š à´ªàµà´ª" - AF_BLUE_STRING_MALAYALAM_BOTTOM - "à´Ÿ à´ à´§ à´¶ à´˜ à´š à´¥ à´²" - - AF_BLUE_STRING_MEDEFAIDRIN_CAPITAL_TOP - "ð–¹€ 𖹠𖹂 𖹃 𖹠𖹚 𖹟" - AF_BLUE_STRING_MEDEFAIDRIN_CAPITAL_BOTTOM - "ð–¹€ 𖹠𖹂 𖹃 𖹠𖹚 ð–¹’ 𖹓" - AF_BLUE_STRING_MEDEFAIDRIN_SMALL_F_TOP - "𖹤 𖹬 ð–¹§ ð–¹´ ð–¹¶ ð–¹¾" - AF_BLUE_STRING_MEDEFAIDRIN_SMALL_TOP - "𖹠𖹡 ð–¹¢ ð–¹¹ ð–¹³ ð–¹®" - AF_BLUE_STRING_MEDEFAIDRIN_SMALL_BOTTOM - "𖹠𖹡 ð–¹¢ ð–¹³ ð–¹ ð–¹½" - AF_BLUE_STRING_MEDEFAIDRIN_SMALL_DESCENDER - "ð–¹¥ 𖹨 𖹩" - AF_BLUE_STRING_MEDEFAIDRIN_DIGIT_TOP - "𖺀 ð–º… 𖺈 𖺄 ð–º" - - AF_BLUE_STRING_MONGOLIAN_TOP_BASE - "á ³ á ´ á ¶ á ½ á¡‚ ᡊ â€á¡¡â€ â€á¡³â€" - AF_BLUE_STRING_MONGOLIAN_BOTTOM_BASE - "ᡃ" - - AF_BLUE_STRING_MYANMAR_TOP - "ဠဂ င ဒ ဠᥠአá‹" - AF_BLUE_STRING_MYANMAR_BOTTOM - "င ဎ ဒ ပ ဗ ဠአá‹" - AF_BLUE_STRING_MYANMAR_ASCENDER - "ဩ ြ á á ᆠါ á€" - AF_BLUE_STRING_MYANMAR_DESCENDER - "ဉ ည ဥ ဩ ဨ á‚ á… á‰" - - AF_BLUE_STRING_NKO_TOP - "ß ß‰ ß’ ߟ ß– ßœ ß ß¥" - AF_BLUE_STRING_NKO_BOTTOM - "߀ ߘ ß¡ ß ß¥" - AF_BLUE_STRING_NKO_SMALL_TOP - "ß ß› ß‹" - AF_BLUE_STRING_NKO_SMALL_BOTTOM - "ߎ ß ß› ß‹" - - AF_BLUE_STRING_OL_CHIKI - "á±› ᱜ ᱠᱡ á±¢ á±¥" - - AF_BLUE_STRING_OLD_TURKIC_TOP - "ð°— ð°˜ ð°§" - AF_BLUE_STRING_OLD_TURKIC_BOTTOM - "ð°‰ ð°— ð°¦ ð°§" - - AF_BLUE_STRING_OSAGE_CAPITAL_TOP - "ð’¾ ð“ ð“’ ð““ ð’» ð“‚ ð’µ ð“†" - AF_BLUE_STRING_OSAGE_CAPITAL_BOTTOM - "ð’° ð“ 𓂠𒿠𓎠ð’¹" - AF_BLUE_STRING_OSAGE_CAPITAL_DESCENDER - "ð’¼ ð’½ ð’¾" - AF_BLUE_STRING_OSAGE_SMALL_TOP - "𓵠𓶠𓺠𓻠ð“ 𓣠𓪠ð“®" - AF_BLUE_STRING_OSAGE_SMALL_BOTTOM - "𓘠𓚠𓣠𓵠𓡠𓧠𓪠ð“¶" - AF_BLUE_STRING_OSAGE_SMALL_ASCENDER - "𓤠𓦠𓸠𓹠ð“›" - AF_BLUE_STRING_OSAGE_SMALL_DESCENDER - "𓤠𓥠ð“¦" - - AF_BLUE_STRING_OSMANYA_TOP - "ð’† ð’‰ ð’ ð’’ ð’˜ ð’› ð’ ð’£" - AF_BLUE_STRING_OSMANYA_BOTTOM - "ð’€ ð’‚ ð’† ð’ˆ ð’Š ð’’ ð’ ð’©" - - AF_BLUE_STRING_ROHINGYA_TOP - "ð´ƒ ð´€ ð´† ð´– ð´•" - AF_BLUE_STRING_ROHINGYA_BOTTOM - "ð´” ð´– ð´• ð´‘ ð´" - AF_BLUE_STRING_ROHINGYA_JOIN - "Ù€" - - AF_BLUE_STRING_SAURASHTRA_TOP - "ꢜ ꢞ ꢳ ꢂ ꢖ ꢒ ê¢ ê¢›" - AF_BLUE_STRING_SAURASHTRA_BOTTOM - "ꢂ ꢨ ꢺ ꢤ ꢎ" - - AF_BLUE_STRING_SHAVIAN_TOP - "ð‘• ð‘™" - AF_BLUE_STRING_SHAVIAN_BOTTOM - "𑔠𑖠𑗠𑹠ð‘»" - AF_BLUE_STRING_SHAVIAN_DESCENDER - "𑟠ð‘£" - AF_BLUE_STRING_SHAVIAN_SMALL_TOP - "𑱠𑲠𑳠𑴠𑸠𑺠ð‘¼" - AF_BLUE_STRING_SHAVIAN_SMALL_BOTTOM - "ð‘´ ð‘» ð‘¹" - - AF_BLUE_STRING_SINHALA_TOP - "ඉ à¶š à¶ à¶³ à¶´ ය à¶½ à·†" - AF_BLUE_STRING_SINHALA_BOTTOM - "à¶‘ à¶” à¶ à¶¢ à¶§ à¶® à¶° à¶»" - AF_BLUE_STRING_SINHALA_DESCENDER - "ද à¶³ à¶‹ à¶½ à¶à·– à¶à·” à¶¶à·” දු" - - AF_BLUE_STRING_SUNDANESE_TOP - "ᮋ ᮞ á®® ᮽ á®° ᮈ" - AF_BLUE_STRING_SUNDANESE_BOTTOM - "ᮄ á®” ᮕ á®— á®° ᮆ ᮈ ᮉ" - AF_BLUE_STRING_SUNDANESE_DESCENDER - "ᮼ ᳄" - - AF_BLUE_STRING_TAI_VIET_TOP - "ꪆ ꪔ ꪒ ꪖ ꪫ" - AF_BLUE_STRING_TAI_VIET_BOTTOM - "ꪉ ꪫ ꪮ" - - AF_BLUE_STRING_TAMIL_TOP - "உ à®’ ஓ à®± ஈ க à®™ ச" - AF_BLUE_STRING_TAMIL_BOTTOM - "க ச ல à®¶ உ à®™ ட ப" - - AF_BLUE_STRING_TELUGU_TOP - "à°‡ à°Œ à°™ à°ž à°£ à°± ౯" - AF_BLUE_STRING_TELUGU_BOTTOM - "à°… à°• à°š à°° à°½ ౨ ౬" - - AF_BLUE_STRING_THAI_TOP - "บ เ ๠ภภา" - AF_BLUE_STRING_THAI_BOTTOM - "บ ป ษ ฯ ภย ฮ" - AF_BLUE_STRING_THAI_ASCENDER - "ป ภฟ" - AF_BLUE_STRING_THAI_LARGE_ASCENDER - "โ ใ ไ" - AF_BLUE_STRING_THAI_DESCENDER - "ฎ ภฤ ฦ" - AF_BLUE_STRING_THAI_LARGE_DESCENDER - "ภà¸" - AF_BLUE_STRING_THAI_DIGIT_TOP - "๠๑ ๓" - - AF_BLUE_STRING_TIFINAGH - "âµ” âµ™ âµ› ⵞ â´µ â´¼ â´¹ ⵎ" - - AF_BLUE_STRING_VAI_TOP - "ê— ê˜– ꘙ ꘜ ê–œ ê– ê”… ê•¢" - AF_BLUE_STRING_VAI_BOTTOM - "ê— ê˜– ꘙ ê—ž ê”… ê•¢ ê–œ ꔆ" - - -#ifdef AF_CONFIG_OPTION_CJK - - AF_BLUE_STRING_CJK_TOP - "ä»– 们 ä½ ä¾† 們 到 å’Œ 地" - " 对 å° å°± å¸ æˆ‘ æ—¶ 時 會" - " æ¥ ç‚º 能 舰 說 说 è¿™ 這" - " 齊 |" - " 军 åŒ å·² æ„¿ æ—¢ 星 是 景" - " æ°‘ ç…§ 现 ç¾ ç† ç”¨ ç½® è¦" - " è» é‚£ é… é‡Œ é–‹ é›· 露 é¢" - " 顾" - AF_BLUE_STRING_CJK_BOTTOM - "个 为 人 ä»– 以 们 ä½ ä¾†" - " 個 們 到 å’Œ 大 对 å° å°±" - " 我 æ—¶ 時 有 æ¥ ç‚º è¦ èªª" - " 说 |" - " 主 些 å› å®ƒ 想 æ„ ç† ç”Ÿ" - " ç•¶ 看 ç€ ç½® 者 自 è‘— 裡" - " 过 还 è¿› 進 éŽ é“ é‚„ 里" - " é¢" - -#ifdef AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT - - AF_BLUE_STRING_CJK_LEFT - " 些 们 ä½ ä¾† 們 到 å’Œ 地" - " 她 å°† å°‡ å°± å¹´ å¾— 情 最" - " æ · 樣 ç† èƒ½ 說 说 è¿™ 這" - " 通 |" - " å³ å— å§ å¬ å‘¢ å“ å“ å—Ž" - " 师 師 æ”¶ æ– æ–· 明 眼 é–“" - " é—´ é™… 陈 é™ é™¤ 陳 éš éš›" - " 隨" - AF_BLUE_STRING_CJK_RIGHT - "事 å‰ å¸ å°† å°‡ 情 想 或" - " 政 æ–¯ æ–° æ · 樣 æ°‘ æ²’ 没" - " ç„¶ 特 现 ç¾ çƒ ç¬¬ ç¶“ è°" - " èµ· |" - " 例 別 别 制 动 å‹• å— å—Ž" - " 增 指 明 æœ æœŸ æž„ 物 ç¡®" - " ç§ èª¿ è°ƒ è²» è´¹ é‚£ 都 é–“" - " é—´" - -#endif /* AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT */ - -#endif /* AF_CONFIG_OPTION_CJK */ - - -// The blue zone stringsets, as used in the script styles, cf. `afstyles.h'. -// -// The AF_BLUE_PROPERTY_XXX flags are defined in `afblue.h'; here some -// explanations. -// -// A blue zone in general is defined by a reference and an overshoot line. -// During the hinting process, all coordinate values between those two lines -// are set equal to the reference value, provided that the blue zone is not -// wider than 0.75 pixels (otherwise the blue zone gets ignored). All -// entries must have `AF_BLUE_STRING_MAX' as the final line. -// -// During the glyph analysis, edges are sorted from bottom to top, and then -// sequentially checked, edge by edge, against the blue zones in the order -// given below. -// -// -// latin auto-hinter -// ----------------- -// -// Characters in a blue string are automatically classified as having a flat -// (reference) or a round (overshoot) extremum. The blue zone is then set -// up by the mean values of all flat extrema and all round extrema, -// respectively. Only horizontal blue zones (i.e., adjusting vertical -// coordinate values) are supported. -// -// Some scripts like Khmer need character composition to get all necessary -// blue zones, since Unicode only provides an abstract data model that -// doesn't represent all possible glyph shapes. For such character -// clusters, the HarfBuzz library is used to convert them into the -// corresponding glyphs. The largest glyph element (where `largest' can be -// either `largest ascender' or `largest descender') then defines the -// corresponding flat or round extremum. -// -// For the latin auto-hinter, the overshoot should be larger than the -// reference for top zones, and vice versa for bottom zones. -// -// LATIN_TOP -// Take the maximum flat and round coordinate values of the blue string -// characters for computing the blue zone's reference and overshoot -// values. -// -// If not set, take the minimum values. -// -// Mutually exclusive with `LATIN_SUB_TOP'. -// -// LATIN_SUB_TOP -// For all glyphs of a character cluster, compute the maximum flat -// and round coordinate values of each component, then take the -// smallest of the maximum values. The idea is to get the top of -// subscript glyphs, as used in Khmer, for example. Note that -// this mechanism doesn't work for ordinary ligatures. -// -// This flags indicates a secondary blue zone: It gets removed if -// there is a non-LATIN_SUB_TOP blue zone at the same coordinate -// value (after scaling). -// -// Mutually exclusive with `LATIN_TOP'. -// -// LATIN_NEUTRAL -// Ignore round extrema and define the blue zone with flat values only. -// Both top and bottom of contours can match. This is useful for -// scripts like Devanagari where vowel signs attach to the base -// character and are implemented as components of composite glyphs. -// -// If not set, both round and flat extrema are taken into account. -// Additionally, only the top or the bottom of a contour can match, -// depending on the LATIN_TOP flag. -// -// Neutral blue zones should always follow non-neutral blue zones. -// -// LATIN_X_HEIGHT -// Scale all glyphs vertically from the corresponding script to make the -// reference line of this blue zone align on the grid. The scaling -// takes place before all other blue zones get aligned to the grid. -// Only one blue character string of a script style can have this flag. -// -// LATIN_LONG -// Apply an additional constraint for blue zone values: Don't -// necessarily use the extremum as-is but a segment of the topmost (or -// bottommost) contour that is longer than a heuristic threshold, and -// which is not too far away vertically from the real extremum. This -// ensures that small bumps in the outline are ignored (for example, the -// `vertical serifs' found in many Hebrew glyph designs). -// -// The segment must be at least EM/25 font units long, and the distance -// to the extremum must be smaller than EM/4. -// -// -// cjk auto-hinter -// --------------- -// -// Characters in a blue string are *not* automatically classified. Instead, -// first come the characters used for the overshoot value, then the -// character `|', then the characters used for the reference value -// (everything separated by space characters). The blue zone is then set up -// by the mean values of all reference values and all overshoot values, -// respectively. Both horizontal and vertical blue zones (i.e., adjusting -// vertical and horizontal coordinate values, respectively) are supported. -// -// For the cjk auto-hinter, the overshoot should be smaller than the -// reference for top zones, and vice versa for bottom zones. -// -// CJK_TOP -// Take the maximum flat and round coordinate values of the blue string -// characters. If not set, take the minimum values. -// -// CJK_RIGHT -// A synonym for CJK_TOP. If CJK_HORIZ is set, this flag indicates the -// right blue zone, taking horizontal maximum values. -// -// CJK_HORIZ -// Define a blue zone for horizontal hinting (i.e., vertical blue -// zones). If not set, this is a blue zone for vertical hinting. - - -AF_BLUE_STRINGSET_ENUM AF_BLUE_STRINGSETS_ARRAY AF_BLUE_STRINGSET_MAX_LEN: - - AF_BLUE_STRINGSET_ADLM - { AF_BLUE_STRING_ADLAM_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_ADLAM_CAPITAL_BOTTOM, 0 } - { AF_BLUE_STRING_ADLAM_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP | - AF_BLUE_PROPERTY_LATIN_X_HEIGHT } - { AF_BLUE_STRING_ADLAM_SMALL_BOTTOM, 0 } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_ARAB - { AF_BLUE_STRING_ARABIC_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_ARABIC_BOTTOM, 0 } - { AF_BLUE_STRING_ARABIC_JOIN, AF_BLUE_PROPERTY_LATIN_NEUTRAL } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_ARMN - { AF_BLUE_STRING_ARMENIAN_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_ARMENIAN_CAPITAL_BOTTOM, 0 } - { AF_BLUE_STRING_ARMENIAN_SMALL_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_ARMENIAN_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP | - AF_BLUE_PROPERTY_LATIN_X_HEIGHT } - { AF_BLUE_STRING_ARMENIAN_SMALL_BOTTOM, 0 } - { AF_BLUE_STRING_ARMENIAN_SMALL_DESCENDER, 0 } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_AVST - { AF_BLUE_STRING_AVESTAN_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_AVESTAN_BOTTOM, 0 } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_BAMU - { AF_BLUE_STRING_BAMUM_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_BAMUM_BOTTOM, 0 } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_BENG - { AF_BLUE_STRING_BENGALI_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_BENGALI_HEAD, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_BENGALI_BASE, AF_BLUE_PROPERTY_LATIN_TOP | - AF_BLUE_PROPERTY_LATIN_NEUTRAL | - AF_BLUE_PROPERTY_LATIN_X_HEIGHT } - { AF_BLUE_STRING_BENGALI_BASE, 0 } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_BUHD - { AF_BLUE_STRING_BUHID_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_BUHID_LARGE, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_BUHID_SMALL, AF_BLUE_PROPERTY_LATIN_TOP | - AF_BLUE_PROPERTY_LATIN_X_HEIGHT } - { AF_BLUE_STRING_BUHID_BOTTOM, 0 } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_CAKM - { AF_BLUE_STRING_CHAKMA_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_CHAKMA_BOTTOM, 0 } - { AF_BLUE_STRING_CHAKMA_DESCENDER, 0 } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_CANS - { AF_BLUE_STRING_CANADIAN_SYLLABICS_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_CANADIAN_SYLLABICS_BOTTOM, 0 } - { AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP | - AF_BLUE_PROPERTY_LATIN_X_HEIGHT } - { AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_BOTTOM, 0 } - { AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_BOTTOM, 0 } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_CARI - { AF_BLUE_STRING_CARIAN_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_CARIAN_BOTTOM, 0 } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_CHER - { AF_BLUE_STRING_CHEROKEE_CAPITAL, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_CHEROKEE_CAPITAL, 0 } - { AF_BLUE_STRING_CHEROKEE_SMALL_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_CHEROKEE_SMALL, AF_BLUE_PROPERTY_LATIN_TOP | - AF_BLUE_PROPERTY_LATIN_X_HEIGHT } - { AF_BLUE_STRING_CHEROKEE_SMALL, 0 } - { AF_BLUE_STRING_CHEROKEE_SMALL_DESCENDER, 0 } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_COPT - { AF_BLUE_STRING_COPTIC_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_COPTIC_CAPITAL_BOTTOM, 0 } - { AF_BLUE_STRING_COPTIC_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP | - AF_BLUE_PROPERTY_LATIN_X_HEIGHT } - { AF_BLUE_STRING_COPTIC_SMALL_BOTTOM, 0 } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_CPRT - { AF_BLUE_STRING_CYPRIOT_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_CYPRIOT_BOTTOM, 0 } - { AF_BLUE_STRING_CYPRIOT_SMALL, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_CYPRIOT_SMALL, 0 } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_CYRL - { AF_BLUE_STRING_CYRILLIC_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_CYRILLIC_CAPITAL_BOTTOM, 0 } - { AF_BLUE_STRING_CYRILLIC_SMALL, AF_BLUE_PROPERTY_LATIN_TOP | - AF_BLUE_PROPERTY_LATIN_X_HEIGHT } - { AF_BLUE_STRING_CYRILLIC_SMALL, 0 } - { AF_BLUE_STRING_CYRILLIC_SMALL_DESCENDER, 0 } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_DEVA - { AF_BLUE_STRING_DEVANAGARI_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_DEVANAGARI_HEAD, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_DEVANAGARI_BASE, AF_BLUE_PROPERTY_LATIN_TOP | - AF_BLUE_PROPERTY_LATIN_NEUTRAL | - AF_BLUE_PROPERTY_LATIN_X_HEIGHT } - { AF_BLUE_STRING_DEVANAGARI_BASE, 0 } - { AF_BLUE_STRING_DEVANAGARI_BOTTOM, 0 } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_DSRT - { AF_BLUE_STRING_DESERET_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_DESERET_CAPITAL_BOTTOM, 0 } - { AF_BLUE_STRING_DESERET_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP | - AF_BLUE_PROPERTY_LATIN_X_HEIGHT } - { AF_BLUE_STRING_DESERET_SMALL_BOTTOM, 0 } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_ETHI - { AF_BLUE_STRING_ETHIOPIC_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_ETHIOPIC_BOTTOM, 0 } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_GEOR - { AF_BLUE_STRING_GEORGIAN_MKHEDRULI_TOP, AF_BLUE_PROPERTY_LATIN_TOP | - AF_BLUE_PROPERTY_LATIN_X_HEIGHT } - { AF_BLUE_STRING_GEORGIAN_MKHEDRULI_BOTTOM, 0 } - { AF_BLUE_STRING_GEORGIAN_MKHEDRULI_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_GEORGIAN_MKHEDRULI_DESCENDER, 0 } - { AF_BLUE_STRING_GEORGIAN_MTAVRULI_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_GEORGIAN_MTAVRULI_BOTTOM, 0 } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_GEOK - { AF_BLUE_STRING_GEORGIAN_ASOMTAVRULI_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_GEORGIAN_ASOMTAVRULI_BOTTOM, 0 } - { AF_BLUE_STRING_GEORGIAN_NUSKHURI_TOP, AF_BLUE_PROPERTY_LATIN_TOP | - AF_BLUE_PROPERTY_LATIN_X_HEIGHT } - { AF_BLUE_STRING_GEORGIAN_NUSKHURI_BOTTOM, 0 } - { AF_BLUE_STRING_GEORGIAN_NUSKHURI_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_GEORGIAN_NUSKHURI_DESCENDER, 0 } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_GLAG - { AF_BLUE_STRING_GLAGOLITIC_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_GLAGOLITIC_CAPITAL_BOTTOM, 0 } - { AF_BLUE_STRING_GLAGOLITIC_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP | - AF_BLUE_PROPERTY_LATIN_X_HEIGHT } - { AF_BLUE_STRING_GLAGOLITIC_SMALL_BOTTOM, 0 } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_GOTH - { AF_BLUE_STRING_GOTHIC_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_GOTHIC_BOTTOM, 0 } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_GREK - { AF_BLUE_STRING_GREEK_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_GREEK_CAPITAL_BOTTOM, 0 } - { AF_BLUE_STRING_GREEK_SMALL_BETA_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_GREEK_SMALL, AF_BLUE_PROPERTY_LATIN_TOP | - AF_BLUE_PROPERTY_LATIN_X_HEIGHT } - { AF_BLUE_STRING_GREEK_SMALL, 0 } - { AF_BLUE_STRING_GREEK_SMALL_DESCENDER, 0 } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_GUJR - { AF_BLUE_STRING_GUJARATI_TOP, AF_BLUE_PROPERTY_LATIN_TOP | - AF_BLUE_PROPERTY_LATIN_X_HEIGHT } - { AF_BLUE_STRING_GUJARATI_BOTTOM, 0 } - { AF_BLUE_STRING_GUJARATI_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_GUJARATI_DESCENDER, 0 } - { AF_BLUE_STRING_GUJARATI_DIGIT_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_GURU - { AF_BLUE_STRING_GURMUKHI_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_GURMUKHI_HEAD, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_GURMUKHI_BASE, AF_BLUE_PROPERTY_LATIN_TOP | - AF_BLUE_PROPERTY_LATIN_NEUTRAL | - AF_BLUE_PROPERTY_LATIN_X_HEIGHT } - { AF_BLUE_STRING_GURMUKHI_BOTTOM, 0 } - { AF_BLUE_STRING_GURMUKHI_DIGIT_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_HEBR - { AF_BLUE_STRING_HEBREW_TOP, AF_BLUE_PROPERTY_LATIN_TOP | - AF_BLUE_PROPERTY_LATIN_LONG } - { AF_BLUE_STRING_HEBREW_BOTTOM, 0 } - { AF_BLUE_STRING_HEBREW_DESCENDER, 0 } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_KNDA - { AF_BLUE_STRING_KANNADA_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_KANNADA_BOTTOM, 0 } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_KALI - { AF_BLUE_STRING_KAYAH_LI_TOP, AF_BLUE_PROPERTY_LATIN_TOP | - AF_BLUE_PROPERTY_LATIN_X_HEIGHT } - { AF_BLUE_STRING_KAYAH_LI_BOTTOM, 0 } - { AF_BLUE_STRING_KAYAH_LI_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_KAYAH_LI_DESCENDER, 0 } - { AF_BLUE_STRING_KAYAH_LI_LARGE_DESCENDER, 0 } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_KHMR - { AF_BLUE_STRING_KHMER_TOP, AF_BLUE_PROPERTY_LATIN_TOP | - AF_BLUE_PROPERTY_LATIN_X_HEIGHT } - { AF_BLUE_STRING_KHMER_SUBSCRIPT_TOP, AF_BLUE_PROPERTY_LATIN_SUB_TOP } - { AF_BLUE_STRING_KHMER_BOTTOM, 0 } - { AF_BLUE_STRING_KHMER_DESCENDER, 0 } - { AF_BLUE_STRING_KHMER_LARGE_DESCENDER, 0 } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_KHMS - { AF_BLUE_STRING_KHMER_SYMBOLS_WAXING_TOP, AF_BLUE_PROPERTY_LATIN_TOP | - AF_BLUE_PROPERTY_LATIN_X_HEIGHT } - { AF_BLUE_STRING_KHMER_SYMBOLS_WANING_BOTTOM, 0 } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_LAO - { AF_BLUE_STRING_LAO_TOP, AF_BLUE_PROPERTY_LATIN_TOP | - AF_BLUE_PROPERTY_LATIN_X_HEIGHT } - { AF_BLUE_STRING_LAO_BOTTOM, 0 } - { AF_BLUE_STRING_LAO_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_LAO_LARGE_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_LAO_DESCENDER, 0 } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_LATN - { AF_BLUE_STRING_LATIN_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_LATIN_CAPITAL_BOTTOM, 0 } - { AF_BLUE_STRING_LATIN_SMALL_F_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_LATIN_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP | - AF_BLUE_PROPERTY_LATIN_X_HEIGHT } - { AF_BLUE_STRING_LATIN_SMALL_BOTTOM, 0 } - { AF_BLUE_STRING_LATIN_SMALL_DESCENDER, 0 } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_LATB - { AF_BLUE_STRING_LATIN_SUBS_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_LATIN_SUBS_CAPITAL_BOTTOM, 0 } - { AF_BLUE_STRING_LATIN_SUBS_SMALL_F_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_LATIN_SUBS_SMALL, AF_BLUE_PROPERTY_LATIN_TOP | - AF_BLUE_PROPERTY_LATIN_X_HEIGHT } - { AF_BLUE_STRING_LATIN_SUBS_SMALL, 0 } - { AF_BLUE_STRING_LATIN_SUBS_SMALL_DESCENDER, 0 } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_LATP - { AF_BLUE_STRING_LATIN_SUPS_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_LATIN_SUPS_CAPITAL_BOTTOM, 0 } - { AF_BLUE_STRING_LATIN_SUPS_SMALL_F_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_LATIN_SUPS_SMALL, AF_BLUE_PROPERTY_LATIN_TOP | - AF_BLUE_PROPERTY_LATIN_X_HEIGHT } - { AF_BLUE_STRING_LATIN_SUPS_SMALL, 0 } - { AF_BLUE_STRING_LATIN_SUPS_SMALL_DESCENDER, 0 } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_LISU - { AF_BLUE_STRING_LISU_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_LISU_BOTTOM, 0 } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_MLYM - { AF_BLUE_STRING_MALAYALAM_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_MALAYALAM_BOTTOM, 0 } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_MEDF - { AF_BLUE_STRING_MEDEFAIDRIN_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_MEDEFAIDRIN_CAPITAL_BOTTOM, 0 } - { AF_BLUE_STRING_MEDEFAIDRIN_SMALL_F_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_MEDEFAIDRIN_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP | - AF_BLUE_PROPERTY_LATIN_X_HEIGHT } - { AF_BLUE_STRING_MEDEFAIDRIN_SMALL_BOTTOM, 0 } - { AF_BLUE_STRING_MEDEFAIDRIN_SMALL_DESCENDER, 0 } - { AF_BLUE_STRING_MEDEFAIDRIN_DIGIT_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_MONG - { AF_BLUE_STRING_MONGOLIAN_TOP_BASE, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_MONGOLIAN_BOTTOM_BASE, 0 } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_MYMR - { AF_BLUE_STRING_MYANMAR_TOP, AF_BLUE_PROPERTY_LATIN_TOP | - AF_BLUE_PROPERTY_LATIN_X_HEIGHT } - { AF_BLUE_STRING_MYANMAR_BOTTOM, 0 } - { AF_BLUE_STRING_MYANMAR_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_MYANMAR_DESCENDER, 0 } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_NKOO - { AF_BLUE_STRING_NKO_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_NKO_BOTTOM, 0 } - { AF_BLUE_STRING_NKO_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP | - AF_BLUE_PROPERTY_LATIN_X_HEIGHT } - { AF_BLUE_STRING_NKO_SMALL_BOTTOM, 0 } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_NONE - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_OLCK - { AF_BLUE_STRING_OL_CHIKI, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_OL_CHIKI, 0 } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_ORKH - { AF_BLUE_STRING_OLD_TURKIC_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_OLD_TURKIC_BOTTOM, 0 } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_OSGE - { AF_BLUE_STRING_OSAGE_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_OSAGE_CAPITAL_BOTTOM, 0 } - { AF_BLUE_STRING_OSAGE_CAPITAL_DESCENDER, 0 } - { AF_BLUE_STRING_OSAGE_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP | - AF_BLUE_PROPERTY_LATIN_X_HEIGHT } - { AF_BLUE_STRING_OSAGE_SMALL_BOTTOM, 0 } - { AF_BLUE_STRING_OSAGE_SMALL_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_OSAGE_SMALL_DESCENDER, 0 } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_OSMA - { AF_BLUE_STRING_OSMANYA_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_OSMANYA_BOTTOM, 0 } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_ROHG - { AF_BLUE_STRING_ROHINGYA_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_ROHINGYA_BOTTOM, 0 } - { AF_BLUE_STRING_ROHINGYA_JOIN, AF_BLUE_PROPERTY_LATIN_NEUTRAL } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_SAUR - { AF_BLUE_STRING_SAURASHTRA_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_SAURASHTRA_BOTTOM, 0 } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_SHAW - { AF_BLUE_STRING_SHAVIAN_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_SHAVIAN_BOTTOM, 0 } - { AF_BLUE_STRING_SHAVIAN_DESCENDER, 0 } - { AF_BLUE_STRING_SHAVIAN_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP | - AF_BLUE_PROPERTY_LATIN_X_HEIGHT } - { AF_BLUE_STRING_SHAVIAN_SMALL_BOTTOM, 0 } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_SINH - { AF_BLUE_STRING_SINHALA_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_SINHALA_BOTTOM, 0 } - { AF_BLUE_STRING_SINHALA_DESCENDER, 0 } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_SUND - { AF_BLUE_STRING_SUNDANESE_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_SUNDANESE_BOTTOM, 0 } - { AF_BLUE_STRING_SUNDANESE_DESCENDER, 0 } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_TAML - { AF_BLUE_STRING_TAMIL_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_TAMIL_BOTTOM, 0 } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_TAVT - { AF_BLUE_STRING_TAI_VIET_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_TAI_VIET_BOTTOM, 0 } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_TELU - { AF_BLUE_STRING_TELUGU_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_TELUGU_BOTTOM, 0 } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_THAI - { AF_BLUE_STRING_THAI_TOP, AF_BLUE_PROPERTY_LATIN_TOP | - AF_BLUE_PROPERTY_LATIN_X_HEIGHT } - { AF_BLUE_STRING_THAI_BOTTOM, 0 } - { AF_BLUE_STRING_THAI_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_THAI_LARGE_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_THAI_DESCENDER, 0 } - { AF_BLUE_STRING_THAI_LARGE_DESCENDER, 0 } - { AF_BLUE_STRING_THAI_DIGIT_TOP, 0 } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_TFNG - { AF_BLUE_STRING_TIFINAGH, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_TIFINAGH, 0 } - { AF_BLUE_STRING_MAX, 0 } - - AF_BLUE_STRINGSET_VAII - { AF_BLUE_STRING_VAI_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_VAI_BOTTOM, 0 } - { AF_BLUE_STRING_MAX, 0 } - -#ifdef AF_CONFIG_OPTION_CJK - - AF_BLUE_STRINGSET_HANI - { AF_BLUE_STRING_CJK_TOP, AF_BLUE_PROPERTY_CJK_TOP } - { AF_BLUE_STRING_CJK_BOTTOM, 0 } -#ifdef AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT - { AF_BLUE_STRING_CJK_LEFT, AF_BLUE_PROPERTY_CJK_HORIZ } - { AF_BLUE_STRING_CJK_RIGHT, AF_BLUE_PROPERTY_CJK_HORIZ | - AF_BLUE_PROPERTY_CJK_RIGHT } -#endif /* AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT */ - { AF_BLUE_STRING_MAX, 0 } - -#endif /* AF_CONFIG_OPTION_CJK */ - - -// END diff --git a/thirdparty/freetype/src/base/ftver.rc b/thirdparty/freetype/src/base/ftver.rc deleted file mode 100644 index eb6090ecc2..0000000000 --- a/thirdparty/freetype/src/base/ftver.rc +++ /dev/null @@ -1,61 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftver.rc */ -/* */ -/* FreeType VERSIONINFO resource for Windows DLLs. */ -/* */ -/* Copyright (C) 2018-2022 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - -#include<windows.h> - -#define FT_VERSION 2,12,1,0 -#define FT_VERSION_STR "2.12.1" - -VS_VERSION_INFO VERSIONINFO -FILEVERSION FT_VERSION -PRODUCTVERSION FT_VERSION -FILEFLAGSMASK VS_FFI_FILEFLAGSMASK -#ifdef _DEBUG -FILEFLAGS VS_FF_DEBUG -#endif -#ifdef DLL_EXPORT -FILETYPE VFT_DLL -#define FT_FILENAME "freetype.dll" -#else -FILETYPE VFT_STATIC_LIB -#define FT_FILENAME "freetype.lib" -#endif -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904E4" - BEGIN - VALUE "CompanyName", "The FreeType Project" - VALUE "FileDescription", "Font Rendering Library" - VALUE "FileVersion", FT_VERSION_STR - VALUE "ProductName", "FreeType" - VALUE "ProductVersion", FT_VERSION_STR - VALUE "LegalCopyright", "\251 2000-2022 The FreeType Project www.freetype.org. All rights reserved." - VALUE "InternalName", "freetype" - VALUE "OriginalFilename", FT_FILENAME - END - END - - BLOCK "VarFileInfo" - BEGIN - /* The following line should only be modified for localized versions. */ - /* It consists of any number of WORD,WORD pairs, with each pair */ - /* describing a "language,codepage" combination supported by the file. */ - VALUE "Translation", 0x409, 1252 - END -END diff --git a/thirdparty/freetype/src/bdf/README b/thirdparty/freetype/src/bdf/README deleted file mode 100644 index d7cb8c14ef..0000000000 --- a/thirdparty/freetype/src/bdf/README +++ /dev/null @@ -1,152 +0,0 @@ - FreeType font driver for BDF fonts - - Francesco Zappa Nardelli - <francesco.zappa.nardelli@ens.fr> - - -Introduction -************ - -BDF (Bitmap Distribution Format) is a bitmap font format defined by Adobe, -which is intended to be easily understood by both humans and computers. -This code implements a BDF driver for the FreeType library, following the -Adobe Specification V 2.2. The specification of the BDF font format is -available from Adobe's web site: - - https://adobe-type-tools.github.io/font-tech-notes/pdfs/5005.BDF_Spec.pdf - -Many good bitmap fonts in bdf format come with XFree86 (www.XFree86.org). -They do not define vertical metrics, because the X Consortium BDF -specification has removed them. - - -Encodings -********* - -[This section is out of date, retained for historical reasons. BDF - properties can be retrieved with `FT_Get_BDF_Property`, character set ID - values with `FT_Get_BDF_Charset_ID`.] - -The variety of encodings that accompanies bdf fonts appears to encompass the -small set defined in freetype.h. On the other hand, two properties that -specify encoding and registry are usually defined in bdf fonts. - -I decided to make these two properties directly accessible, leaving to the -client application the work of interpreting them. For instance: - - - #include FT_INTERNAL_BDF_TYPES_H - - FT_Face face; - BDF_Public_Face bdfface; - - - FT_New_Face( library, ..., &face ); - - bdfface = (BDF_Public_Face)face; - - if ( ( bdfface->charset_registry == "ISO10646" ) && - ( bdfface->charset_encoding == "1" ) ) - [..] - - -Thus the driver always exports `ft_encoding_none' as face->charmap.encoding. -FT_Get_Char_Index's behavior is unmodified, that is, it converts the ULong -value given as argument into the corresponding glyph number. - -If the two properties are not available, Adobe Standard Encoding should be -assumed. - - -Anti-Aliased Bitmaps -******************** - -The driver supports an extension to the BDF format as used in Mark Leisher's -xmbdfed bitmap font editor. Microsoft's SBIT tool expects bitmap fonts in -that format for adding anti-aliased them to TrueType fonts. It introduces a -fourth field to the `SIZE' keyword which gives the bpp value (bits per -pixel) of the glyph data in the font. Possible values are 1 (the default), -2 (four gray levels), 4 (16 gray levels), and 8 (256 gray levels). The -driver returns either a bitmap with 1 bit per pixel or a pixmap with 8bits -per pixel (using 4, 16, and 256 gray levels, respectively). - - -Known problems -************** - -- A font is entirely loaded into memory. Obviously, this is not the Right - Thing(TM). If you have big fonts I suggest you convert them into PCF - format (using the bdftopcf utility): the PCF font drive of FreeType can - perform incremental glyph loading. - -When I have some time, I will implement on-demand glyph parsing. - -- Except for encodings properties, client applications have no visibility of - the PCF_Face object. This means that applications cannot directly access - font tables and must trust FreeType. - -- Currently, glyph names are ignored. - - I plan to give full visibility of the BDF_Face object in an upcoming - revision of the driver, thus implementing also glyph names. - -- As I have never seen a BDF font that defines vertical metrics, vertical - metrics are (parsed and) discarded. If you own a BDF font that defines - vertical metrics, please let me know (I will implement them in 5-10 - minutes). - - -License -******* - -Copyright (C) 2001-2002 by Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -*** Portions of the driver (that is, bdflib.c and bdf.h): - -Copyright 2000 Computing Research Labs, New Mexico State University -Copyright 2001-2002, 2011 Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -THE COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT -OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -Credits -******* - -This driver is based on excellent Mark Leisher's bdf library. If you -find something good in this driver you should probably thank him, not -me. diff --git a/thirdparty/freetype/src/gxvalid/README b/thirdparty/freetype/src/gxvalid/README deleted file mode 100644 index 921b3ac92e..0000000000 --- a/thirdparty/freetype/src/gxvalid/README +++ /dev/null @@ -1,532 +0,0 @@ -gxvalid: TrueType GX validator -============================== - - -1. What is this ---------------- - - `gxvalid' is a module to validate TrueType GX tables: a collection of - additional tables in TrueType font which are used by `QuickDraw GX - Text', Apple Advanced Typography (AAT). In addition, gxvalid can - validates `kern' tables which have been extended for AAT. Like the - otvalid module, gxvalid uses FreeType 2's validator framework - (ftvalid). - - You can link gxvalid with your program; before running your own layout - engine, gxvalid validates a font file. As the result, you can remove - error-checking code from the layout engine. It is also possible to - use gxvalid as a stand-alone font validator; the `ftvalid' test - program included in the ft2demo bundle calls gxvalid internally. - A stand-alone font validator may be useful for font developers. - - This documents documents the following issues. - - - supported TrueType GX tables - - fundamental validation limitations - - permissive error handling of broken GX tables - - `kern' table issue. - - -2. Supported tables -------------------- - - The following GX tables are currently supported. - - bsln - feat - just - kern(*) - lcar - mort - morx - opbd - prop - trak - - The following GX tables are currently unsupported. - - cvar - fdsc - fmtx - fvar - gvar - Zapf - - The following GX tables won't be supported. - - acnt(**) - hsty(***) - - The following undocumented tables in TrueType fonts designed for Apple - platform aren't handled either. - - addg - CVTM - TPNM - umif - - - *) The `kern' validator handles both the classic and the new kern - formats; the former is supported on both Microsoft and Apple - platforms, while the latter is supported on Apple platforms. - - **) `acnt' tables are not supported by currently available Apple font - tools. - - ***) There is one more Apple extension, `hsty', but it is for - Newton-OS, not GX (Newton-OS is a platform by Apple, but it can - use sfnt- housed bitmap fonts only). Therefore, it should be - excluded from `Apple platform' in the context of TrueType. - gxvalid ignores it as Apple font tools do so. - - - We have checked 183 fonts bundled with MacOS 9.1, MacOS 9.2, MacOS - 10.0, MacOS X 10.1, MSIE for MacOS, and AppleWorks 6.0. In addition, - we have checked 67 Dynalab fonts (designed for MacOS) and 189 Ricoh - fonts (designed for Windows and MacOS dual platforms). The number of - fonts including TrueType GX tables are as follows. - - bsln: 76 - feat: 191 - just: 84 - kern: 59 - lcar: 4 - mort: 326 - morx: 19 - opbd: 4 - prop: 114 - trak: 16 - - Dynalab and Ricoh fonts don't have GX tables except of `feat' and - `mort'. - - -3. Fundamental validation limitations -------------------------------------- - - TrueType GX provides layout information to libraries for font - rasterizers and text layout. gxvalid can check whether the layout - data in a font is conformant to the TrueType GX format specified by - Apple. But gxvalid cannot check a how QuickDraw GX/AAT renderer uses - the stored information. - - 3-1. Validation of State Machine activity - ----------------------------------------- - - QuickDraw GX/AAT uses a `State Machine' to provide `stateful' layout - features, and TrueType GX stores the state transition diagram of - this `State Machine' in a `StateTable' data structure. While the - State Machine receives a series of glyph IDs, the State Machine - starts with `start of text' state, walks around various states and - generates various layout information to the renderer, and finally - reaches the `end of text' state. - - gxvalid can check essential errors like: - - - possibility of state transitions to undefined states - - existence of glyph IDs that the State Machine doesn't know how - to handle - - the State Machine cannot compute the layout information from - given diagram - - These errors can be checked within finite steps, and without the - State Machine itself, because these are `expression' errors of state - transition diagram. - - There is no limitation about how long the State Machine walks - around, so validation of the algorithm in the state transition - diagram requires infinite steps, even if we had a State Machine in - gxvalid. Therefore, the following errors and problems cannot be - checked. - - - existence of states which the State Machine never transits to - - the possibility that the State Machine never reaches `end of - text' - - the possibility of stack underflow/overflow in the State Machine - (in ligature and contextual glyph substitutions, the State - Machine can store 16 glyphs onto its stack) - - In addition, gxvalid doesn't check `temporary glyph IDs' used in the - chained State Machines (in `mort' and `morx' tables). If a layout - feature is implemented by a single State Machine, a glyph ID - converted by the State Machine is passed to the glyph renderer, thus - it should not point to an undefined glyph ID. But if a layout - feature is implemented by chained State Machines, a component State - Machine (if it is not the final one) is permitted to generate - undefined glyph IDs for temporary use, because it is handled by next - component State Machine and not by the glyph renderer. To validate - such temporary glyph IDs, gxvalid must stack all undefined glyph IDs - which can occur in the output of the previous State Machine and - search them in the `ClassTable' structure of the current State - Machine. It is too complex to list all possible glyph IDs from the - StateTable, especially from a ligature substitution table. - - 3-2. Validation of relationship between multiple layout features - ---------------------------------------------------------------- - - gxvalid does not validate the relationship between multiple layout - features at all. - - If multiple layout features are defined in TrueType GX tables, - possible interactions, overrides, and conflicts between layout - features are implicitly given in the font too. For example, there - are several predefined spacing control features: - - - Text Spacing (Proportional/Monospace/Half-width/Normal) - - Number Spacing (Monospaced-numbers/Proportional-numbers) - - Kana Spacing (Full-width/Proportional) - - Ideographic Spacing (Full-width/Proportional) - - CJK Roman Spacing (Half-width/Proportional/Default-roman - /Full-width-roman/Proportional) - - If all layout features are independently managed, we can activate - inconsistent typographic rules like `Text Spacing=Monospace' and - `Ideographic Spacing=Proportional' at the same time. - - The combinations of layout features is managed by a 32bit integer - (one bit each for selector setting), so we can define relationships - between up to 32 features, theoretically. But if one feature - setting affects another feature setting, we need typographic - priority rules to validate the relationship. Unfortunately, the - TrueType GX format specification does not give such information even - for predefined features. - - -4. Permissive error handling of broken GX tables ------------------------------------------------- - - When Apple's font rendering system finds an inconsistency, like a - specification violation or an unspecified value in a TrueType GX - table, it does not always return error. In most cases, the rendering - engine silently ignores such wrong values or even whole tables. In - fact, MacOS is shipped with fonts including broken GX/AAT tables, but - no harmful effects due to `officially broken' fonts are observed by - end-users. - - gxvalid is designed to continue the validation process as long as - possible. When gxvalid find wrong values, gxvalid warns it at least, - and takes a fallback procedure if possible. The fallback procedure - depends on the debug level. - - We used the following three tools to investigate Apple's error handling. - - - FontValidator (for MacOS 8.5 - 9.2) resource fork font - - ftxvalidator (for MacOS X 10.1 -) dfont or naked-sfnt - - ftxdumperfuser (for MacOS X 10.1 -) dfont or naked-sfnt - - However, all tests were done on a PowerPC based Macintosh; at present, - we have not checked those tools on a m68k-based Macintosh. - - In total, we checked 183 fonts bundled to MacOS 9.1, MacOS 9.2, MacOS - 10.0, MacOS X 10.1, MSIE for MacOS, and AppleWorks 6.0. These fonts - are distributed officially, but many broken GX/AAT tables were found - by Apple's font tools. In the following, we list typical violation of - the GX specification, in fonts officially distributed with those Apple - systems. - - 4-1. broken BinSrchHeader (19/183) - ---------------------------------- - - `BinSrchHeader' is a header of a data array for m68k platforms to - access memory efficiently. Although there are only two independent - parameters for real (`unitSize' and `nUnits'), BinSrchHeader has - three additional parameters which can be calculated from `unitSize' - and `nUnits', for fast setup. Apple font tools ignore them - silently, so gxvalid warns if it finds and inconsistency, and always - continues validation. The additional parameters are ignored - regardless of the consistency. - - 19 fonts include such inconsistencies; all breaks are in the - BinSrchHeader structure of the `kern' table. - - 4-2. too-short LookupTable (5/183) - ---------------------------------- - - LookupTable format 0 is a simple array to get a value from a given - GID (glyph ID); the index of this array is a GID too. Therefore, - the length of the array is expected to be same as the maximum GID - value defined in the `maxp' table, but there are some fonts whose - LookupTable format 0 is too short to cover all GIDs. FontValidator - ignores this error silently, ftxvalidator and ftxdumperfuser both - warn and continue. Similar problems are found in format 3 subtables - of `kern'. gxvalid warns always and abort if the validation level - is set to FT_VALIDATE_PARANOID. - - 5 fonts include too-short kern format 0 subtables. - 1 font includes too-short kern format 3 subtable. - - 4-3. broken LookupTable format 2 (1/183) - ---------------------------------------- - - LookupTable format 2, subformat 4 covers the GID space by a - collection of segments which are specified by `firstGlyph' and - `lastGlyph'. Some fonts store `firstGlyph' and `lastGlyph' in - reverse order, so the segment specification is broken. Apple font - tools ignore this error silently; a broken segment is ignored as if - it did not exist. gxvalid warns and normalize the segment at - FT_VALIDATE_DEFAULT, or ignore the segment at FT_VALIDATE_TIGHT, or - abort at FT_VALIDATE_PARANOID. - - 1 font includes broken LookupTable format 2, in the `just' table. - - *) It seems that all fonts manufactured by ITC for AppleWorks have - this error. - - 4-4. bad bracketing in glyph property (14/183) - ---------------------------------------------- - - GX/AAT defines a `bracketing' property of the glyphs in the `prop' - table, to control layout features of strings enclosed inside and - outside of brackets. Some fonts give inappropriate bracket - properties to glyphs. Apple font tools warn about this error; - gxvalid warns too and aborts at FT_VALIDATE_PARANOID. - - 14 fonts include wrong bracket properties. - - - 4-5. invalid feature number (117/183) - ------------------------------------- - - The GX/AAT extension can include 255 different layout features, - but popular layout features are predefined (see - https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html). - Some fonts include feature numbers which are incompatible with the - predefined feature registry. - - In our survey, there are 140 fonts including `feat' table. - - a) 67 fonts use a feature number which should not be used. - b) 117 fonts set the wrong feature range (nSetting). This is mostly - found in the `mort' and `morx' tables. - - Apple font tools give no warning, although they cannot recognize - what the feature is. At FT_VALIDATE_DEFAULT, gxvalid warns but - continues in both cases (a, b). At FT_VALIDATE_TIGHT, gxvalid warns - and aborts for (a), but continues for (b). At FT_VALIDATE_PARANOID, - gxvalid warns and aborts in both cases (a, b). - - 4-6. invalid prop version (10/183) - ---------------------------------- - - As most TrueType GX tables, the `prop' table must start with a 32bit - version identifier: 0x00010000, 0x00020000 or 0x00030000. But some - fonts store nonsense binary data instead. When Apple font tools - find them, they abort the processing immediately, and the data which - follows is unhandled. gxvalid does the same. - - 10 fonts include broken `prop' version. - - All of these fonts are classic TrueType fonts for the Japanese - script, manufactured by Apple. - - 4-7. unknown resource name (2/183) - ------------------------------------ - - NOTE: THIS IS NOT A TRUETYPE GX ERROR. - - If a TrueType font is stored in the resource fork or in dfont - format, the data must be tagged as `sfnt' in the resource fork index - to invoke TrueType font handler for the data. But the TrueType font - data in `Keyboard.dfont' is tagged as `kbd', and that in - `LastResort.dfont' is tagged as `lst'. Apple font tools can detect - that the data is in TrueType format and successfully validate them. - Maybe this is possible because they are known to be dfont. The - current implementation of the resource fork driver of FreeType - cannot do that, thus gxvalid cannot validate them. - - 2 fonts use an unknown tag for the TrueType font resource. - -5. `kern' table issues ----------------------- - - In common terminology of TrueType, `kern' is classified as a basic and - platform-independent table. But there are Apple extensions of `kern', - and there is an extension which requires a GX state machine for - contextual kerning. Therefore, gxvalid includes a special validator - for `kern' tables. Unfortunately, there is no exact algorithm to - check Apple's extension, so gxvalid includes a heuristic algorithm to - find the proper validation routines for all possible data formats, - including the data format for Microsoft. By calling - classic_kern_validate() instead of gxv_validate(), you can specify the - `kern' format explicitly. However, current FreeType2 uses Microsoft - `kern' format only, others are ignored (and should be handled in a - library one level higher than FreeType). - - 5-1. History - ------------ - - The original 16bit version of `kern' was designed by Apple in the - pre-GX era, and it was also approved by Microsoft. Afterwards, - Apple designed a new 32bit version of the `kern' table. According - to the documentation, the difference between the 16bit and 32bit - version is only the size of variables in the `kern' header. In the - following, we call the original 16bit version as `classic', and - 32bit version as `new'. - - 5-2. Versions and dialects which should be differentiated - --------------------------------------------------------- - - The `kern' table consists of a table header and several subtables. - The version number which identifies a `classic' or a `new' version - is explicitly written in the table header, but there are - undocumented differences between Microsoft's and Apple's formats. - It is called a `dialect' in the following. There are three cases - which should be handled: the new Apple-dialect, the classic - Apple-dialect, and the classic Microsoft-dialect. An analysis of - the formats and the auto detection algorithm of gxvalid is described - in the following. - - 5-2-1. Version detection: classic and new kern - ---------------------------------------------- - - According to Apple TrueType specification, there are only two - differences between the classic and the new: - - - The `kern' table header starts with the version number. - The classic version starts with 0x0000 (16bit), - the new version starts with 0x00010000 (32bit). - - - In the `kern' table header, the number of subtables follows - the version number. - In the classic version, it is stored as a 16bit value. - In the new version, it is stored as a 32bit value. - - From Apple font tool's output (DumpKERN is also tested in addition - to the three Apple font tools in above), there is another - undocumented difference. In the new version, the subtable header - includes a 16bit variable named `tupleIndex' which does not exist - in the classic version. - - The new version can store all subtable formats (0, 1, 2, and 3), - but the Apple TrueType specification does not mention the subtable - formats available in the classic version. - - 5-2-2. Available subtable formats in classic version - ---------------------------------------------------- - - Although the Apple TrueType specification recommends to use the - classic version in the case if the font is designed for both the - Apple and Microsoft platforms, it does not document the available - subtable formats in the classic version. - - According to the Microsoft TrueType specification, the subtable - format assured for Windows and OS/2 support is only subtable - format 0. The Microsoft TrueType specification also describes - subtable format 2, but does not mention which platforms support - it. Subtable formats 1, 3, and higher are documented as reserved - for future use. Therefore, the classic version can store subtable - formats 0 and 2, at least. `ttfdump.exe', a font tool provided by - Microsoft, ignores the subtable format written in the subtable - header, and parses the table as if all subtables are in format 0. - - `kern' subtable format 1 uses a StateTable, so it cannot be - utilized without a GX State Machine. Therefore, it is reasonable - to assume that format 1 (and 3) were introduced after Apple had - introduced GX and moved to the new 32bit version. - - 5-2-3. Apple and Microsoft dialects - ----------------------------------- - - The `kern' subtable has a 16bit `coverage' field to describe - kerning attributes, but bit interpretations by Apple and Microsoft - are different: For example, Apple uses bits 0-7 to identify the - subtable, while Microsoft uses bits 8-15. - - In addition, due to the output of DumpKERN and FontValidator, - Apple's bit interpretations of coverage in classic and new version - are incompatible also. In summary, there are three dialects: - classic Apple dialect, classic Microsoft dialect, and new Apple - dialect. The classic Microsoft dialect and the new Apple dialect - are documented by each vendors' TrueType font specification, but - the documentation for classic Apple dialect is not available. - - For example, in the new Apple dialect, bit 15 is documented as - `set to 1 if the kerning is vertical'. On the other hand, in - classic Microsoft dialect, bit 1 is documented as `set to 1 if the - kerning is horizontal'. From the outputs of DumpKERN and - FontValidator, classic Apple dialect recognizes 15 as `set to 1 - when the kerning is horizontal'. From the results of similar - experiments, classic Apple dialect seems to be the Endian reverse - of the classic Microsoft dialect. - - As a conclusion it must be noted that no font tool can identify - classic Apple dialect or classic Microsoft dialect automatically. - - 5-2-4. gxvalid auto dialect detection algorithm - ----------------------------------------------- - - The first 16 bits of the `kern' table are enough to identify the - version: - - - if the first 16 bits are 0x0000, the `kern' table is in - classic Apple dialect or classic Microsoft dialect - - if the first 16 bits are 0x0001, and next 16 bits are 0x0000, - the kern table is in new Apple dialect. - - If the `kern' table is a classic one, the 16bit `coverage' field - is checked next. Firstly, the coverage bits are decoded for the - classic Apple dialect using the following bit masks (this is based - on DumpKERN output): - - 0x8000: 1=horizontal, 0=vertical - 0x4000: not used - 0x2000: 1=cross-stream, 0=normal - 0x1FF0: reserved - 0x000F: subtable format - - If any of reserved bits are set or the subtable bits is - interpreted as format 1 or 3, we take it as `impossible in classic - Apple dialect' and retry, using the classic Microsoft dialect. - - The most popular coverage in new Apple-dialect: 0x8000, - The most popular coverage in classic Apple-dialect: 0x0000, - The most popular coverage in classic Microsoft dialect: 0x0001. - - 5-3. Tested fonts - ----------------- - - We checked 59 fonts bundled with MacOS and 38 fonts bundled with - Windows, where all font include a `kern' table. - - - fonts bundled with MacOS - * new Apple dialect - format 0: 18 - format 2: 1 - format 3: 1 - * classic Apple dialect - format 0: 14 - * classic Microsoft dialect - format 0: 15 - - - fonts bundled with Windows - * classic Microsoft dialect - format 0: 38 - - It looks strange that classic Microsoft-dialect fonts are bundled to - MacOS: they come from MSIE for MacOS, except of MarkerFelt.dfont. - - - ACKNOWLEDGEMENT - --------------- - - Some parts of gxvalid are derived from both the `gxlayout' module and - the `otvalid' module. Development of gxlayout was supported by the - Information-technology Promotion Agency(IPA), Japan. - - The detailed analysis of undefined glyph ID utilization in `mort' and - `morx' tables is provided by George Williams. - ------------------------------------------------------------------------- - -Copyright (C) 2004-2022 by -suzuki toshiya, Masatake YAMATO, Red hat K.K., -David Turner, Robert Wilhelm, and Werner Lemberg. - -This file is part of the FreeType project, and may only be used, -modified, and distributed under the terms of the FreeType project -license, LICENSE.TXT. By continuing to use, modify, or distribute this -file you indicate that you have read the license and understand and -accept it fully. - - ---- end of README --- diff --git a/thirdparty/freetype/src/gzip/README.freetype b/thirdparty/freetype/src/gzip/README.freetype deleted file mode 100644 index 493b807198..0000000000 --- a/thirdparty/freetype/src/gzip/README.freetype +++ /dev/null @@ -1,22 +0,0 @@ -Name: zlib -Short Name: zlib -URL: http://zlib.net/ -Version: 1.2.12 -License: see `zlib.h` - -Description: -"A massively spiffy yet delicately unobtrusive compression library." - -'zlib' is a free, general-purpose, legally unencumbered lossless -data-compression library. 'zlib' implements the "deflate" compression -algorithm described by RFC 1951, which combines the LZ77 (Lempel-Ziv) -algorithm with Huffman coding. zlib also implements the zlib (RFC 1950) and -gzip (RFC 1952) wrapper formats. - -Local Modifications: -The files in this directory have been prepared as follows. - - - Take the unmodified source code files from the zlib distribution that are - included by `ftgzip.c`. - - Run zlib's `zlib2ansi` script on all `.c` files. - - Apply the diff file(s) in the `patches` folder. diff --git a/thirdparty/freetype/src/gzip/patches/freetype-zlib.diff b/thirdparty/freetype/src/gzip/patches/freetype-zlib.diff deleted file mode 100644 index 20d84293f3..0000000000 --- a/thirdparty/freetype/src/gzip/patches/freetype-zlib.diff +++ /dev/null @@ -1,372 +0,0 @@ -[zlib] Fix zlib sources for compilation with FreeType - -We must ensure that they do not issue compiler errors or warnings when they -are compiled as part of `src/gzip/ftgzip.c`. - -* src/gzip/adler32.c: Do not define unused functions when `Z_FREETYPE` -is set. - -* src/gzip/gzguts.h (COPY): Rename to... -(COPY__): ... this since `COPY` and `COPY_` conflict with enum values, -which have the same name in `zlib.h`. - -* src/gzip/inflate.c, src/gzip/adler32.c: Omit unused function -declarations when `Z_FREETYPE` is defined. - -* src/gzip/zlib.h: Include `ftzconf.h` instead of `zconf.h` to avoid -conflicts with system-installed headers. -Omit unused function declarations when `Z_FREETYPE` is defined. - -* src/gzip/zutil.h: Use `ft_memxxx` functions instead of `memxxx`. -Omit unused function declarations when `Z_FREETYPE` is defined. - -* src/gzip/inflate.h, src/gzip/inftrees.h: Add header guard macros to -prevent compiler errors. - -diff --git a/src/gzip/adler32.c b/src/gzip/adler32.c -index be5e8a247..aa032e1dd 100644 ---- a/src/gzip/adler32.c -+++ b/src/gzip/adler32.c -@@ -7,7 +7,9 @@ - - #include "zutil.h" - -+#ifndef Z_FREETYPE - local uLong adler32_combine_ OF((uLong adler1, uLong adler2, z_off64_t len2)); -+#endif - - #define BASE 65521U /* largest prime smaller than 65536 */ - #define NMAX 5552 -@@ -139,6 +141,8 @@ uLong ZEXPORT adler32( - return adler32_z(adler, buf, len); - } - -+#ifndef Z_FREETYPE -+ - /* ========================================================================= */ - local uLong adler32_combine_( - uLong adler1, -@@ -184,3 +188,5 @@ uLong ZEXPORT adler32_combine64( - { - return adler32_combine_(adler1, adler2, len2); - } -+ -+#endif /* !Z_FREETYPE */ -diff --git a/src/gzip/gzguts.h b/src/gzip/gzguts.h -index 57faf3716..4f09a52a7 100644 ---- a/src/gzip/gzguts.h -+++ b/src/gzip/gzguts.h -@@ -163,7 +163,7 @@ - - /* values for gz_state how */ - #define LOOK 0 /* look for a gzip header */ --#define COPY 1 /* copy input directly */ -+#define COPY__ 1 /* copy input directly */ - #define GZIP 2 /* decompress a gzip stream */ - - /* internal gzip file state data structure */ -diff --git a/src/gzip/inflate.c b/src/gzip/inflate.c -index 4375557b4..5bf5b815e 100644 ---- a/src/gzip/inflate.c -+++ b/src/gzip/inflate.c -@@ -99,8 +99,10 @@ local int updatewindow OF((z_streamp strm, const unsigned char FAR *end, - #ifdef BUILDFIXED - void makefixed OF((void)); - #endif -+#ifndef Z_FREETYPE - local unsigned syncsearch OF((unsigned FAR *have, const unsigned char FAR *buf, - unsigned len)); -+#endif - - local int inflateStateCheck( - z_streamp strm) -@@ -245,6 +247,8 @@ int ZEXPORT inflateInit_( - return inflateInit2_(strm, DEF_WBITS, version, stream_size); - } - -+#ifndef Z_FREETYPE -+ - int ZEXPORT inflatePrime( - z_streamp strm, - int bits, -@@ -266,6 +270,8 @@ int ZEXPORT inflatePrime( - return Z_OK; - } - -+#endif /* !Z_FREETYPE */ -+ - /* - Return state with length and distance decoding tables and index sizes set to - fixed code decoding. Normally this returns fixed tables from inffixed.h. -@@ -1312,6 +1318,8 @@ int ZEXPORT inflateEnd( - return Z_OK; - } - -+#ifndef Z_FREETYPE -+ - int ZEXPORT inflateGetDictionary( - z_streamp strm, - Bytef *dictionary, -@@ -1471,6 +1479,8 @@ int ZEXPORT inflateSync( - return Z_OK; - } - -+#endif /* !Z_FREETYPE */ -+ - /* - Returns true if inflate is currently at the end of a block generated by - Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP -@@ -1489,6 +1499,8 @@ int ZEXPORT inflateSyncPoint( - return state->mode == STORED && state->bits == 0; - } - -+#ifndef Z_FREETYPE -+ - int ZEXPORT inflateCopy( - z_streamp dest, - z_streamp source) -@@ -1536,6 +1548,8 @@ int ZEXPORT inflateCopy( - return Z_OK; - } - -+#endif /* !Z_FREETYPE */ -+ - int ZEXPORT inflateUndermine( - z_streamp strm, - int subvert) -@@ -1569,6 +1583,8 @@ int ZEXPORT inflateValidate( - return Z_OK; - } - -+#ifndef Z_FREETYPE -+ - long ZEXPORT inflateMark( - z_streamp strm) - { -@@ -1590,3 +1606,5 @@ unsigned long ZEXPORT inflateCodesUsed( - state = (struct inflate_state FAR *)strm->state; - return (unsigned long)(state->next - state->codes); - } -+ -+#endif /* !Z_FREETYPE */ -diff --git a/src/gzip/inflate.h b/src/gzip/inflate.h -index f127b6b1f..c6f5a52e1 100644 ---- a/src/gzip/inflate.h -+++ b/src/gzip/inflate.h -@@ -3,6 +3,9 @@ - * For conditions of distribution and use, see copyright notice in zlib.h - */ - -+#ifndef INFLATE_H -+#define INFLATE_H -+ - /* WARNING: this file should *not* be used by applications. It is - part of the implementation of the compression library and is - subject to change. Applications should only use zlib.h. -@@ -124,3 +127,5 @@ struct inflate_state { - int back; /* bits back of last unprocessed length/lit */ - unsigned was; /* initial length of match */ - }; -+ -+#endif /* INFLATE_H */ -diff --git a/src/gzip/inftrees.h b/src/gzip/inftrees.h -index baa53a0b1..c94eb78b5 100644 ---- a/src/gzip/inftrees.h -+++ b/src/gzip/inftrees.h -@@ -3,6 +3,9 @@ - * For conditions of distribution and use, see copyright notice in zlib.h - */ - -+#ifndef INFTREES_H -+#define INFTREES_H -+ - /* WARNING: this file should *not* be used by applications. It is - part of the implementation of the compression library and is - subject to change. Applications should only use zlib.h. -@@ -60,3 +63,5 @@ typedef enum { - int ZLIB_INTERNAL inflate_table OF((codetype type, unsigned short FAR *lens, - unsigned codes, code FAR * FAR *table, - unsigned FAR *bits, unsigned short FAR *work)); -+ -+#endif /* INFTREES_H_ */ -diff --git a/src/gzip/zlib.h b/src/gzip/zlib.h -index 4a98e38bf..d760140c2 100644 ---- a/src/gzip/zlib.h -+++ b/src/gzip/zlib.h -@@ -31,7 +31,7 @@ - #ifndef ZLIB_H - #define ZLIB_H - --#include "zconf.h" -+#include "ftzconf.h" - - #ifdef __cplusplus - extern "C" { -@@ -211,6 +211,8 @@ typedef gz_header FAR *gz_headerp; - - #define Z_NULL 0 /* for initializing zalloc, zfree, opaque */ - -+#ifndef Z_FREETYPE -+ - #define zlib_version zlibVersion() - /* for compatibility with versions < 1.0.2 */ - -@@ -246,7 +248,6 @@ ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level)); - this will be done by deflate(). - */ - -- - ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); - /* - deflate compresses as much data as possible, and stops when the input -@@ -373,6 +374,7 @@ ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm)); - deallocated). - */ - -+#endif /* !Z_FREETYPE */ - - /* - ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm)); -@@ -534,6 +536,8 @@ ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm)); - The following functions are needed only in some special applications. - */ - -+#ifndef Z_FREETYPE -+ - /* - ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm, - int level, -@@ -956,6 +960,8 @@ ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest, - destination. - */ - -+#endif /* !Z_FREETYPE */ -+ - ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm)); - /* - This function is equivalent to inflateEnd followed by inflateInit, -@@ -980,6 +986,8 @@ ZEXTERN int ZEXPORT inflateReset2 OF((z_streamp strm, - the windowBits parameter is invalid. - */ - -+#ifndef Z_FREETYPE -+ - ZEXTERN int ZEXPORT inflatePrime OF((z_streamp strm, - int bits, - int value)); -@@ -1069,6 +1077,8 @@ ZEXTERN int ZEXPORT inflateGetHeader OF((z_streamp strm, - stream state was inconsistent. - */ - -+#endif /* !Z_FREETYPE */ -+ - /* - ZEXTERN int ZEXPORT inflateBackInit OF((z_streamp strm, int windowBits, - unsigned char FAR *window)); -@@ -1095,6 +1105,8 @@ typedef unsigned (*in_func) OF((void FAR *, - z_const unsigned char FAR * FAR *)); - typedef int (*out_func) OF((void FAR *, unsigned char FAR *, unsigned)); - -+#ifndef Z_FREETYPE -+ - ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm, - in_func in, void FAR *in_desc, - out_func out, void FAR *out_desc)); -@@ -1214,6 +1226,8 @@ ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void)); - 27-31: 0 (reserved) - */ - -+#endif /* !Z_FREETYPE */ -+ - #ifndef Z_SOLO - - /* utility functions */ -@@ -1742,6 +1756,8 @@ ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); - if (crc != original_crc) error(); - */ - -+#ifndef Z_FREETYPE -+ - ZEXTERN uLong ZEXPORT crc32_z OF((uLong crc, const Bytef *buf, - z_size_t len)); - /* -@@ -1822,6 +1838,19 @@ ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits, - ZLIB_VERSION, (int)sizeof(z_stream)) - #endif - -+#else /* Z_FREETYPE */ -+ -+ -+ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int windowBits, -+ const char *version, int stream_size)); -+ -+# define inflateInit2(strm, windowBits) \ -+ inflateInit2_((strm), (windowBits), ZLIB_VERSION, \ -+ (int)sizeof(z_stream)) -+ -+#endif /* Z_FREETYPE */ -+ -+ - #ifndef Z_SOLO - - /* gzgetc() macro and its supporting function and exposed data structure. Note -@@ -1901,13 +1930,16 @@ ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file)); /* backward compatibility */ - - #else /* Z_SOLO */ - -+#ifndef Z_FREETYPE - ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t)); - ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t)); - ZEXTERN uLong ZEXPORT crc32_combine_gen OF((z_off_t)); -+#endif - - #endif /* !Z_SOLO */ - - /* undocumented functions */ -+#ifndef Z_FREETYPE - ZEXTERN const char * ZEXPORT zError OF((int)); - ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp)); - ZEXTERN const z_crc_t FAR * ZEXPORT get_crc_table OF((void)); -@@ -1927,6 +1959,7 @@ ZEXTERN int ZEXPORTVA gzvprintf Z_ARG((gzFile file, - va_list va)); - # endif - #endif -+#endif /* !Z_FREETYPE */ - - #ifdef __cplusplus - } -diff --git a/src/gzip/zutil.h b/src/gzip/zutil.h -index d9a20ae1b..14f0f1a85 100644 ---- a/src/gzip/zutil.h -+++ b/src/gzip/zutil.h -@@ -188,6 +188,8 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ - #pragma warn -8066 - #endif - -+#ifndef Z_FREETYPE -+ - /* provide prototypes for these when building zlib without LFS */ - #if !defined(_WIN32) && \ - (!defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0) -@@ -195,6 +197,8 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ - ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t)); - #endif - -+#endif /* !Z_FREETYPE */ -+ - /* common defaults */ - - #ifndef OS_CODE -@@ -226,9 +230,9 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ - # define zmemcmp _fmemcmp - # define zmemzero(dest, len) _fmemset(dest, 0, len) - # else --# define zmemcpy memcpy --# define zmemcmp memcmp --# define zmemzero(dest, len) memset(dest, 0, len) -+# define zmemcpy ft_memcpy -+# define zmemcmp ft_memcmp -+# define zmemzero(dest, len) ft_memset(dest, 0, len) - # endif - #else - void ZLIB_INTERNAL zmemcpy OF((Bytef* dest, const Bytef* source, uInt len)); diff --git a/thirdparty/freetype/src/pcf/README b/thirdparty/freetype/src/pcf/README deleted file mode 100644 index 09ea970eda..0000000000 --- a/thirdparty/freetype/src/pcf/README +++ /dev/null @@ -1,96 +0,0 @@ - FreeType font driver for PCF fonts - - Francesco Zappa Nardelli - <francesco.zappa.nardelli@ens.fr> - - -Introduction -************ - -PCF (Portable Compiled Format) is a binary bitmap font format, largely used -in X world. This code implements a PCF driver for the FreeType library. -Glyph images are loaded into memory only on demand, thus leading to a small -memory footprint. - -Information on the PCF font format can only be worked out from -`pcfread.c', and `pcfwrite.c', to be found, for instance, in the XFree86 -(www.xfree86.org) source tree (xc/lib/font/bitmap/). - -Many good bitmap fonts in bdf format come with XFree86: they can be -compiled into the pcf format using the `bdftopcf' utility. - - -Supported hardware -****************** - -The driver has been tested on linux/x86 and sunos5.5/sparc. In both -cases the compiler was gcc. When back in Paris, I will test it also -on linux/alpha. - - -Encodings -********* - -Use `FT_Get_BDF_Charset_ID' to access the encoding and registry. - -The driver always exports `ft_encoding_none' as face->charmap.encoding. -FT_Get_Char_Index() behavior is unmodified, that is, it converts the ULong -value given as argument into the corresponding glyph number. - - -Known problems -************** - -- dealing explicitly with encodings breaks the uniformity of FreeType 2 - API. - -- except for encodings properties, client applications have no - visibility of the PCF_Face object. This means that applications - cannot directly access font tables and are obliged to trust - FreeType. - -- currently, glyph names and ink_metrics are ignored. - -I plan to give full visibility of the PCF_Face object in the next -release of the driver, thus implementing also glyph names and -ink_metrics. - -- height is defined as (ascent - descent). Is this correct? - -- if unable to read size information from the font, PCF_Init_Face - sets available_size->width and available_size->height to 12. - -- too many english grammar errors in the readme file :-( - - -License -******* - -Copyright (C) 2000 by Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -Credits -******* - -Keith Packard wrote the pcf driver found in XFree86. His work is at -the same time the specification and the sample implementation of the -PCF format. Undoubtedly, this driver is inspired from his work. diff --git a/thirdparty/freetype/src/psnames/rules.mk b/thirdparty/freetype/src/psnames/rules.mk deleted file mode 100644 index 3768e2f1d8..0000000000 --- a/thirdparty/freetype/src/psnames/rules.mk +++ /dev/null @@ -1,73 +0,0 @@ -# -# FreeType 2 psnames driver configuration rules -# - - -# Copyright (C) 1996-2022 by -# David Turner, Robert Wilhelm, and Werner Lemberg. -# -# This file is part of the FreeType project, and may only be used, modified, -# and distributed under the terms of the FreeType project license, -# LICENSE.TXT. By continuing to use, modify, or distribute this file you -# indicate that you have read the license and understand and accept it -# fully. - - -# psnames driver directory -# -PSNAMES_DIR := $(SRC_DIR)/psnames - - -# compilation flags for the driver -# -PSNAMES_COMPILE := $(CC) $(ANSIFLAGS) \ - $I$(subst /,$(COMPILER_SEP),$(PSNAMES_DIR)) \ - $(INCLUDE_FLAGS) \ - $(FT_CFLAGS) - - -# psnames driver sources (i.e., C files) -# -PSNAMES_DRV_SRC := $(PSNAMES_DIR)/psmodule.c - - -# psnames driver headers -# -PSNAMES_DRV_H := $(PSNAMES_DRV_SRC:%.c=%.h) \ - $(PSNAMES_DIR)/psnamerr.h \ - $(PSNAMES_DIR)/pstables.h - - -# psnames driver object(s) -# -# PSNAMES_DRV_OBJ_M is used during `multi' builds -# PSNAMES_DRV_OBJ_S is used during `single' builds -# -PSNAMES_DRV_OBJ_M := $(PSNAMES_DRV_SRC:$(PSNAMES_DIR)/%.c=$(OBJ_DIR)/%.$O) -PSNAMES_DRV_OBJ_S := $(OBJ_DIR)/psnames.$O - -# psnames driver source file for single build -# -PSNAMES_DRV_SRC_S := $(PSNAMES_DIR)/psnames.c - - -# psnames driver - single object -# -$(PSNAMES_DRV_OBJ_S): $(PSNAMES_DRV_SRC_S) $(PSNAMES_DRV_SRC) \ - $(FREETYPE_H) $(PSNAMES_DRV_H) - $(PSNAMES_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(PSNAMES_DRV_SRC_S)) - - -# psnames driver - multiple objects -# -$(OBJ_DIR)/%.$O: $(PSNAMES_DIR)/%.c $(FREETYPE_H) $(PSNAMES_DRV_H) - $(PSNAMES_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<) - - -# update main driver object lists -# -DRV_OBJS_S += $(PSNAMES_DRV_OBJ_S) -DRV_OBJS_M += $(PSNAMES_DRV_OBJ_M) - - -# EOF diff --git a/thirdparty/freetype/src/raster/module.mk b/thirdparty/freetype/src/raster/module.mk deleted file mode 100644 index b56a4902ba..0000000000 --- a/thirdparty/freetype/src/raster/module.mk +++ /dev/null @@ -1,23 +0,0 @@ -# -# FreeType 2 renderer module definition -# - - -# Copyright (C) 1996-2022 by -# David Turner, Robert Wilhelm, and Werner Lemberg. -# -# This file is part of the FreeType project, and may only be used, modified, -# and distributed under the terms of the FreeType project license, -# LICENSE.TXT. By continuing to use, modify, or distribute this file you -# indicate that you have read the license and understand and accept it -# fully. - - -FTMODULE_H_COMMANDS += RASTER_MODULE - -define RASTER_MODULE -$(OPEN_DRIVER) FT_Renderer_Class, ft_raster1_renderer_class $(CLOSE_DRIVER) -$(ECHO_DRIVER)raster $(ECHO_DRIVER_DESC)monochrome bitmap renderer$(ECHO_DRIVER_DONE) -endef - -# EOF diff --git a/thirdparty/meshoptimizer/allocator.cpp b/thirdparty/meshoptimizer/allocator.cpp index da7cc540b2..072e8e51ac 100644 --- a/thirdparty/meshoptimizer/allocator.cpp +++ b/thirdparty/meshoptimizer/allocator.cpp @@ -1,7 +1,7 @@ // This file is part of meshoptimizer library; see meshoptimizer.h for version/license details #include "meshoptimizer.h" -void meshopt_setAllocator(void* (*allocate)(size_t), void (*deallocate)(void*)) +void meshopt_setAllocator(void* (MESHOPTIMIZER_ALLOC_CALLCONV *allocate)(size_t), void (MESHOPTIMIZER_ALLOC_CALLCONV *deallocate)(void*)) { meshopt_Allocator::Storage::allocate = allocate; meshopt_Allocator::Storage::deallocate = deallocate; diff --git a/thirdparty/meshoptimizer/meshoptimizer.h b/thirdparty/meshoptimizer/meshoptimizer.h index a420eb1098..463fad29da 100644 --- a/thirdparty/meshoptimizer/meshoptimizer.h +++ b/thirdparty/meshoptimizer/meshoptimizer.h @@ -1,5 +1,5 @@ /** - * meshoptimizer - version 0.16 + * meshoptimizer - version 0.17 * * Copyright (C) 2016-2021, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com) * Report bugs and download new versions at https://github.com/zeux/meshoptimizer @@ -12,13 +12,22 @@ #include <stddef.h> /* Version macro; major * 1000 + minor * 10 + patch */ -#define MESHOPTIMIZER_VERSION 160 /* 0.16 */ +#define MESHOPTIMIZER_VERSION 170 /* 0.17 */ /* If no API is defined, assume default */ #ifndef MESHOPTIMIZER_API #define MESHOPTIMIZER_API #endif +/* Set the calling-convention for alloc/dealloc function pointers */ +#ifndef MESHOPTIMIZER_ALLOC_CALLCONV +#ifdef _MSC_VER +#define MESHOPTIMIZER_ALLOC_CALLCONV __cdecl +#else +#define MESHOPTIMIZER_ALLOC_CALLCONV +#endif +#endif + /* Experimental APIs have unstable interface and might have implementation that's not fully tested or optimized */ #define MESHOPTIMIZER_EXPERIMENTAL MESHOPTIMIZER_API @@ -108,7 +117,7 @@ MESHOPTIMIZER_API void meshopt_generateShadowIndexBufferMulti(unsigned int* dest * destination must contain enough space for the resulting index buffer (index_count*2 elements) * vertex_positions should have float3 position in the first 12 bytes of each vertex - similar to glVertexPointer */ -MESHOPTIMIZER_EXPERIMENTAL void meshopt_generateAdjacencyIndexBuffer(unsigned int* destination, const unsigned int* indices, size_t index_count, const float* vertex_positions, size_t vertex_count, size_t vertex_positions_stride); +MESHOPTIMIZER_API void meshopt_generateAdjacencyIndexBuffer(unsigned int* destination, const unsigned int* indices, size_t index_count, const float* vertex_positions, size_t vertex_count, size_t vertex_positions_stride); /** * Generate index buffer that can be used for PN-AEN tessellation with crack-free displacement @@ -124,7 +133,7 @@ MESHOPTIMIZER_EXPERIMENTAL void meshopt_generateAdjacencyIndexBuffer(unsigned in * destination must contain enough space for the resulting index buffer (index_count*4 elements) * vertex_positions should have float3 position in the first 12 bytes of each vertex - similar to glVertexPointer */ -MESHOPTIMIZER_EXPERIMENTAL void meshopt_generateTessellationIndexBuffer(unsigned int* destination, const unsigned int* indices, size_t index_count, const float* vertex_positions, size_t vertex_count, size_t vertex_positions_stride); +MESHOPTIMIZER_API void meshopt_generateTessellationIndexBuffer(unsigned int* destination, const unsigned int* indices, size_t index_count, const float* vertex_positions, size_t vertex_count, size_t vertex_positions_stride); /** * Vertex transform cache optimizer @@ -201,10 +210,10 @@ MESHOPTIMIZER_API size_t meshopt_encodeIndexBuffer(unsigned char* buffer, size_t MESHOPTIMIZER_API size_t meshopt_encodeIndexBufferBound(size_t index_count, size_t vertex_count); /** - * Experimental: Set index encoder format version + * Set index encoder format version * version must specify the data format version to encode; valid values are 0 (decodable by all library versions) and 1 (decodable by 0.14+) */ -MESHOPTIMIZER_EXPERIMENTAL void meshopt_encodeIndexVersion(int version); +MESHOPTIMIZER_API void meshopt_encodeIndexVersion(int version); /** * Index buffer decoder @@ -217,15 +226,15 @@ MESHOPTIMIZER_EXPERIMENTAL void meshopt_encodeIndexVersion(int version); MESHOPTIMIZER_API int meshopt_decodeIndexBuffer(void* destination, size_t index_count, size_t index_size, const unsigned char* buffer, size_t buffer_size); /** - * Experimental: Index sequence encoder + * Index sequence encoder * Encodes index sequence into an array of bytes that is generally smaller and compresses better compared to original. * Input index sequence can represent arbitrary topology; for triangle lists meshopt_encodeIndexBuffer is likely to be better. * Returns encoded data size on success, 0 on error; the only error condition is if buffer doesn't have enough space * * buffer must contain enough space for the encoded index sequence (use meshopt_encodeIndexSequenceBound to compute worst case size) */ -MESHOPTIMIZER_EXPERIMENTAL size_t meshopt_encodeIndexSequence(unsigned char* buffer, size_t buffer_size, const unsigned int* indices, size_t index_count); -MESHOPTIMIZER_EXPERIMENTAL size_t meshopt_encodeIndexSequenceBound(size_t index_count, size_t vertex_count); +MESHOPTIMIZER_API size_t meshopt_encodeIndexSequence(unsigned char* buffer, size_t buffer_size, const unsigned int* indices, size_t index_count); +MESHOPTIMIZER_API size_t meshopt_encodeIndexSequenceBound(size_t index_count, size_t vertex_count); /** * Index sequence decoder @@ -235,7 +244,7 @@ MESHOPTIMIZER_EXPERIMENTAL size_t meshopt_encodeIndexSequenceBound(size_t index_ * * destination must contain enough space for the resulting index sequence (index_count elements) */ -MESHOPTIMIZER_EXPERIMENTAL int meshopt_decodeIndexSequence(void* destination, size_t index_count, size_t index_size, const unsigned char* buffer, size_t buffer_size); +MESHOPTIMIZER_API int meshopt_decodeIndexSequence(void* destination, size_t index_count, size_t index_size, const unsigned char* buffer, size_t buffer_size); /** * Vertex buffer encoder @@ -250,10 +259,10 @@ MESHOPTIMIZER_API size_t meshopt_encodeVertexBuffer(unsigned char* buffer, size_ MESHOPTIMIZER_API size_t meshopt_encodeVertexBufferBound(size_t vertex_count, size_t vertex_size); /** - * Experimental: Set vertex encoder format version + * Set vertex encoder format version * version must specify the data format version to encode; valid values are 0 (decodable by all library versions) */ -MESHOPTIMIZER_EXPERIMENTAL void meshopt_encodeVertexVersion(int version); +MESHOPTIMIZER_API void meshopt_encodeVertexVersion(int version); /** * Vertex buffer decoder @@ -285,15 +294,15 @@ MESHOPTIMIZER_EXPERIMENTAL void meshopt_decodeFilterExp(void* buffer, size_t cou /** * Vertex buffer filter encoders * These functions can be used to encode data in a format that meshopt_decodeFilter can decode - * + * * meshopt_encodeFilterOct encodes unit vectors with K-bit (K <= 16) signed X/Y as an output. * Each component is stored as an 8-bit or 16-bit normalized integer; stride must be equal to 4 or 8. W is preserved as is. * Input data must contain 4 floats for every vector (count*4 total). - * + * * meshopt_encodeFilterQuat encodes unit quaternions with K-bit (4 <= K <= 16) component encoding. * Each component is stored as an 16-bit integer; stride must be equal to 8. * Input data must contain 4 floats for every quaternion (count*4 total). - * + * * meshopt_encodeFilterExp encodes arbitrary (finite) floating-point data with 8-bit exponent and K-bit integer mantissa (1 <= K <= 24). * Mantissa is shared between all components of a given vector as defined by stride; stride must be divisible by 4. * Input data must contain stride/4 floats for every vector (count*stride/4 total). @@ -353,7 +362,7 @@ MESHOPTIMIZER_EXPERIMENTAL size_t meshopt_simplifyPoints(unsigned int* destinati /** * Experimental: Returns the error scaling factor used by the simplifier to convert between absolute and relative extents - * + * * Absolute error must be *divided* by the scaling factor before passing it to meshopt_simplify as target_error * Relative error returned by meshopt_simplify via result_error must be *multiplied* by the scaling factor to get absolute error. */ @@ -438,7 +447,7 @@ struct meshopt_Meshlet }; /** - * Experimental: Meshlet builder + * Meshlet builder * Splits the mesh into a set of meshlets where each meshlet has a micro index buffer indexing into meshlet vertices that refer to the original vertex buffer * The resulting data can be used to render meshes using NVidia programmable mesh shading pipeline, or in other cluster-based renderers. * When using buildMeshlets, vertex positions need to be provided to minimize the size of the resulting clusters. @@ -451,9 +460,9 @@ struct meshopt_Meshlet * max_vertices and max_triangles must not exceed implementation limits (max_vertices <= 255 - not 256!, max_triangles <= 512) * cone_weight should be set to 0 when cone culling is not used, and a value between 0 and 1 otherwise to balance between cluster size and cone culling efficiency */ -MESHOPTIMIZER_EXPERIMENTAL size_t meshopt_buildMeshlets(struct meshopt_Meshlet* meshlets, unsigned int* meshlet_vertices, unsigned char* meshlet_triangles, const unsigned int* indices, size_t index_count, const float* vertex_positions, size_t vertex_count, size_t vertex_positions_stride, size_t max_vertices, size_t max_triangles, float cone_weight); -MESHOPTIMIZER_EXPERIMENTAL size_t meshopt_buildMeshletsScan(struct meshopt_Meshlet* meshlets, unsigned int* meshlet_vertices, unsigned char* meshlet_triangles, const unsigned int* indices, size_t index_count, size_t vertex_count, size_t max_vertices, size_t max_triangles); -MESHOPTIMIZER_EXPERIMENTAL size_t meshopt_buildMeshletsBound(size_t index_count, size_t max_vertices, size_t max_triangles); +MESHOPTIMIZER_API size_t meshopt_buildMeshlets(struct meshopt_Meshlet* meshlets, unsigned int* meshlet_vertices, unsigned char* meshlet_triangles, const unsigned int* indices, size_t index_count, const float* vertex_positions, size_t vertex_count, size_t vertex_positions_stride, size_t max_vertices, size_t max_triangles, float cone_weight); +MESHOPTIMIZER_API size_t meshopt_buildMeshletsScan(struct meshopt_Meshlet* meshlets, unsigned int* meshlet_vertices, unsigned char* meshlet_triangles, const unsigned int* indices, size_t index_count, size_t vertex_count, size_t max_vertices, size_t max_triangles); +MESHOPTIMIZER_API size_t meshopt_buildMeshletsBound(size_t index_count, size_t max_vertices, size_t max_triangles); struct meshopt_Bounds { @@ -472,7 +481,7 @@ struct meshopt_Bounds }; /** - * Experimental: Cluster bounds generator + * Cluster bounds generator * Creates bounding volumes that can be used for frustum, backface and occlusion culling. * * For backface culling with orthographic projection, use the following formula to reject backfacing clusters: @@ -492,8 +501,8 @@ struct meshopt_Bounds * vertex_positions should have float3 position in the first 12 bytes of each vertex - similar to glVertexPointer * index_count/3 should be less than or equal to 512 (the function assumes clusters of limited size) */ -MESHOPTIMIZER_EXPERIMENTAL struct meshopt_Bounds meshopt_computeClusterBounds(const unsigned int* indices, size_t index_count, const float* vertex_positions, size_t vertex_count, size_t vertex_positions_stride); -MESHOPTIMIZER_EXPERIMENTAL struct meshopt_Bounds meshopt_computeMeshletBounds(const unsigned int* meshlet_vertices, const unsigned char* meshlet_triangles, size_t triangle_count, const float* vertex_positions, size_t vertex_count, size_t vertex_positions_stride); +MESHOPTIMIZER_API struct meshopt_Bounds meshopt_computeClusterBounds(const unsigned int* indices, size_t index_count, const float* vertex_positions, size_t vertex_count, size_t vertex_positions_stride); +MESHOPTIMIZER_API struct meshopt_Bounds meshopt_computeMeshletBounds(const unsigned int* meshlet_vertices, const unsigned char* meshlet_triangles, size_t triangle_count, const float* vertex_positions, size_t vertex_count, size_t vertex_positions_stride); /** * Experimental: Spatial sorter @@ -519,7 +528,7 @@ MESHOPTIMIZER_EXPERIMENTAL void meshopt_spatialSortTriangles(unsigned int* desti * Note that all algorithms only allocate memory for temporary use. * allocate/deallocate are always called in a stack-like order - last pointer to be allocated is deallocated first. */ -MESHOPTIMIZER_API void meshopt_setAllocator(void* (*allocate)(size_t), void (*deallocate)(void*)); +MESHOPTIMIZER_API void meshopt_setAllocator(void* (MESHOPTIMIZER_ALLOC_CALLCONV *allocate)(size_t), void (MESHOPTIMIZER_ALLOC_CALLCONV *deallocate)(void*)); #ifdef __cplusplus } /* extern "C" */ @@ -701,8 +710,8 @@ public: template <typename T> struct StorageT { - static void* (*allocate)(size_t); - static void (*deallocate)(void*); + static void* (MESHOPTIMIZER_ALLOC_CALLCONV *allocate)(size_t); + static void (MESHOPTIMIZER_ALLOC_CALLCONV *deallocate)(void*); }; typedef StorageT<void> Storage; @@ -733,8 +742,8 @@ private: }; // This makes sure that allocate/deallocate are lazily generated in translation units that need them and are deduplicated by the linker -template <typename T> void* (*meshopt_Allocator::StorageT<T>::allocate)(size_t) = operator new; -template <typename T> void (*meshopt_Allocator::StorageT<T>::deallocate)(void*) = operator delete; +template <typename T> void* (MESHOPTIMIZER_ALLOC_CALLCONV *meshopt_Allocator::StorageT<T>::allocate)(size_t) = operator new; +template <typename T> void (MESHOPTIMIZER_ALLOC_CALLCONV *meshopt_Allocator::StorageT<T>::deallocate)(void*) = operator delete; #endif /* Inline implementation for C++ templated wrappers */ diff --git a/thirdparty/meshoptimizer/patches/attribute-aware-simplify-distance-only-metric.patch b/thirdparty/meshoptimizer/patches/attribute-aware-simplify-distance-only-metric.patch index 54132a6c86..213f35dd69 100644 --- a/thirdparty/meshoptimizer/patches/attribute-aware-simplify-distance-only-metric.patch +++ b/thirdparty/meshoptimizer/patches/attribute-aware-simplify-distance-only-metric.patch @@ -1,5 +1,5 @@ diff --git a/thirdparty/meshoptimizer/simplifier.cpp b/thirdparty/meshoptimizer/simplifier.cpp -index 0f10ebef4b..cf5db4e119 100644 +index e384046ffe..ccc99edb1a 100644 --- a/thirdparty/meshoptimizer/simplifier.cpp +++ b/thirdparty/meshoptimizer/simplifier.cpp @@ -20,7 +20,7 @@ diff --git a/thirdparty/meshoptimizer/patches/attribute-aware-simplify.patch b/thirdparty/meshoptimizer/patches/attribute-aware-simplify.patch index cf648b0da3..51a424765e 100644 --- a/thirdparty/meshoptimizer/patches/attribute-aware-simplify.patch +++ b/thirdparty/meshoptimizer/patches/attribute-aware-simplify.patch @@ -1,8 +1,8 @@ diff --git a/thirdparty/meshoptimizer/meshoptimizer.h b/thirdparty/meshoptimizer/meshoptimizer.h -index fe8d349731..e44b99ce52 100644 +index be4b765d97..463fad29da 100644 --- a/thirdparty/meshoptimizer/meshoptimizer.h +++ b/thirdparty/meshoptimizer/meshoptimizer.h -@@ -298,6 +298,11 @@ MESHOPTIMIZER_EXPERIMENTAL void meshopt_decodeFilterExp(void* buffer, size_t ver +@@ -328,6 +328,11 @@ MESHOPTIMIZER_EXPERIMENTAL void meshopt_encodeFilterExp(void* destination, size_ */ MESHOPTIMIZER_EXPERIMENTAL size_t meshopt_simplify(unsigned int* destination, const unsigned int* indices, size_t index_count, const float* vertex_positions, size_t vertex_count, size_t vertex_positions_stride, size_t target_index_count, float target_error, float* result_error); @@ -13,9 +13,9 @@ index fe8d349731..e44b99ce52 100644 + /** * Experimental: Mesh simplifier (sloppy) - * Reduces the number of triangles in the mesh, sacrificing mesh apperance for simplification performance + * Reduces the number of triangles in the mesh, sacrificing mesh appearance for simplification performance diff --git a/thirdparty/meshoptimizer/simplifier.cpp b/thirdparty/meshoptimizer/simplifier.cpp -index b2cb589462..059cabb055 100644 +index bf1431269d..e384046ffe 100644 --- a/thirdparty/meshoptimizer/simplifier.cpp +++ b/thirdparty/meshoptimizer/simplifier.cpp @@ -20,6 +20,8 @@ @@ -27,7 +27,7 @@ index b2cb589462..059cabb055 100644 // This work is based on: // Michael Garland and Paul S. Heckbert. Surface simplification using quadric error metrics. 1997 // Michael Garland. Quadric-based polygonal surface simplification. 1999 -@@ -358,6 +360,10 @@ static void classifyVertices(unsigned char* result, unsigned int* loop, unsigned +@@ -363,6 +365,10 @@ static void classifyVertices(unsigned char* result, unsigned int* loop, unsigned struct Vector3 { float x, y, z; @@ -38,7 +38,7 @@ index b2cb589462..059cabb055 100644 }; static float rescalePositions(Vector3* result, const float* vertex_positions_data, size_t vertex_count, size_t vertex_positions_stride) -@@ -414,6 +420,13 @@ struct Quadric +@@ -419,6 +425,13 @@ struct Quadric float a10, a20, a21; float b0, b1, b2, c; float w; @@ -52,7 +52,7 @@ index b2cb589462..059cabb055 100644 }; struct Collapse -@@ -456,6 +469,16 @@ static void quadricAdd(Quadric& Q, const Quadric& R) +@@ -461,6 +474,16 @@ static void quadricAdd(Quadric& Q, const Quadric& R) Q.b2 += R.b2; Q.c += R.c; Q.w += R.w; @@ -69,7 +69,7 @@ index b2cb589462..059cabb055 100644 } static float quadricError(const Quadric& Q, const Vector3& v) -@@ -481,6 +504,17 @@ static float quadricError(const Quadric& Q, const Vector3& v) +@@ -486,6 +509,17 @@ static float quadricError(const Quadric& Q, const Vector3& v) r += ry * v.y; r += rz * v.z; @@ -87,7 +87,7 @@ index b2cb589462..059cabb055 100644 float s = Q.w == 0.f ? 0.f : 1.f / Q.w; return fabsf(r) * s; -@@ -504,6 +538,13 @@ static void quadricFromPlane(Quadric& Q, float a, float b, float c, float d, flo +@@ -509,6 +543,13 @@ static void quadricFromPlane(Quadric& Q, float a, float b, float c, float d, flo Q.b2 = c * dw; Q.c = d * dw; Q.w = w; @@ -101,7 +101,7 @@ index b2cb589462..059cabb055 100644 } static void quadricFromPoint(Quadric& Q, float x, float y, float z, float w) -@@ -556,6 +597,84 @@ static void quadricFromTriangleEdge(Quadric& Q, const Vector3& p0, const Vector3 +@@ -561,6 +602,84 @@ static void quadricFromTriangleEdge(Quadric& Q, const Vector3& p0, const Vector3 quadricFromPlane(Q, normal.x, normal.y, normal.z, -distance, length * weight); } @@ -186,7 +186,7 @@ index b2cb589462..059cabb055 100644 static void fillFaceQuadrics(Quadric* vertex_quadrics, const unsigned int* indices, size_t index_count, const Vector3* vertex_positions, const unsigned int* remap) { for (size_t i = 0; i < index_count; i += 3) -@@ -567,6 +686,9 @@ static void fillFaceQuadrics(Quadric* vertex_quadrics, const unsigned int* indic +@@ -572,6 +691,9 @@ static void fillFaceQuadrics(Quadric* vertex_quadrics, const unsigned int* indic Quadric Q; quadricFromTriangle(Q, vertex_positions[i0], vertex_positions[i1], vertex_positions[i2], 1.f); @@ -196,7 +196,7 @@ index b2cb589462..059cabb055 100644 quadricAdd(vertex_quadrics[remap[i0]], Q); quadricAdd(vertex_quadrics[remap[i1]], Q); quadricAdd(vertex_quadrics[remap[i2]], Q); -@@ -1259,13 +1381,19 @@ unsigned int* meshopt_simplifyDebugLoopBack = 0; +@@ -1265,13 +1387,19 @@ MESHOPTIMIZER_API unsigned int* meshopt_simplifyDebugLoopBack = 0; #endif size_t meshopt_simplify(unsigned int* destination, const unsigned int* indices, size_t index_count, const float* vertex_positions_data, size_t vertex_count, size_t vertex_positions_stride, size_t target_index_count, float target_error, float* out_result_error) @@ -218,7 +218,7 @@ index b2cb589462..059cabb055 100644 meshopt_Allocator allocator; -@@ -1279,7 +1407,7 @@ size_t meshopt_simplify(unsigned int* destination, const unsigned int* indices, +@@ -1285,7 +1413,7 @@ size_t meshopt_simplify(unsigned int* destination, const unsigned int* indices, // build position remap that maps each vertex to the one with identical position unsigned int* remap = allocator.allocate<unsigned int>(vertex_count); unsigned int* wedge = allocator.allocate<unsigned int>(vertex_count); @@ -227,7 +227,7 @@ index b2cb589462..059cabb055 100644 // classify vertices; vertex kind determines collapse rules, see kCanCollapse unsigned char* vertex_kind = allocator.allocate<unsigned char>(vertex_count); -@@ -1303,7 +1431,21 @@ size_t meshopt_simplify(unsigned int* destination, const unsigned int* indices, +@@ -1309,7 +1437,21 @@ size_t meshopt_simplify(unsigned int* destination, const unsigned int* indices, #endif Vector3* vertex_positions = allocator.allocate<Vector3>(vertex_count); @@ -250,7 +250,7 @@ index b2cb589462..059cabb055 100644 Quadric* vertex_quadrics = allocator.allocate<Quadric>(vertex_count); memset(vertex_quadrics, 0, vertex_count * sizeof(Quadric)); -@@ -1395,7 +1537,9 @@ size_t meshopt_simplify(unsigned int* destination, const unsigned int* indices, +@@ -1401,7 +1543,9 @@ size_t meshopt_simplify(unsigned int* destination, const unsigned int* indices, // result_error is quadratic; we need to remap it back to linear if (out_result_error) diff --git a/thirdparty/pcre2/AUTHORS b/thirdparty/pcre2/AUTHORS index bec8a1e5ad..11ef898b25 100644 --- a/thirdparty/pcre2/AUTHORS +++ b/thirdparty/pcre2/AUTHORS @@ -8,7 +8,7 @@ Email domain: gmail.com Retired from University of Cambridge Computing Service, Cambridge, England. -Copyright (c) 1997-2021 University of Cambridge +Copyright (c) 1997-2022 University of Cambridge All rights reserved @@ -19,7 +19,7 @@ Written by: Zoltan Herczeg Email local part: hzmester Emain domain: freemail.hu -Copyright(c) 2010-2021 Zoltan Herczeg +Copyright(c) 2010-2022 Zoltan Herczeg All rights reserved. @@ -30,7 +30,7 @@ Written by: Zoltan Herczeg Email local part: hzmester Emain domain: freemail.hu -Copyright(c) 2009-2021 Zoltan Herczeg +Copyright(c) 2009-2022 Zoltan Herczeg All rights reserved. #### diff --git a/thirdparty/pcre2/LICENCE b/thirdparty/pcre2/LICENCE index b1ec61be44..2f3cd5cac5 100644 --- a/thirdparty/pcre2/LICENCE +++ b/thirdparty/pcre2/LICENCE @@ -26,7 +26,7 @@ Email domain: gmail.com Retired from University of Cambridge Computing Service, Cambridge, England. -Copyright (c) 1997-2021 University of Cambridge +Copyright (c) 1997-2022 University of Cambridge All rights reserved. @@ -37,7 +37,7 @@ Written by: Zoltan Herczeg Email local part: hzmester Email domain: freemail.hu -Copyright(c) 2010-2021 Zoltan Herczeg +Copyright(c) 2010-2022 Zoltan Herczeg All rights reserved. @@ -48,7 +48,7 @@ Written by: Zoltan Herczeg Email local part: hzmester Email domain: freemail.hu -Copyright(c) 2009-2021 Zoltan Herczeg +Copyright(c) 2009-2022 Zoltan Herczeg All rights reserved. diff --git a/thirdparty/pcre2/patches/sljit-macos11-conditional.patch b/thirdparty/pcre2/patches/sljit-macos11-conditional.patch new file mode 100644 index 0000000000..def1207a3d --- /dev/null +++ b/thirdparty/pcre2/patches/sljit-macos11-conditional.patch @@ -0,0 +1,31 @@ +From de8fc816bc6698ab97316ed954e133e7e5098262 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Carlo=20Marcelo=20Arenas=20Bel=C3=B3n?= <carenas@gmail.com> +Date: Thu, 21 Apr 2022 21:01:12 -0700 +Subject: [PATCH] macos: somehow allow building with a target below 11.0 + +While building for macOS older than 11 in Apple Silicon makes no +sense, some build systems lack the flexibility to set a target per +architecture while aiming to support multi architecture binaries. + +Allow an option in those cases by using the slower runtime checks +if the toolchain allows it. + +Fixes: PCRE2Project/pcre2#109 +--- + sljit_src/sljitExecAllocator.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/sljit_src/sljitExecAllocator.c b/sljit_src/sljitExecAllocator.c +index 92d940dd..6359848c 100644 +--- a/sljit_src/sljitExecAllocator.c ++++ b/sljit_src/sljitExecAllocator.c +@@ -152,6 +152,9 @@ static SLJIT_INLINE void apple_update_wx_flags(sljit_s32 enable_exec) + { + #if MAC_OS_X_VERSION_MIN_REQUIRED >= 110000 + pthread_jit_write_protect_np(enable_exec); ++#elif defined(__clang__) ++ if (__builtin_available(macOS 11.0, *)) ++ pthread_jit_write_protect_np(enable_exec); + #else + #error "Must target Big Sur or newer" + #endif /* BigSur */ diff --git a/thirdparty/pcre2/src/config.h b/thirdparty/pcre2/src/config.h index a13593715e..76dc5868b1 100644 --- a/thirdparty/pcre2/src/config.h +++ b/thirdparty/pcre2/src/config.h @@ -97,6 +97,9 @@ sure both macros are undefined; an emulation function will then be used. */ /* Have PTHREAD_PRIO_INHERIT. */ /* #undef HAVE_PTHREAD_PRIO_INHERIT */ +/* Define to 1 if you have the <readline.h> header file. */ +/* #undef HAVE_READLINE_H */ + /* Define to 1 if you have the <readline/history.h> header file. */ /* #undef HAVE_READLINE_HISTORY_H */ @@ -233,7 +236,7 @@ sure both macros are undefined; an emulation function will then be used. */ #define PACKAGE_NAME "PCRE2" /* Define to the full name and version of this package. */ -#define PACKAGE_STRING "PCRE2 10.39" +#define PACKAGE_STRING "PCRE2 10.40" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "pcre2" @@ -242,7 +245,7 @@ sure both macros are undefined; an emulation function will then be used. */ #define PACKAGE_URL "" /* Define to the version of this package. */ -#define PACKAGE_VERSION "10.39" +#define PACKAGE_VERSION "10.40" /* The value of PARENS_NEST_LIMIT specifies the maximum depth of nested parentheses (of any kind) in a pattern. This limits the amount of system @@ -435,7 +438,7 @@ sure both macros are undefined; an emulation function will then be used. */ #endif /* Version number of package */ -#define VERSION "10.39" +#define VERSION "10.40" /* Define to empty if `const' does not conform to ANSI C. */ /* #undef const */ diff --git a/thirdparty/pcre2/src/pcre2.h b/thirdparty/pcre2/src/pcre2.h index 90a97d9cb7..8adcede57c 100644 --- a/thirdparty/pcre2/src/pcre2.h +++ b/thirdparty/pcre2/src/pcre2.h @@ -42,9 +42,9 @@ POSSIBILITY OF SUCH DAMAGE. /* The current PCRE version information. */ #define PCRE2_MAJOR 10 -#define PCRE2_MINOR 39 +#define PCRE2_MINOR 40 #define PCRE2_PRERELEASE -#define PCRE2_DATE 2021-10-29 +#define PCRE2_DATE 2022-04-14 /* When an application links to a PCRE DLL in Windows, the symbols that are imported have to be identified as such. When building PCRE2, the appropriate diff --git a/thirdparty/pcre2/src/pcre2_auto_possess.c b/thirdparty/pcre2/src/pcre2_auto_possess.c index e5e0895682..419fd49001 100644 --- a/thirdparty/pcre2/src/pcre2_auto_possess.c +++ b/thirdparty/pcre2/src/pcre2_auto_possess.c @@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Original API code Copyright (c) 1997-2012 University of Cambridge - New API code Copyright (c) 2016-2021 University of Cambridge + New API code Copyright (c) 2016-2022 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -123,18 +123,21 @@ opcode is used to select the column. The values are as follows: */ static const uint8_t propposstab[PT_TABSIZE][PT_TABSIZE] = { -/* ANY LAMP GC PC SC ALNUM SPACE PXSPACE WORD CLIST UCNC */ - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, /* PT_ANY */ - { 0, 3, 0, 0, 0, 3, 1, 1, 0, 0, 0 }, /* PT_LAMP */ - { 0, 0, 2, 4, 0, 9, 10, 10, 11, 0, 0 }, /* PT_GC */ - { 0, 0, 5, 2, 0, 15, 16, 16, 17, 0, 0 }, /* PT_PC */ - { 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0 }, /* PT_SC */ - { 0, 3, 6, 12, 0, 3, 1, 1, 0, 0, 0 }, /* PT_ALNUM */ - { 0, 1, 7, 13, 0, 1, 3, 3, 1, 0, 0 }, /* PT_SPACE */ - { 0, 1, 7, 13, 0, 1, 3, 3, 1, 0, 0 }, /* PT_PXSPACE */ - { 0, 0, 8, 14, 0, 0, 1, 1, 3, 0, 0 }, /* PT_WORD */ - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, /* PT_CLIST */ - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3 } /* PT_UCNC */ +/* ANY LAMP GC PC SC SCX ALNUM SPACE PXSPACE WORD CLIST UCNC BIDICL BOOL */ + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, /* PT_ANY */ + { 0, 3, 0, 0, 0, 0, 3, 1, 1, 0, 0, 0, 0, 0 }, /* PT_LAMP */ + { 0, 0, 2, 4, 0, 0, 9, 10, 10, 11, 0, 0, 0, 0 }, /* PT_GC */ + { 0, 0, 5, 2, 0, 0, 15, 16, 16, 17, 0, 0, 0, 0 }, /* PT_PC */ + { 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, /* PT_SC */ + { 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, /* PT_SCX */ + { 0, 3, 6, 12, 0, 0, 3, 1, 1, 0, 0, 0, 0, 0 }, /* PT_ALNUM */ + { 0, 1, 7, 13, 0, 0, 1, 3, 3, 1, 0, 0, 0, 0 }, /* PT_SPACE */ + { 0, 1, 7, 13, 0, 0, 1, 3, 3, 1, 0, 0, 0, 0 }, /* PT_PXSPACE */ + { 0, 0, 8, 14, 0, 0, 0, 1, 1, 3, 0, 0, 0, 0 }, /* PT_WORD */ + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, /* PT_CLIST */ + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0 }, /* PT_UCNC */ + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, /* PT_BIDICL */ + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } /* PT_BOOL */ }; /* This table is used to check whether auto-possessification is possible @@ -196,6 +199,7 @@ static BOOL check_char_prop(uint32_t c, unsigned int ptype, unsigned int pdata, BOOL negated) { +BOOL ok; const uint32_t *p; const ucd_record *prop = GET_UCD(c); @@ -215,6 +219,11 @@ switch(ptype) case PT_SC: return (pdata == prop->script) == negated; + case PT_SCX: + ok = (pdata == prop->script + || MAPBIT(PRIV(ucd_script_sets) + UCD_SCRIPTX_PROP(prop), pdata) != 0); + return ok == negated; + /* These are specials */ case PT_ALNUM: @@ -251,6 +260,14 @@ switch(ptype) if (c == *p++) return negated; } break; /* Control never reaches here */ + + /* Haven't yet thought these through. */ + + case PT_BIDICL: + return FALSE; + + case PT_BOOL: + return FALSE; } return FALSE; diff --git a/thirdparty/pcre2/src/pcre2_compile.c b/thirdparty/pcre2/src/pcre2_compile.c index 383159be76..de259c9c40 100644 --- a/thirdparty/pcre2/src/pcre2_compile.c +++ b/thirdparty/pcre2/src/pcre2_compile.c @@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Original API code Copyright (c) 1997-2012 University of Cambridge - New API code Copyright (c) 2016-2021 University of Cambridge + New API code Copyright (c) 2016-2022 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -124,7 +124,7 @@ static unsigned int static int compile_regex(uint32_t, PCRE2_UCHAR **, uint32_t **, int *, uint32_t, - uint32_t *, int32_t *, uint32_t *, int32_t *, branch_chain *, + uint32_t *, uint32_t *, uint32_t *, uint32_t *, branch_chain *, compile_block *, PCRE2_SIZE *); static int @@ -385,13 +385,15 @@ compiler is clever with identical subexpressions. */ #define SETBIT(a,b) a[(b)/8] = (uint8_t)(a[(b)/8] | (1u << ((b)&7))) -/* Private flags added to firstcu and reqcu. */ +/* Values and flags for the unsigned xxcuflags variables that accompany xxcu +variables, which are concerned with first and required code units. A value +greater than or equal to REQ_NONE means "no code unit set"; otherwise the +matching xxcu variable is set, and the low valued bits are relevant. */ -#define REQ_CASELESS (1u << 0) /* Indicates caselessness */ -#define REQ_VARY (1u << 1) /* reqcu followed non-literal item */ -/* Negative values for the firstcu and reqcu flags */ -#define REQ_UNSET (-2) /* Not yet found anything */ -#define REQ_NONE (-1) /* Found not fixed char */ +#define REQ_UNSET 0xffffffffu /* Not yet found anything */ +#define REQ_NONE 0xfffffffeu /* Found not fixed character */ +#define REQ_CASELESS 0x00000001u /* Code unit in xxcu is caseless */ +#define REQ_VARY 0x00000002u /* Code unit is followed by non-literal */ /* These flags are used in the groupinfo vector. */ @@ -2088,7 +2090,9 @@ get_ucp(PCRE2_SPTR *ptrptr, BOOL *negptr, uint16_t *ptypeptr, PCRE2_UCHAR c; PCRE2_SIZE i, bot, top; PCRE2_SPTR ptr = *ptrptr; -PCRE2_UCHAR name[32]; +PCRE2_UCHAR name[50]; +PCRE2_UCHAR *vptr = NULL; +uint16_t ptscript = PT_NOTSCRIPT; if (ptr >= cb->end_pattern) goto ERROR_RETURN; c = *ptr++; @@ -2100,36 +2104,95 @@ negation. */ if (c == CHAR_LEFT_CURLY_BRACKET) { if (ptr >= cb->end_pattern) goto ERROR_RETURN; + if (*ptr == CHAR_CIRCUMFLEX_ACCENT) { *negptr = TRUE; ptr++; } + for (i = 0; i < (int)(sizeof(name) / sizeof(PCRE2_UCHAR)) - 1; i++) { if (ptr >= cb->end_pattern) goto ERROR_RETURN; c = *ptr++; + while (c == '_' || c == '-' || isspace(c)) + { + if (ptr >= cb->end_pattern) goto ERROR_RETURN; + c = *ptr++; + } if (c == CHAR_NUL) goto ERROR_RETURN; if (c == CHAR_RIGHT_CURLY_BRACKET) break; - name[i] = c; + name[i] = tolower(c); + if ((c == ':' || c == '=') && vptr == NULL) vptr = name + i; } + if (c != CHAR_RIGHT_CURLY_BRACKET) goto ERROR_RETURN; name[i] = 0; } -/* Otherwise there is just one following character, which must be an ASCII -letter. */ +/* If { doesn't follow \p or \P there is just one following character, which +must be an ASCII letter. */ else if (MAX_255(c) && (cb->ctypes[c] & ctype_letter) != 0) { - name[0] = c; + name[0] = tolower(c); name[1] = 0; } else goto ERROR_RETURN; *ptrptr = ptr; -/* Search for a recognized property name using binary chop. */ +/* If the property contains ':' or '=' we have class name and value separately +specified. The following are supported: + + . Bidi_Class (synonym bc), for which the property names are "bidi<name>". + . Script (synonym sc) for which the property name is the script name + . Script_Extensions (synonym scx), ditto + +As this is a small number, we currently just check the names directly. If this +grows, a sorted table and a switch will be neater. + +For both the script properties, set a PT_xxx value so that (1) they can be +distinguished and (2) invalid script names that happen to be the name of +another property can be diagnosed. */ + +if (vptr != NULL) + { + int offset = 0; + PCRE2_UCHAR sname[8]; + + *vptr = 0; /* Terminate property name */ + if (PRIV(strcmp_c8)(name, STRING_bidiclass) == 0 || + PRIV(strcmp_c8)(name, STRING_bc) == 0) + { + offset = 4; + sname[0] = CHAR_b; + sname[1] = CHAR_i; /* There is no strcpy_c8 function */ + sname[2] = CHAR_d; + sname[3] = CHAR_i; + } + + else if (PRIV(strcmp_c8)(name, STRING_script) == 0 || + PRIV(strcmp_c8)(name, STRING_sc) == 0) + ptscript = PT_SC; + + else if (PRIV(strcmp_c8)(name, STRING_scriptextensions) == 0 || + PRIV(strcmp_c8)(name, STRING_scx) == 0) + ptscript = PT_SCX; + + else + { + *errorcodeptr = ERR47; + return FALSE; + } + + /* Adjust the string in name[] as needed */ + + memmove(name + offset, vptr + 1, (name + i - vptr)*sizeof(PCRE2_UCHAR)); + if (offset != 0) memmove(name, sname, offset*sizeof(PCRE2_UCHAR)); + } + +/* Search for a recognized property using binary chop. */ bot = 0; top = PRIV(utt_size); @@ -2139,15 +2202,37 @@ while (bot < top) int r; i = (bot + top) >> 1; r = PRIV(strcmp_c8)(name, PRIV(utt_names) + PRIV(utt)[i].name_offset); + + /* When a matching property is found, some extra checking is needed when the + \p{xx:yy} syntax is used and xx is either sc or scx. */ + if (r == 0) { - *ptypeptr = PRIV(utt)[i].type; *pdataptr = PRIV(utt)[i].value; - return TRUE; + if (vptr == NULL || ptscript == PT_NOTSCRIPT) + { + *ptypeptr = PRIV(utt)[i].type; + return TRUE; + } + + switch (PRIV(utt)[i].type) + { + case PT_SC: + *ptypeptr = PT_SC; + return TRUE; + + case PT_SCX: + *ptypeptr = ptscript; + return TRUE; + } + + break; /* Non-script found */ } + if (r > 0) bot = i + 1; else top = i; } -*errorcodeptr = ERR47; /* Unrecognized name */ + +*errorcodeptr = ERR47; /* Unrecognized property */ return FALSE; ERROR_RETURN: /* Malformed \P or \p */ @@ -5285,9 +5370,9 @@ Arguments: pptrptr points to the current parsed pattern pointer errorcodeptr points to error code variable firstcuptr place to put the first required code unit - firstcuflagsptr place to put the first code unit flags, or a negative number + firstcuflagsptr place to put the first code unit flags reqcuptr place to put the last required code unit - reqcuflagsptr place to put the last required code unit flags, or a negative number + reqcuflagsptr place to put the last required code unit flags bcptr points to current branch chain cb contains pointers to tables etc. lengthptr NULL during the real compile phase @@ -5300,8 +5385,8 @@ Returns: 0 There's been an error, *errorcodeptr is non-zero static int compile_branch(uint32_t *optionsptr, PCRE2_UCHAR **codeptr, uint32_t **pptrptr, - int *errorcodeptr, uint32_t *firstcuptr, int32_t *firstcuflagsptr, - uint32_t *reqcuptr, int32_t *reqcuflagsptr, branch_chain *bcptr, + int *errorcodeptr, uint32_t *firstcuptr, uint32_t *firstcuflagsptr, + uint32_t *reqcuptr, uint32_t *reqcuflagsptr, branch_chain *bcptr, compile_block *cb, PCRE2_SIZE *lengthptr) { int bravalue = 0; @@ -5316,9 +5401,9 @@ uint32_t zeroreqcu, zerofirstcu; uint32_t escape; uint32_t *pptr = *pptrptr; uint32_t meta, meta_arg; -int32_t firstcuflags, reqcuflags; -int32_t zeroreqcuflags, zerofirstcuflags; -int32_t req_caseopt, reqvary, tempreqvary; +uint32_t firstcuflags, reqcuflags; +uint32_t zeroreqcuflags, zerofirstcuflags; +uint32_t req_caseopt, reqvary, tempreqvary; PCRE2_SIZE offset = 0; PCRE2_SIZE length_prevgroup = 0; PCRE2_UCHAR *code = *codeptr; @@ -5374,13 +5459,13 @@ item types that can be repeated set these backoff variables appropriately. */ firstcu = reqcu = zerofirstcu = zeroreqcu = 0; firstcuflags = reqcuflags = zerofirstcuflags = zeroreqcuflags = REQ_UNSET; -/* The variable req_caseopt contains either the REQ_CASELESS value or zero, +/* The variable req_caseopt contains either the REQ_CASELESS bit or zero, according to the current setting of the caseless flag. The REQ_CASELESS value leaves the lower 28 bit empty. It is added into the firstcu or reqcu variables to record the case status of the value. This is used only for ASCII characters. */ -req_caseopt = ((options & PCRE2_CASELESS) != 0)? REQ_CASELESS:0; +req_caseopt = ((options & PCRE2_CASELESS) != 0)? REQ_CASELESS : 0; /* Switch on next META item until the end of the branch */ @@ -5395,13 +5480,12 @@ for (;; pptr++) BOOL possessive_quantifier; BOOL note_group_empty; int class_has_8bitchar; - int i; uint32_t mclength; uint32_t skipunits; uint32_t subreqcu, subfirstcu; uint32_t groupnumber; uint32_t verbarglen, verbculen; - int32_t subreqcuflags, subfirstcuflags; /* Must be signed */ + uint32_t subreqcuflags, subfirstcuflags; open_capitem *oc; PCRE2_UCHAR mcbuffer[8]; @@ -5770,9 +5854,9 @@ for (;; pptr++) if (taboffset >= 0) { if (tabopt >= 0) - for (i = 0; i < 32; i++) pbits[i] |= cbits[(int)i + taboffset]; + for (int i = 0; i < 32; i++) pbits[i] |= cbits[(int)i + taboffset]; else - for (i = 0; i < 32; i++) pbits[i] &= ~cbits[(int)i + taboffset]; + for (int i = 0; i < 32; i++) pbits[i] &= ~cbits[(int)i + taboffset]; } /* Now see if we need to remove any special characters. An option @@ -5786,9 +5870,9 @@ for (;; pptr++) being built and we are done. */ if (local_negate) - for (i = 0; i < 32; i++) classbits[i] |= ~pbits[i]; + for (int i = 0; i < 32; i++) classbits[i] |= (uint8_t)(~pbits[i]); else - for (i = 0; i < 32; i++) classbits[i] |= pbits[i]; + for (int i = 0; i < 32; i++) classbits[i] |= pbits[i]; /* Every class contains at least one < 256 character. */ @@ -5827,21 +5911,23 @@ for (;; pptr++) switch(escape) { case ESC_d: - for (i = 0; i < 32; i++) classbits[i] |= cbits[i+cbit_digit]; + for (int i = 0; i < 32; i++) classbits[i] |= cbits[i+cbit_digit]; break; case ESC_D: should_flip_negation = TRUE; - for (i = 0; i < 32; i++) classbits[i] |= ~cbits[i+cbit_digit]; + for (int i = 0; i < 32; i++) + classbits[i] |= (uint8_t)(~cbits[i+cbit_digit]); break; case ESC_w: - for (i = 0; i < 32; i++) classbits[i] |= cbits[i+cbit_word]; + for (int i = 0; i < 32; i++) classbits[i] |= cbits[i+cbit_word]; break; case ESC_W: should_flip_negation = TRUE; - for (i = 0; i < 32; i++) classbits[i] |= ~cbits[i+cbit_word]; + for (int i = 0; i < 32; i++) + classbits[i] |= (uint8_t)(~cbits[i+cbit_word]); break; /* Perl 5.004 onwards omitted VT from \s, but restored it at Perl @@ -5852,12 +5938,13 @@ for (;; pptr++) longer treat \s and \S specially. */ case ESC_s: - for (i = 0; i < 32; i++) classbits[i] |= cbits[i+cbit_space]; + for (int i = 0; i < 32; i++) classbits[i] |= cbits[i+cbit_space]; break; case ESC_S: should_flip_negation = TRUE; - for (i = 0; i < 32; i++) classbits[i] |= ~cbits[i+cbit_space]; + for (int i = 0; i < 32; i++) + classbits[i] |= (uint8_t)(~cbits[i+cbit_space]); break; /* When adding the horizontal or vertical space lists to a class, or @@ -6098,7 +6185,7 @@ for (;; pptr++) if (negate_class && !xclass_has_prop) { /* Using 255 ^ instead of ~ avoids clang sanitize warning. */ - for (i = 0; i < 32; i++) classbits[i] = 255 ^ classbits[i]; + for (int i = 0; i < 32; i++) classbits[i] = 255 ^ classbits[i]; } memcpy(code, classbits, 32); code = class_uchardata + (32 / sizeof(PCRE2_UCHAR)); @@ -6124,7 +6211,7 @@ for (;; pptr++) if (negate_class) { /* Using 255 ^ instead of ~ avoids clang sanitize warning. */ - for (i = 0; i < 32; i++) classbits[i] = 255 ^ classbits[i]; + for (int i = 0; i < 32; i++) classbits[i] = 255 ^ classbits[i]; } memcpy(code, classbits, 32); } @@ -6198,7 +6285,7 @@ for (;; pptr++) verbarglen = *(++pptr); verbculen = 0; tempcode = code++; - for (i = 0; i < (int)verbarglen; i++) + for (int i = 0; i < (int)verbarglen; i++) { meta = *(++pptr); #ifdef SUPPORT_UNICODE @@ -6247,6 +6334,7 @@ for (;; pptr++) bravalue = OP_COND; { int count, index; + unsigned int i; PCRE2_SPTR name; named_group *ng = cb->named_groups; uint32_t length = *(++pptr); @@ -6286,7 +6374,7 @@ for (;; pptr++) groupnumber = 0; if (meta == META_COND_RNUMBER) { - for (i = 1; i < (int)length; i++) + for (i = 1; i < length; i++) { groupnumber = groupnumber * 10 + name[i] - CHAR_0; if (groupnumber > MAX_GROUP_NUMBER) @@ -6608,7 +6696,7 @@ for (;; pptr++) if (firstcuflags == REQ_UNSET && subfirstcuflags != REQ_UNSET) { - if (subfirstcuflags >= 0) + if (subfirstcuflags < REQ_NONE) { firstcu = subfirstcu; firstcuflags = subfirstcuflags; @@ -6622,7 +6710,7 @@ for (;; pptr++) into reqcu if there wasn't one, using the vary flag that was in existence beforehand. */ - else if (subfirstcuflags >= 0 && subreqcuflags < 0) + else if (subfirstcuflags < REQ_NONE && subreqcuflags >= REQ_NONE) { subreqcu = subfirstcu; subreqcuflags = subfirstcuflags | tempreqvary; @@ -6631,7 +6719,7 @@ for (;; pptr++) /* If the subpattern set a required code unit (or set a first code unit that isn't really the first code unit - see above), set it. */ - if (subreqcuflags >= 0) + if (subreqcuflags < REQ_NONE) { reqcu = subreqcu; reqcuflags = subreqcuflags; @@ -6650,7 +6738,7 @@ for (;; pptr++) in that example, 'X' ends up set for both. */ else if ((bravalue == OP_ASSERT || bravalue == OP_ASSERT_NA) && - subreqcuflags >= 0 && subfirstcuflags >= 0) + subreqcuflags < REQ_NONE && subfirstcuflags < REQ_NONE) { reqcu = subreqcu; reqcuflags = subreqcuflags; @@ -6680,7 +6768,7 @@ for (;; pptr++) this name is duplicated. */ groupnumber = 0; - for (i = 0; i < cb->names_found; i++, ng++) + for (unsigned int i = 0; i < cb->names_found; i++, ng++) { if (length == ng->length && PRIV(strncmp)(name, ng->name, length) == 0) @@ -6935,14 +7023,19 @@ for (;; pptr++) #endif /* MAYBE_UTF_MULTI */ /* Handle the case of a single code unit - either with no UTF support, or - with UTF disabled, or for a single-code-unit UTF character. */ + with UTF disabled, or for a single-code-unit UTF character. In the latter + case, for a repeated positive match, get the caseless flag for the + required code unit from the previous character, because a class like [Aa] + sets a caseless A but by now the req_caseopt flag has been reset. */ + { mcbuffer[0] = code[-1]; mclength = 1; if (op_previous <= OP_CHARI && repeat_min > 1) { reqcu = mcbuffer[0]; - reqcuflags = req_caseopt | cb->req_varyopt; + reqcuflags = cb->req_varyopt; + if (op_previous == OP_CHARI) reqcuflags |= REQ_CASELESS; } } goto OUTPUT_SINGLE_REPEAT; /* Code shared with single character types */ @@ -7034,7 +7127,7 @@ for (;; pptr++) *lengthptr += delta; } - else for (i = 0; i < replicate; i++) + else for (int i = 0; i < replicate; i++) { memcpy(code, previous, CU2BYTES(1 + LINK_SIZE)); previous = code; @@ -7210,12 +7303,12 @@ for (;; pptr++) else { - if (groupsetfirstcu && reqcuflags < 0) + if (groupsetfirstcu && reqcuflags >= REQ_NONE) { reqcu = firstcu; reqcuflags = firstcuflags; } - for (i = 1; (uint32_t)i < repeat_min; i++) + for (uint32_t i = 1; i < repeat_min; i++) { memcpy(code, previous, CU2BYTES(len)); code += len; @@ -7259,14 +7352,14 @@ for (;; pptr++) /* This is compiling for real */ - else for (i = repeat_max - 1; i >= 0; i--) + else for (uint32_t i = repeat_max; i >= 1; i--) { *code++ = OP_BRAZERO + repeat_type; /* All but the final copy start a new nesting, maintaining the chain of brackets outstanding. */ - if (i != 0) + if (i != 1) { int linkoffset; *code++ = OP_BRA; @@ -7985,9 +8078,9 @@ Arguments: errorcodeptr -> pointer to error code variable skipunits skip this many code units at start (for brackets and OP_COND) firstcuptr place to put the first required code unit - firstcuflagsptr place to put the first code unit flags, or a negative number + firstcuflagsptr place to put the first code unit flags reqcuptr place to put the last required code unit - reqcuflagsptr place to put the last required code unit flags, or a negative number + reqcuflagsptr place to put the last required code unit flags bcptr pointer to the chain of currently open branches cb points to the data block with tables pointers etc. lengthptr NULL during the real compile phase @@ -8001,7 +8094,7 @@ Returns: 0 There has been an error static int compile_regex(uint32_t options, PCRE2_UCHAR **codeptr, uint32_t **pptrptr, int *errorcodeptr, uint32_t skipunits, uint32_t *firstcuptr, - int32_t *firstcuflagsptr, uint32_t *reqcuptr,int32_t *reqcuflagsptr, + uint32_t *firstcuflagsptr, uint32_t *reqcuptr, uint32_t *reqcuflagsptr, branch_chain *bcptr, compile_block *cb, PCRE2_SIZE *lengthptr) { PCRE2_UCHAR *code = *codeptr; @@ -8014,9 +8107,9 @@ int okreturn = 1; uint32_t *pptr = *pptrptr; uint32_t firstcu, reqcu; uint32_t lookbehindlength; -int32_t firstcuflags, reqcuflags; +uint32_t firstcuflags, reqcuflags; uint32_t branchfirstcu, branchreqcu; -int32_t branchfirstcuflags, branchreqcuflags; +uint32_t branchfirstcuflags, branchreqcuflags; PCRE2_SIZE length; branch_chain bc; @@ -8135,9 +8228,9 @@ for (;;) if (firstcuflags != branchfirstcuflags || firstcu != branchfirstcu) { - if (firstcuflags >= 0) + if (firstcuflags < REQ_NONE) { - if (reqcuflags < 0) + if (reqcuflags >= REQ_NONE) { reqcu = firstcu; reqcuflags = firstcuflags; @@ -8149,8 +8242,8 @@ for (;;) /* If we (now or from before) have no firstcu, a firstcu from the branch becomes a reqcu if there isn't a branch reqcu. */ - if (firstcuflags < 0 && branchfirstcuflags >= 0 && - branchreqcuflags < 0) + if (firstcuflags >= REQ_NONE && branchfirstcuflags < REQ_NONE && + branchreqcuflags >= REQ_NONE) { branchreqcu = branchfirstcu; branchreqcuflags = branchfirstcuflags; @@ -8298,7 +8391,7 @@ Returns: TRUE or FALSE */ static BOOL -is_anchored(PCRE2_SPTR code, unsigned int bracket_map, compile_block *cb, +is_anchored(PCRE2_SPTR code, uint32_t bracket_map, compile_block *cb, int atomcount, BOOL inassert) { do { @@ -8321,7 +8414,7 @@ do { op == OP_SCBRA || op == OP_SCBRAPOS) { int n = GET2(scode, 1+LINK_SIZE); - int new_map = bracket_map | ((n < 32)? (1u << n) : 1); + uint32_t new_map = bracket_map | ((n < 32)? (1u << n) : 1); if (!is_anchored(scode, new_map, cb, atomcount, inassert)) return FALSE; } @@ -8681,15 +8774,15 @@ Returns: the fixed first code unit, or 0 with REQ_NONE in flags */ static uint32_t -find_firstassertedcu(PCRE2_SPTR code, int32_t *flags, uint32_t inassert) +find_firstassertedcu(PCRE2_SPTR code, uint32_t *flags, uint32_t inassert) { uint32_t c = 0; -int cflags = REQ_NONE; +uint32_t cflags = REQ_NONE; *flags = REQ_NONE; do { uint32_t d; - int dflags; + uint32_t dflags; int xl = (*code == OP_CBRA || *code == OP_SCBRA || *code == OP_CBRAPOS || *code == OP_SCBRAPOS)? IMM2_SIZE:0; PCRE2_SPTR scode = first_significant_code(code + 1+LINK_SIZE + xl, TRUE); @@ -8712,9 +8805,8 @@ do { case OP_SCRIPT_RUN: d = find_firstassertedcu(scode, &dflags, inassert + ((op == OP_ASSERT || op == OP_ASSERT_NA)?1:0)); - if (dflags < 0) - return 0; - if (cflags < 0) { c = d; cflags = dflags; } + if (dflags >= REQ_NONE) return 0; + if (cflags >= REQ_NONE) { c = d; cflags = dflags; } else if (c != d || cflags != dflags) return 0; break; @@ -8727,7 +8819,7 @@ do { case OP_MINPLUS: case OP_POSPLUS: if (inassert == 0) return 0; - if (cflags < 0) { c = scode[1]; cflags = 0; } + if (cflags >= REQ_NONE) { c = scode[1]; cflags = 0; } else if (c != scode[1]) return 0; break; @@ -8753,7 +8845,7 @@ do { #endif #endif - if (cflags < 0) { c = scode[1]; cflags = REQ_CASELESS; } + if (cflags >= REQ_NONE) { c = scode[1]; cflags = REQ_CASELESS; } else if (c != scode[1]) return 0; break; } @@ -9689,7 +9781,7 @@ PCRE2_SIZE re_blocksize; /* Size of memory block */ PCRE2_SIZE big32count = 0; /* 32-bit literals >= 0x80000000 */ PCRE2_SIZE parsed_size_needed; /* Needed for parsed pattern */ -int32_t firstcuflags, reqcuflags; /* Type of first/req code unit */ +uint32_t firstcuflags, reqcuflags; /* Type of first/req code unit */ uint32_t firstcu, reqcu; /* Value of first/req code unit */ uint32_t setflags = 0; /* NL and BSR set flags */ @@ -10369,13 +10461,13 @@ if ((re->overall_options & PCRE2_NO_START_OPTIMIZE) == 0) (these are not saved during the compile because they can cause conflicts with actual literals that follow). */ - if (firstcuflags < 0) + if (firstcuflags >= REQ_NONE) firstcu = find_firstassertedcu(codestart, &firstcuflags, 0); /* Save the data for a first code unit. The existence of one means the minimum length must be at least 1. */ - if (firstcuflags >= 0) + if (firstcuflags < REQ_NONE) { re->first_codeunit = firstcu; re->flags |= PCRE2_FIRSTSET; @@ -10422,16 +10514,16 @@ if ((re->overall_options & PCRE2_NO_START_OPTIMIZE) == 0) different character and not a non-starting code unit of the first character, because the minimum length count is in characters, not code units. */ - if (reqcuflags >= 0) + if (reqcuflags < REQ_NONE) { #if PCRE2_CODE_UNIT_WIDTH == 16 if ((re->overall_options & PCRE2_UTF) == 0 || /* Not UTF */ - firstcuflags < 0 || /* First not set */ + firstcuflags >= REQ_NONE || /* First not set */ (firstcu & 0xf800) != 0xd800 || /* First not surrogate */ (reqcu & 0xfc00) != 0xdc00) /* Req not low surrogate */ #elif PCRE2_CODE_UNIT_WIDTH == 8 if ((re->overall_options & PCRE2_UTF) == 0 || /* Not UTF */ - firstcuflags < 0 || /* First not set */ + firstcuflags >= REQ_NONE || /* First not set */ (firstcu & 0x80) == 0 || /* First is ASCII */ (reqcu & 0x80) == 0) /* Req is ASCII */ #endif diff --git a/thirdparty/pcre2/src/pcre2_dfa_match.c b/thirdparty/pcre2/src/pcre2_dfa_match.c index 060dc7669a..d29130f2d0 100644 --- a/thirdparty/pcre2/src/pcre2_dfa_match.c +++ b/thirdparty/pcre2/src/pcre2_dfa_match.c @@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Original API code Copyright (c) 1997-2012 University of Cambridge - New API code Copyright (c) 2016-2021 University of Cambridge + New API code Copyright (c) 2016-2022 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -1193,6 +1193,11 @@ for (;;) OK = prop->script == code[2]; break; + case PT_SCX: + OK = (prop->script == code[2] || + MAPBIT(PRIV(ucd_script_sets) + UCD_SCRIPTX_PROP(prop), code[2]) != 0); + break; + /* These are specials for combination cases. */ case PT_ALNUM: @@ -1240,6 +1245,15 @@ for (;;) c >= 0xe000; break; + case PT_BIDICL: + OK = UCD_BIDICLASS(c) == code[2]; + break; + + case PT_BOOL: + OK = MAPBIT(PRIV(ucd_boolprop_sets) + + UCD_BPROPS_PROP(prop), code[2]) != 0; + break; + /* Should never occur, but keep compilers from grumbling. */ default: @@ -1451,6 +1465,11 @@ for (;;) OK = prop->script == code[3]; break; + case PT_SCX: + OK = (prop->script == code[3] || + MAPBIT(PRIV(ucd_script_sets) + UCD_SCRIPTX_PROP(prop), code[3]) != 0); + break; + /* These are specials for combination cases. */ case PT_ALNUM: @@ -1498,6 +1517,15 @@ for (;;) c >= 0xe000; break; + case PT_BIDICL: + OK = UCD_BIDICLASS(c) == code[3]; + break; + + case PT_BOOL: + OK = MAPBIT(PRIV(ucd_boolprop_sets) + + UCD_BPROPS_PROP(prop), code[3]) != 0; + break; + /* Should never occur, but keep compilers from grumbling. */ default: @@ -1692,6 +1720,11 @@ for (;;) OK = prop->script == code[3]; break; + case PT_SCX: + OK = (prop->script == code[3] || + MAPBIT(PRIV(ucd_script_sets) + UCD_SCRIPTX_PROP(prop), code[3]) != 0); + break; + /* These are specials for combination cases. */ case PT_ALNUM: @@ -1739,6 +1772,15 @@ for (;;) c >= 0xe000; break; + case PT_BIDICL: + OK = UCD_BIDICLASS(c) == code[3]; + break; + + case PT_BOOL: + OK = MAPBIT(PRIV(ucd_boolprop_sets) + + UCD_BPROPS_PROP(prop), code[3]) != 0; + break; + /* Should never occur, but keep compilers from grumbling. */ default: @@ -1958,6 +2000,12 @@ for (;;) OK = prop->script == code[1 + IMM2_SIZE + 2]; break; + case PT_SCX: + OK = (prop->script == code[1 + IMM2_SIZE + 2] || + MAPBIT(PRIV(ucd_script_sets) + UCD_SCRIPTX_PROP(prop), + code[1 + IMM2_SIZE + 2]) != 0); + break; + /* These are specials for combination cases. */ case PT_ALNUM: @@ -2005,6 +2053,15 @@ for (;;) c >= 0xe000; break; + case PT_BIDICL: + OK = UCD_BIDICLASS(c) == code[1 + IMM2_SIZE + 2]; + break; + + case PT_BOOL: + OK = MAPBIT(PRIV(ucd_boolprop_sets) + + UCD_BPROPS_PROP(prop), code[1 + IMM2_SIZE + 2]) != 0; + break; + /* Should never occur, but keep compilers from grumbling. */ default: @@ -3285,20 +3342,22 @@ rws->next = NULL; rws->size = RWS_BASE_SIZE; rws->free = RWS_BASE_SIZE - RWS_ANCHOR_SIZE; -/* A length equal to PCRE2_ZERO_TERMINATED implies a zero-terminated -subject string. */ +/* Recognize NULL, length 0 as an empty string. */ -if (length == PCRE2_ZERO_TERMINATED) - { - length = PRIV(strlen)(subject); - was_zero_terminated = 1; - } +if (subject == NULL && length == 0) subject = (PCRE2_SPTR)""; /* Plausibility checks */ if ((options & ~PUBLIC_DFA_MATCH_OPTIONS) != 0) return PCRE2_ERROR_BADOPTION; if (re == NULL || subject == NULL || workspace == NULL || match_data == NULL) return PCRE2_ERROR_NULL; + +if (length == PCRE2_ZERO_TERMINATED) + { + length = PRIV(strlen)(subject); + was_zero_terminated = 1; + } + if (wscount < 20) return PCRE2_ERROR_DFA_WSSIZE; if (start_offset > length) return PCRE2_ERROR_BADOFFSET; diff --git a/thirdparty/pcre2/src/pcre2_error.c b/thirdparty/pcre2/src/pcre2_error.c index 3dee63d0db..09904c03e3 100644 --- a/thirdparty/pcre2/src/pcre2_error.c +++ b/thirdparty/pcre2/src/pcre2_error.c @@ -119,7 +119,7 @@ static const unsigned char compile_error_texts[] = /* 45 */ "this version of PCRE2 does not have support for \\P, \\p, or \\X\0" "malformed \\P or \\p sequence\0" - "unknown property name after \\P or \\p\0" + "unknown property after \\P or \\p\0" "subpattern name is too long (maximum " XSTRING(MAX_NAME_SIZE) " code units)\0" "too many named subpatterns (maximum " XSTRING(MAX_NAME_COUNT) ")\0" /* 50 */ @@ -253,7 +253,7 @@ static const unsigned char match_error_texts[] = "unknown substring\0" /* 50 */ "non-unique substring name\0" - "NULL argument passed\0" + "NULL argument passed with non-zero length\0" "nested recursion at the same subject position\0" "matching depth limit exceeded\0" "requested value is not available\0" diff --git a/thirdparty/pcre2/src/pcre2_extuni.c b/thirdparty/pcre2/src/pcre2_extuni.c index 5a719e9cb4..b23946b0d1 100644 --- a/thirdparty/pcre2/src/pcre2_extuni.c +++ b/thirdparty/pcre2/src/pcre2_extuni.c @@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Original API code Copyright (c) 1997-2012 University of Cambridge - New API code Copyright (c) 2016-2019 University of Cambridge + New API code Copyright (c) 2016-2021 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -105,7 +105,7 @@ while (eptr < end_subject) /* Not breaking between Regional Indicators is allowed only if there are an even number of preceding RIs. */ - if (lgb == ucp_gbRegionalIndicator && rgb == ucp_gbRegionalIndicator) + if (lgb == ucp_gbRegional_Indicator && rgb == ucp_gbRegional_Indicator) { int ricount = 0; PCRE2_SPTR bptr = eptr - 1; @@ -123,7 +123,7 @@ while (eptr < end_subject) } else c = *bptr; - if (UCD_GRAPHBREAK(c) != ucp_gbRegionalIndicator) break; + if (UCD_GRAPHBREAK(c) != ucp_gbRegional_Indicator) break; ricount++; } if ((ricount & 1) != 0) break; /* Grapheme break required */ diff --git a/thirdparty/pcre2/src/pcre2_internal.h b/thirdparty/pcre2/src/pcre2_internal.h index d8fad1e93b..fe7a0e005a 100644 --- a/thirdparty/pcre2/src/pcre2_internal.h +++ b/thirdparty/pcre2/src/pcre2_internal.h @@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Original API code Copyright (c) 1997-2012 University of Cambridge - New API code Copyright (c) 2016-2020 University of Cambridge + New API code Copyright (c) 2016-2022 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -954,6 +954,13 @@ a positive value. */ #define STRING_LIMIT_RECURSION_EQ "LIMIT_RECURSION=" #define STRING_MARK "MARK" +#define STRING_bc "bc" +#define STRING_bidiclass "bidiclass" +#define STRING_sc "sc" +#define STRING_script "script" +#define STRING_scriptextensions "scriptextensions" +#define STRING_scx "scx" + #else /* SUPPORT_UNICODE */ /* UTF-8 support is enabled; always use UTF-8 (=ASCII) character codes. This @@ -1248,26 +1255,39 @@ only. */ #define STRING_LIMIT_RECURSION_EQ STR_L STR_I STR_M STR_I STR_T STR_UNDERSCORE STR_R STR_E STR_C STR_U STR_R STR_S STR_I STR_O STR_N STR_EQUALS_SIGN #define STRING_MARK STR_M STR_A STR_R STR_K +#define STRING_bc STR_b STR_c +#define STRING_bidiclass STR_b STR_i STR_d STR_i STR_c STR_l STR_a STR_s STR_s +#define STRING_sc STR_s STR_c +#define STRING_script STR_s STR_c STR_r STR_i STR_p STR_t +#define STRING_scriptextensions STR_s STR_c STR_r STR_i STR_p STR_t STR_e STR_x STR_t STR_e STR_n STR_s STR_i STR_o STR_n STR_s +#define STRING_scx STR_s STR_c STR_x + + #endif /* SUPPORT_UNICODE */ /* -------------------- End of character and string names -------------------*/ /* -------------------- Definitions for compiled patterns -------------------*/ -/* Codes for different types of Unicode property */ +/* Codes for different types of Unicode property. If these definitions are +changed, the autopossessifying table in pcre2_auto_possess.c must be updated to +match. */ #define PT_ANY 0 /* Any property - matches all chars */ #define PT_LAMP 1 /* L& - the union of Lu, Ll, Lt */ #define PT_GC 2 /* Specified general characteristic (e.g. L) */ #define PT_PC 3 /* Specified particular characteristic (e.g. Lu) */ -#define PT_SC 4 /* Script (e.g. Han) */ -#define PT_ALNUM 5 /* Alphanumeric - the union of L and N */ -#define PT_SPACE 6 /* Perl space - Z plus 9,10,12,13 */ -#define PT_PXSPACE 7 /* POSIX space - Z plus 9,10,11,12,13 */ -#define PT_WORD 8 /* Word - L plus N plus underscore */ -#define PT_CLIST 9 /* Pseudo-property: match character list */ -#define PT_UCNC 10 /* Universal Character nameable character */ -#define PT_TABSIZE 11 /* Size of square table for autopossessify tests */ +#define PT_SC 4 /* Script only (e.g. Han) */ +#define PT_SCX 5 /* Script extensions (includes SC) */ +#define PT_ALNUM 6 /* Alphanumeric - the union of L and N */ +#define PT_SPACE 7 /* Perl space - general category Z plus 9,10,12,13 */ +#define PT_PXSPACE 8 /* POSIX space - Z plus 9,10,11,12,13 */ +#define PT_WORD 9 /* Word - L plus N plus underscore */ +#define PT_CLIST 10 /* Pseudo-property: match character list */ +#define PT_UCNC 11 /* Universal Character nameable character */ +#define PT_BIDICL 12 /* Specified bidi class */ +#define PT_BOOL 13 /* Boolean property */ +#define PT_TABSIZE 14 /* Size of square table for autopossessify tests */ /* The following special properties are used only in XCLASS items, when POSIX classes are specified and PCRE2_UCP is set - in other words, for Unicode @@ -1275,22 +1295,27 @@ handling of these classes. They are not available via the \p or \P escapes like those in the above list, and so they do not take part in the autopossessifying table. */ -#define PT_PXGRAPH 11 /* [:graph:] - characters that mark the paper */ -#define PT_PXPRINT 12 /* [:print:] - [:graph:] plus non-control spaces */ -#define PT_PXPUNCT 13 /* [:punct:] - punctuation characters */ +#define PT_PXGRAPH 14 /* [:graph:] - characters that mark the paper */ +#define PT_PXPRINT 15 /* [:print:] - [:graph:] plus non-control spaces */ +#define PT_PXPUNCT 16 /* [:punct:] - punctuation characters */ + +/* This value is used when parsing \p and \P escapes to indicate that neither +\p{script:...} nor \p{scx:...} has been encountered. */ + +#define PT_NOTSCRIPT 255 /* Flag bits and data types for the extended class (OP_XCLASS) for classes that contain characters with values greater than 255. */ -#define XCL_NOT 0x01 /* Flag: this is a negative class */ -#define XCL_MAP 0x02 /* Flag: a 32-byte map is present */ -#define XCL_HASPROP 0x04 /* Flag: property checks are present. */ +#define XCL_NOT 0x01 /* Flag: this is a negative class */ +#define XCL_MAP 0x02 /* Flag: a 32-byte map is present */ +#define XCL_HASPROP 0x04 /* Flag: property checks are present. */ -#define XCL_END 0 /* Marks end of individual items */ -#define XCL_SINGLE 1 /* Single item (one multibyte char) follows */ -#define XCL_RANGE 2 /* A range (two multibyte chars) follows */ -#define XCL_PROP 3 /* Unicode property (2-byte property code follows) */ -#define XCL_NOTPROP 4 /* Unicode inverted property (ditto) */ +#define XCL_END 0 /* Marks end of individual items */ +#define XCL_SINGLE 1 /* Single item (one multibyte char) follows */ +#define XCL_RANGE 2 /* A range (two multibyte chars) follows */ +#define XCL_PROP 3 /* Unicode property (2-byte property code follows) */ +#define XCL_NOTPROP 4 /* Unicode inverted property (ditto) */ /* These are escaped items that aren't just an encoding of a particular data value such as \n. They must have non-zero values, as check_escape() returns 0 @@ -1797,8 +1822,8 @@ typedef struct { uint8_t gbprop; /* ucp_gbControl, etc. (grapheme break property) */ uint8_t caseset; /* offset to multichar other cases or zero */ int32_t other_case; /* offset to other case, or zero if none */ - int16_t scriptx; /* script extension value */ - int16_t dummy; /* spare - to round to multiple of 4 bytes */ + uint16_t scriptx_bidiclass; /* script extension (11 bit) and bidi class (5 bit) values */ + uint16_t bprops; /* binary properties offset */ } ucd_record; /* UCD access macros */ @@ -1815,13 +1840,30 @@ typedef struct { #define GET_UCD(ch) REAL_GET_UCD(ch) #endif +#define UCD_SCRIPTX_MASK 0x3ff +#define UCD_BIDICLASS_SHIFT 11 +#define UCD_BPROPS_MASK 0xfff + +#define UCD_SCRIPTX_PROP(prop) ((prop)->scriptx_bidiclass & UCD_SCRIPTX_MASK) +#define UCD_BIDICLASS_PROP(prop) ((prop)->scriptx_bidiclass >> UCD_BIDICLASS_SHIFT) +#define UCD_BPROPS_PROP(prop) ((prop)->bprops & UCD_BPROPS_MASK) + #define UCD_CHARTYPE(ch) GET_UCD(ch)->chartype #define UCD_SCRIPT(ch) GET_UCD(ch)->script #define UCD_CATEGORY(ch) PRIV(ucp_gentype)[UCD_CHARTYPE(ch)] #define UCD_GRAPHBREAK(ch) GET_UCD(ch)->gbprop #define UCD_CASESET(ch) GET_UCD(ch)->caseset #define UCD_OTHERCASE(ch) ((uint32_t)((int)ch + (int)(GET_UCD(ch)->other_case))) -#define UCD_SCRIPTX(ch) GET_UCD(ch)->scriptx +#define UCD_SCRIPTX(ch) UCD_SCRIPTX_PROP(GET_UCD(ch)) +#define UCD_BPROPS(ch) UCD_BPROPS_PROP(GET_UCD(ch)) +#define UCD_BIDICLASS(ch) UCD_BIDICLASS_PROP(GET_UCD(ch)) + +/* The "scriptx" and bprops fields contain offsets into vectors of 32-bit words +that form a bitmap representing a list of scripts or boolean properties. These +macros test or set a bit in the map by number. */ + +#define MAPBIT(map,n) ((map)[(n)/32]&(1u<<((n)%32))) +#define MAPSET(map,n) ((map)[(n)/32]|=(1u<<((n)%32))) /* Header for serialized pcre2 codes. */ @@ -1878,6 +1920,7 @@ extern const uint8_t PRIV(utf8_table4)[]; #endif #define _pcre2_hspace_list PCRE2_SUFFIX(_pcre2_hspace_list_) #define _pcre2_vspace_list PCRE2_SUFFIX(_pcre2_vspace_list_) +#define _pcre2_ucd_boolprop_sets PCRE2_SUFFIX(_pcre2_ucd_boolprop_sets_) #define _pcre2_ucd_caseless_sets PCRE2_SUFFIX(_pcre2_ucd_caseless_sets_) #define _pcre2_ucd_digit_sets PCRE2_SUFFIX(_pcre2_ucd_digit_sets_) #define _pcre2_ucd_script_sets PCRE2_SUFFIX(_pcre2_ucd_script_sets_) @@ -1901,9 +1944,10 @@ extern const pcre2_match_context PRIV(default_match_context); extern const uint8_t PRIV(default_tables)[]; extern const uint32_t PRIV(hspace_list)[]; extern const uint32_t PRIV(vspace_list)[]; +extern const uint32_t PRIV(ucd_boolprop_sets)[]; extern const uint32_t PRIV(ucd_caseless_sets)[]; extern const uint32_t PRIV(ucd_digit_sets)[]; -extern const uint8_t PRIV(ucd_script_sets)[]; +extern const uint32_t PRIV(ucd_script_sets)[]; extern const ucd_record PRIV(ucd_records)[]; #if PCRE2_CODE_UNIT_WIDTH == 32 extern const ucd_record PRIV(dummy_ucd_record)[]; diff --git a/thirdparty/pcre2/src/pcre2_intmodedep.h b/thirdparty/pcre2/src/pcre2_intmodedep.h index ea3b3ec698..f8a3d25de6 100644 --- a/thirdparty/pcre2/src/pcre2_intmodedep.h +++ b/thirdparty/pcre2/src/pcre2_intmodedep.h @@ -519,7 +519,7 @@ it is. This is called only in UTF-32 mode - we don't put a test within the macro because almost all calls are already within a block of UTF-32 only code. -These are all no-ops since all UTF-32 characters fit into one pcre_uchar. */ +These are all no-ops since all UTF-32 characters fit into one PCRE2_UCHAR. */ #define BACKCHAR(eptr) do { } while (0) @@ -747,8 +747,8 @@ typedef struct compile_block { uint32_t class_range_start; /* Overall class range start */ uint32_t class_range_end; /* Overall class range end */ PCRE2_UCHAR nl[4]; /* Newline string when fixed length */ + uint32_t req_varyopt; /* "After variable item" flag for reqbyte */ int max_lookbehind; /* Maximum lookbehind (characters) */ - int req_varyopt; /* "After variable item" flag for reqbyte */ BOOL had_accept; /* (*ACCEPT) encountered */ BOOL had_pruneorskip; /* (*PRUNE) or (*SKIP) encountered */ BOOL had_recurse; /* Had a recursion or subroutine call */ @@ -764,7 +764,7 @@ typedef struct pcre2_real_jit_stack { } pcre2_real_jit_stack; /* Structure for items in a linked list that represents an explicit recursive -call within the pattern when running pcre_dfa_match(). */ +call within the pattern when running pcre2_dfa_match(). */ typedef struct dfa_recursion_info { struct dfa_recursion_info *prevrec; @@ -838,6 +838,17 @@ multiple of PCRE2_SIZE. See various comments above. */ typedef char check_heapframe_size[ ((sizeof(heapframe) % sizeof(PCRE2_SIZE)) == 0)? (+1):(-1)]; +/* Structure for computing the alignment of heapframe. */ + +typedef struct heapframe_align { + char unalign; /* Completely unalign the current offset */ + heapframe frame; /* Offset is its alignment */ +} heapframe_align; + +/* This define is the minimum alignment required for a heapframe, in bytes. */ + +#define HEAPFRAME_ALIGNMENT offsetof(heapframe_align, frame) + /* Structure for passing "static" information around between the functions doing traditional NFA matching (pcre2_match() and friends). */ diff --git a/thirdparty/pcre2/src/pcre2_jit_compile.c b/thirdparty/pcre2/src/pcre2_jit_compile.c index db2ce65598..d726c3ca04 100644 --- a/thirdparty/pcre2/src/pcre2_jit_compile.c +++ b/thirdparty/pcre2/src/pcre2_jit_compile.c @@ -8,7 +8,7 @@ and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel This module by Zoltan Herczeg Original API code Copyright (c) 1997-2012 University of Cambridge - New API code Copyright (c) 2016-2019 University of Cambridge + New API code Copyright (c) 2016-2021 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -413,6 +413,9 @@ typedef struct compiler_common { /* Locals used by fast fail optimization. */ sljit_s32 early_fail_start_ptr; sljit_s32 early_fail_end_ptr; + /* Variables used by recursive call generator. */ + sljit_s32 recurse_bitset_size; + uint8_t *recurse_bitset; /* Flipped and lower case tables. */ const sljit_u8 *fcc; @@ -613,6 +616,8 @@ the start pointers when the end of the capturing group has not yet reached. */ sljit_emit_op1(compiler, (op), (dst), (dstw), (src), (srcw)) #define OP2(op, dst, dstw, src1, src1w, src2, src2w) \ sljit_emit_op2(compiler, (op), (dst), (dstw), (src1), (src1w), (src2), (src2w)) +#define OP2U(op, src1, src1w, src2, src2w) \ + sljit_emit_op2u(compiler, (op), (src1), (src1w), (src2), (src2w)) #define OP_SRC(op, src, srcw) \ sljit_emit_op_src(compiler, (op), (src), (srcw)) #define LABEL() \ @@ -1621,7 +1626,7 @@ if (end[-(1 + LINK_SIZE)] != OP_KET || PRIVATE_DATA(begin) != 0) /* /(?:AB){4,6}/ is currently converted to /(?:AB){3}(?AB){1,3}/ * Skip the check of the second part. */ -if (PRIVATE_DATA(end - LINK_SIZE) == 0) +if (PRIVATE_DATA(end - LINK_SIZE) != 0) return TRUE; next = end; @@ -2315,22 +2320,47 @@ for (i = 0; i < RECURSE_TMP_REG_COUNT; i++) #undef RECURSE_TMP_REG_COUNT -static int get_recurse_data_length(compiler_common *common, PCRE2_SPTR cc, PCRE2_SPTR ccend, - BOOL *needs_control_head, BOOL *has_quit, BOOL *has_accept) +static BOOL recurse_check_bit(compiler_common *common, sljit_sw bit_index) +{ +uint8_t *byte; +uint8_t mask; + +SLJIT_ASSERT((bit_index & (sizeof(sljit_sw) - 1)) == 0); + +bit_index >>= SLJIT_WORD_SHIFT; + +SLJIT_ASSERT((bit_index >> 3) < common->recurse_bitset_size); + +mask = 1 << (bit_index & 0x7); +byte = common->recurse_bitset + (bit_index >> 3); + +if (*byte & mask) + return FALSE; + +*byte |= mask; +return TRUE; +} + +enum get_recurse_flags { + recurse_flag_quit_found = (1 << 0), + recurse_flag_accept_found = (1 << 1), + recurse_flag_setsom_found = (1 << 2), + recurse_flag_setmark_found = (1 << 3), + recurse_flag_control_head_found = (1 << 4), +}; + +static int get_recurse_data_length(compiler_common *common, PCRE2_SPTR cc, PCRE2_SPTR ccend, uint32_t *result_flags) { int length = 1; -int size; +int size, offset; PCRE2_SPTR alternative; -BOOL quit_found = FALSE; -BOOL accept_found = FALSE; -BOOL setsom_found = FALSE; -BOOL setmark_found = FALSE; -BOOL capture_last_found = FALSE; -BOOL control_head_found = FALSE; +uint32_t recurse_flags = 0; + +memset(common->recurse_bitset, 0, common->recurse_bitset_size); #if defined DEBUG_FORCE_CONTROL_HEAD && DEBUG_FORCE_CONTROL_HEAD SLJIT_ASSERT(common->control_head_ptr != 0); -control_head_found = TRUE; +recurse_flags |= recurse_flag_control_head_found; #endif /* Calculate the sum of the private machine words. */ @@ -2341,24 +2371,26 @@ while (cc < ccend) { case OP_SET_SOM: SLJIT_ASSERT(common->has_set_som); - setsom_found = TRUE; + recurse_flags |= recurse_flag_setsom_found; cc += 1; break; case OP_RECURSE: if (common->has_set_som) - setsom_found = TRUE; + recurse_flags |= recurse_flag_setsom_found; if (common->mark_ptr != 0) - setmark_found = TRUE; - if (common->capture_last_ptr != 0) - capture_last_found = TRUE; + recurse_flags |= recurse_flag_setmark_found; + if (common->capture_last_ptr != 0 && recurse_check_bit(common, common->capture_last_ptr)) + length++; cc += 1 + LINK_SIZE; break; case OP_KET: - if (PRIVATE_DATA(cc) != 0) + offset = PRIVATE_DATA(cc); + if (offset != 0) { - length++; + if (recurse_check_bit(common, offset)) + length++; SLJIT_ASSERT(PRIVATE_DATA(cc + 1) != 0); cc += PRIVATE_DATA(cc + 1); } @@ -2377,39 +2409,55 @@ while (cc < ccend) case OP_SBRA: case OP_SBRAPOS: case OP_SCOND: - length++; SLJIT_ASSERT(PRIVATE_DATA(cc) != 0); + if (recurse_check_bit(common, PRIVATE_DATA(cc))) + length++; cc += 1 + LINK_SIZE; break; case OP_CBRA: case OP_SCBRA: - length += 2; - if (common->capture_last_ptr != 0) - capture_last_found = TRUE; - if (common->optimized_cbracket[GET2(cc, 1 + LINK_SIZE)] == 0) + offset = GET2(cc, 1 + LINK_SIZE); + if (recurse_check_bit(common, OVECTOR(offset << 1))) + { + SLJIT_ASSERT(recurse_check_bit(common, OVECTOR((offset << 1) + 1))); + length += 2; + } + if (common->optimized_cbracket[offset] == 0 && recurse_check_bit(common, OVECTOR_PRIV(offset))) + length++; + if (common->capture_last_ptr != 0 && recurse_check_bit(common, common->capture_last_ptr)) length++; cc += 1 + LINK_SIZE + IMM2_SIZE; break; case OP_CBRAPOS: case OP_SCBRAPOS: - length += 2 + 2; - if (common->capture_last_ptr != 0) - capture_last_found = TRUE; + offset = GET2(cc, 1 + LINK_SIZE); + if (recurse_check_bit(common, OVECTOR(offset << 1))) + { + SLJIT_ASSERT(recurse_check_bit(common, OVECTOR((offset << 1) + 1))); + length += 2; + } + if (recurse_check_bit(common, OVECTOR_PRIV(offset))) + length++; + if (recurse_check_bit(common, PRIVATE_DATA(cc))) + length++; + if (common->capture_last_ptr != 0 && recurse_check_bit(common, common->capture_last_ptr)) + length++; cc += 1 + LINK_SIZE + IMM2_SIZE; break; case OP_COND: /* Might be a hidden SCOND. */ alternative = cc + GET(cc, 1); - if (*alternative == OP_KETRMAX || *alternative == OP_KETRMIN) + if ((*alternative == OP_KETRMAX || *alternative == OP_KETRMIN) && recurse_check_bit(common, PRIVATE_DATA(cc))) length++; cc += 1 + LINK_SIZE; break; CASE_ITERATOR_PRIVATE_DATA_1 - if (PRIVATE_DATA(cc) != 0) + offset = PRIVATE_DATA(cc); + if (offset != 0 && recurse_check_bit(common, offset)) length++; cc += 2; #ifdef SUPPORT_UNICODE @@ -2418,8 +2466,12 @@ while (cc < ccend) break; CASE_ITERATOR_PRIVATE_DATA_2A - if (PRIVATE_DATA(cc) != 0) + offset = PRIVATE_DATA(cc); + if (offset != 0 && recurse_check_bit(common, offset)) + { + SLJIT_ASSERT(recurse_check_bit(common, offset + sizeof(sljit_sw))); length += 2; + } cc += 2; #ifdef SUPPORT_UNICODE if (common->utf && HAS_EXTRALEN(cc[-1])) cc += GET_EXTRALEN(cc[-1]); @@ -2427,8 +2479,12 @@ while (cc < ccend) break; CASE_ITERATOR_PRIVATE_DATA_2B - if (PRIVATE_DATA(cc) != 0) + offset = PRIVATE_DATA(cc); + if (offset != 0 && recurse_check_bit(common, offset)) + { + SLJIT_ASSERT(recurse_check_bit(common, offset + sizeof(sljit_sw))); length += 2; + } cc += 2 + IMM2_SIZE; #ifdef SUPPORT_UNICODE if (common->utf && HAS_EXTRALEN(cc[-1])) cc += GET_EXTRALEN(cc[-1]); @@ -2436,20 +2492,29 @@ while (cc < ccend) break; CASE_ITERATOR_TYPE_PRIVATE_DATA_1 - if (PRIVATE_DATA(cc) != 0) + offset = PRIVATE_DATA(cc); + if (offset != 0 && recurse_check_bit(common, offset)) length++; cc += 1; break; CASE_ITERATOR_TYPE_PRIVATE_DATA_2A - if (PRIVATE_DATA(cc) != 0) + offset = PRIVATE_DATA(cc); + if (offset != 0 && recurse_check_bit(common, offset)) + { + SLJIT_ASSERT(recurse_check_bit(common, offset + sizeof(sljit_sw))); length += 2; + } cc += 1; break; CASE_ITERATOR_TYPE_PRIVATE_DATA_2B - if (PRIVATE_DATA(cc) != 0) + offset = PRIVATE_DATA(cc); + if (offset != 0 && recurse_check_bit(common, offset)) + { + SLJIT_ASSERT(recurse_check_bit(common, offset + sizeof(sljit_sw))); length += 2; + } cc += 1 + IMM2_SIZE; break; @@ -2461,7 +2526,9 @@ while (cc < ccend) #else size = 1 + 32 / (int)sizeof(PCRE2_UCHAR); #endif - if (PRIVATE_DATA(cc) != 0) + + offset = PRIVATE_DATA(cc); + if (offset != 0 && recurse_check_bit(common, offset)) length += get_class_iterator_size(cc + size); cc += size; break; @@ -2471,12 +2538,11 @@ while (cc < ccend) case OP_PRUNE_ARG: case OP_THEN_ARG: SLJIT_ASSERT(common->mark_ptr != 0); - if (!setmark_found) - setmark_found = TRUE; + recurse_flags |= recurse_flag_setmark_found; if (common->control_head_ptr != 0) - control_head_found = TRUE; + recurse_flags |= recurse_flag_control_head_found; if (*cc != OP_MARK) - quit_found = TRUE; + recurse_flags |= recurse_flag_quit_found; cc += 1 + 2 + cc[1]; break; @@ -2484,26 +2550,24 @@ while (cc < ccend) case OP_PRUNE: case OP_SKIP: case OP_COMMIT: - quit_found = TRUE; + recurse_flags |= recurse_flag_quit_found; cc++; break; case OP_SKIP_ARG: - quit_found = TRUE; + recurse_flags |= recurse_flag_quit_found; cc += 1 + 2 + cc[1]; break; case OP_THEN: SLJIT_ASSERT(common->control_head_ptr != 0); - quit_found = TRUE; - if (!control_head_found) - control_head_found = TRUE; + recurse_flags |= recurse_flag_quit_found | recurse_flag_control_head_found; cc++; break; case OP_ACCEPT: case OP_ASSERT_ACCEPT: - accept_found = TRUE; + recurse_flags |= recurse_flag_accept_found; cc++; break; @@ -2515,21 +2579,17 @@ while (cc < ccend) } SLJIT_ASSERT(cc == ccend); -if (control_head_found) +if (recurse_flags & recurse_flag_control_head_found) length++; -if (capture_last_found) - length++; -if (quit_found) +if (recurse_flags & recurse_flag_quit_found) { - if (setsom_found) + if (recurse_flags & recurse_flag_setsom_found) length++; - if (setmark_found) + if (recurse_flags & recurse_flag_setmark_found) length++; } -*needs_control_head = control_head_found; -*has_quit = quit_found; -*has_accept = accept_found; +*result_flags = recurse_flags; return length; } @@ -2542,7 +2602,7 @@ enum copy_recurse_data_types { }; static void copy_recurse_data(compiler_common *common, PCRE2_SPTR cc, PCRE2_SPTR ccend, - int type, int stackptr, int stacktop, BOOL has_quit) + int type, int stackptr, int stacktop, uint32_t recurse_flags) { delayed_mem_copy_status status; PCRE2_SPTR alternative; @@ -2551,14 +2611,12 @@ sljit_sw shared_srcw[3]; sljit_sw kept_shared_srcw[2]; int private_count, shared_count, kept_shared_count; int from_sp, base_reg, offset, i; -BOOL setsom_found = FALSE; -BOOL setmark_found = FALSE; -BOOL capture_last_found = FALSE; -BOOL control_head_found = FALSE; + +memset(common->recurse_bitset, 0, common->recurse_bitset_size); #if defined DEBUG_FORCE_CONTROL_HEAD && DEBUG_FORCE_CONTROL_HEAD SLJIT_ASSERT(common->control_head_ptr != 0); -control_head_found = TRUE; +recurse_check_bit(common, common->control_head_ptr); #endif switch (type) @@ -2646,45 +2704,42 @@ while (cc < ccend) { case OP_SET_SOM: SLJIT_ASSERT(common->has_set_som); - if (has_quit && !setsom_found) + if ((recurse_flags & recurse_flag_quit_found) && recurse_check_bit(common, OVECTOR(0))) { kept_shared_srcw[0] = OVECTOR(0); kept_shared_count = 1; - setsom_found = TRUE; } cc += 1; break; case OP_RECURSE: - if (has_quit) + if (recurse_flags & recurse_flag_quit_found) { - if (common->has_set_som && !setsom_found) + if (common->has_set_som && recurse_check_bit(common, OVECTOR(0))) { kept_shared_srcw[0] = OVECTOR(0); kept_shared_count = 1; - setsom_found = TRUE; } - if (common->mark_ptr != 0 && !setmark_found) + if (common->mark_ptr != 0 && recurse_check_bit(common, common->mark_ptr)) { kept_shared_srcw[kept_shared_count] = common->mark_ptr; kept_shared_count++; - setmark_found = TRUE; } } - if (common->capture_last_ptr != 0 && !capture_last_found) + if (common->capture_last_ptr != 0 && recurse_check_bit(common, common->capture_last_ptr)) { shared_srcw[0] = common->capture_last_ptr; shared_count = 1; - capture_last_found = TRUE; } cc += 1 + LINK_SIZE; break; case OP_KET: - if (PRIVATE_DATA(cc) != 0) + private_srcw[0] = PRIVATE_DATA(cc); + if (private_srcw[0] != 0) { - private_count = 1; - private_srcw[0] = PRIVATE_DATA(cc); + if (recurse_check_bit(common, private_srcw[0])) + private_count = 1; SLJIT_ASSERT(PRIVATE_DATA(cc + 1) != 0); cc += PRIVATE_DATA(cc + 1); } @@ -2703,50 +2758,66 @@ while (cc < ccend) case OP_SBRA: case OP_SBRAPOS: case OP_SCOND: - private_count = 1; private_srcw[0] = PRIVATE_DATA(cc); + if (recurse_check_bit(common, private_srcw[0])) + private_count = 1; cc += 1 + LINK_SIZE; break; case OP_CBRA: case OP_SCBRA: - offset = (GET2(cc, 1 + LINK_SIZE)) << 1; - shared_srcw[0] = OVECTOR(offset); - shared_srcw[1] = OVECTOR(offset + 1); - shared_count = 2; + offset = GET2(cc, 1 + LINK_SIZE); + shared_srcw[0] = OVECTOR(offset << 1); + if (recurse_check_bit(common, shared_srcw[0])) + { + shared_srcw[1] = shared_srcw[0] + sizeof(sljit_sw); + SLJIT_ASSERT(recurse_check_bit(common, shared_srcw[1])); + shared_count = 2; + } - if (common->capture_last_ptr != 0 && !capture_last_found) + if (common->capture_last_ptr != 0 && recurse_check_bit(common, common->capture_last_ptr)) { - shared_srcw[2] = common->capture_last_ptr; - shared_count = 3; - capture_last_found = TRUE; + shared_srcw[shared_count] = common->capture_last_ptr; + shared_count++; } - if (common->optimized_cbracket[GET2(cc, 1 + LINK_SIZE)] == 0) + if (common->optimized_cbracket[offset] == 0) { - private_count = 1; - private_srcw[0] = OVECTOR_PRIV(GET2(cc, 1 + LINK_SIZE)); + private_srcw[0] = OVECTOR_PRIV(offset); + if (recurse_check_bit(common, private_srcw[0])) + private_count = 1; } + cc += 1 + LINK_SIZE + IMM2_SIZE; break; case OP_CBRAPOS: case OP_SCBRAPOS: - offset = (GET2(cc, 1 + LINK_SIZE)) << 1; - shared_srcw[0] = OVECTOR(offset); - shared_srcw[1] = OVECTOR(offset + 1); - shared_count = 2; + offset = GET2(cc, 1 + LINK_SIZE); + shared_srcw[0] = OVECTOR(offset << 1); + if (recurse_check_bit(common, shared_srcw[0])) + { + shared_srcw[1] = shared_srcw[0] + sizeof(sljit_sw); + SLJIT_ASSERT(recurse_check_bit(common, shared_srcw[1])); + shared_count = 2; + } - if (common->capture_last_ptr != 0 && !capture_last_found) + if (common->capture_last_ptr != 0 && recurse_check_bit(common, common->capture_last_ptr)) { - shared_srcw[2] = common->capture_last_ptr; - shared_count = 3; - capture_last_found = TRUE; + shared_srcw[shared_count] = common->capture_last_ptr; + shared_count++; } - private_count = 2; private_srcw[0] = PRIVATE_DATA(cc); - private_srcw[1] = OVECTOR_PRIV(GET2(cc, 1 + LINK_SIZE)); + if (recurse_check_bit(common, private_srcw[0])) + private_count = 1; + + offset = OVECTOR_PRIV(offset); + if (recurse_check_bit(common, offset)) + { + private_srcw[private_count] = offset; + private_count++; + } cc += 1 + LINK_SIZE + IMM2_SIZE; break; @@ -2755,18 +2826,17 @@ while (cc < ccend) alternative = cc + GET(cc, 1); if (*alternative == OP_KETRMAX || *alternative == OP_KETRMIN) { - private_count = 1; private_srcw[0] = PRIVATE_DATA(cc); + if (recurse_check_bit(common, private_srcw[0])) + private_count = 1; } cc += 1 + LINK_SIZE; break; CASE_ITERATOR_PRIVATE_DATA_1 - if (PRIVATE_DATA(cc)) - { + private_srcw[0] = PRIVATE_DATA(cc); + if (private_srcw[0] != 0 && recurse_check_bit(common, private_srcw[0])) private_count = 1; - private_srcw[0] = PRIVATE_DATA(cc); - } cc += 2; #ifdef SUPPORT_UNICODE if (common->utf && HAS_EXTRALEN(cc[-1])) cc += GET_EXTRALEN(cc[-1]); @@ -2774,11 +2844,12 @@ while (cc < ccend) break; CASE_ITERATOR_PRIVATE_DATA_2A - if (PRIVATE_DATA(cc)) + private_srcw[0] = PRIVATE_DATA(cc); + if (private_srcw[0] != 0 && recurse_check_bit(common, private_srcw[0])) { private_count = 2; - private_srcw[0] = PRIVATE_DATA(cc); - private_srcw[1] = PRIVATE_DATA(cc) + sizeof(sljit_sw); + private_srcw[1] = private_srcw[0] + sizeof(sljit_sw); + SLJIT_ASSERT(recurse_check_bit(common, private_srcw[1])); } cc += 2; #ifdef SUPPORT_UNICODE @@ -2787,11 +2858,12 @@ while (cc < ccend) break; CASE_ITERATOR_PRIVATE_DATA_2B - if (PRIVATE_DATA(cc)) + private_srcw[0] = PRIVATE_DATA(cc); + if (private_srcw[0] != 0 && recurse_check_bit(common, private_srcw[0])) { private_count = 2; - private_srcw[0] = PRIVATE_DATA(cc); - private_srcw[1] = PRIVATE_DATA(cc) + sizeof(sljit_sw); + private_srcw[1] = private_srcw[0] + sizeof(sljit_sw); + SLJIT_ASSERT(recurse_check_bit(common, private_srcw[1])); } cc += 2 + IMM2_SIZE; #ifdef SUPPORT_UNICODE @@ -2800,30 +2872,30 @@ while (cc < ccend) break; CASE_ITERATOR_TYPE_PRIVATE_DATA_1 - if (PRIVATE_DATA(cc)) - { + private_srcw[0] = PRIVATE_DATA(cc); + if (private_srcw[0] != 0 && recurse_check_bit(common, private_srcw[0])) private_count = 1; - private_srcw[0] = PRIVATE_DATA(cc); - } cc += 1; break; CASE_ITERATOR_TYPE_PRIVATE_DATA_2A - if (PRIVATE_DATA(cc)) + private_srcw[0] = PRIVATE_DATA(cc); + if (private_srcw[0] != 0 && recurse_check_bit(common, private_srcw[0])) { private_count = 2; - private_srcw[0] = PRIVATE_DATA(cc); private_srcw[1] = private_srcw[0] + sizeof(sljit_sw); + SLJIT_ASSERT(recurse_check_bit(common, private_srcw[1])); } cc += 1; break; CASE_ITERATOR_TYPE_PRIVATE_DATA_2B - if (PRIVATE_DATA(cc)) + private_srcw[0] = PRIVATE_DATA(cc); + if (private_srcw[0] != 0 && recurse_check_bit(common, private_srcw[0])) { private_count = 2; - private_srcw[0] = PRIVATE_DATA(cc); private_srcw[1] = private_srcw[0] + sizeof(sljit_sw); + SLJIT_ASSERT(recurse_check_bit(common, private_srcw[1])); } cc += 1 + IMM2_SIZE; break; @@ -2837,23 +2909,28 @@ while (cc < ccend) i = 1 + 32 / (int)sizeof(PCRE2_UCHAR); #endif if (PRIVATE_DATA(cc) != 0) + { + private_count = 1; + private_srcw[0] = PRIVATE_DATA(cc); switch(get_class_iterator_size(cc + i)) { case 1: - private_count = 1; - private_srcw[0] = PRIVATE_DATA(cc); break; case 2: - private_count = 2; - private_srcw[0] = PRIVATE_DATA(cc); - private_srcw[1] = private_srcw[0] + sizeof(sljit_sw); + if (recurse_check_bit(common, private_srcw[0])) + { + private_count = 2; + private_srcw[1] = private_srcw[0] + sizeof(sljit_sw); + SLJIT_ASSERT(recurse_check_bit(common, private_srcw[1])); + } break; default: SLJIT_UNREACHABLE(); break; } + } cc += i; break; @@ -2862,28 +2939,25 @@ while (cc < ccend) case OP_PRUNE_ARG: case OP_THEN_ARG: SLJIT_ASSERT(common->mark_ptr != 0); - if (has_quit && !setmark_found) + if ((recurse_flags & recurse_flag_quit_found) && recurse_check_bit(common, common->mark_ptr)) { kept_shared_srcw[0] = common->mark_ptr; kept_shared_count = 1; - setmark_found = TRUE; } - if (common->control_head_ptr != 0 && !control_head_found) + if (common->control_head_ptr != 0 && recurse_check_bit(common, common->control_head_ptr)) { private_srcw[0] = common->control_head_ptr; private_count = 1; - control_head_found = TRUE; } cc += 1 + 2 + cc[1]; break; case OP_THEN: SLJIT_ASSERT(common->control_head_ptr != 0); - if (!control_head_found) + if (recurse_check_bit(common, common->control_head_ptr)) { private_srcw[0] = common->control_head_ptr; private_count = 1; - control_head_found = TRUE; } cc++; break; @@ -2891,7 +2965,7 @@ while (cc < ccend) default: cc = next_opcode(common, cc); SLJIT_ASSERT(cc != NULL); - break; + continue; } if (type != recurse_copy_shared_to_global && type != recurse_copy_kept_shared_to_global) @@ -3743,9 +3817,9 @@ if (common->invalid_utf) else { OP2(SLJIT_SUB, TMP2, 0, TMP1, 0, SLJIT_IMM, 0xd800); - OP2(SLJIT_SUB | SLJIT_SET_GREATER_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x110000); + OP2U(SLJIT_SUB | SLJIT_SET_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0x110000); CMOV(SLJIT_GREATER_EQUAL, TMP1, SLJIT_IMM, INVALID_UTF_CHAR); - OP2(SLJIT_SUB | SLJIT_SET_LESS, SLJIT_UNUSED, 0, TMP2, 0, SLJIT_IMM, 0xe000 - 0xd800); + OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP2, 0, SLJIT_IMM, 0xe000 - 0xd800); CMOV(SLJIT_LESS, TMP1, SLJIT_IMM, INVALID_UTF_CHAR); } } @@ -3982,7 +4056,7 @@ if (common->utf) { if (options & READ_CHAR_UPDATE_STR_PTR) OP2(SLJIT_ADD, RETURN_ADDR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); - OP2(SLJIT_SUB | SLJIT_SET_LESS, SLJIT_UNUSED, 0, TMP2, 0, SLJIT_IMM, 0x400); + OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP2, 0, SLJIT_IMM, 0x400); if (options & READ_CHAR_UPDATE_STR_PTR) CMOV(SLJIT_LESS, STR_PTR, RETURN_ADDR, 0); if (max >= 0xd800) @@ -4010,9 +4084,9 @@ if (common->invalid_utf) else { OP2(SLJIT_SUB, TMP2, 0, TMP1, 0, SLJIT_IMM, 0xd800); - OP2(SLJIT_SUB | SLJIT_SET_GREATER_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x110000); + OP2U(SLJIT_SUB | SLJIT_SET_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0x110000); CMOV(SLJIT_GREATER_EQUAL, TMP1, SLJIT_IMM, INVALID_UTF_CHAR); - OP2(SLJIT_SUB | SLJIT_SET_LESS, SLJIT_UNUSED, 0, TMP2, 0, SLJIT_IMM, 0xe000 - 0xd800); + OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP2, 0, SLJIT_IMM, 0xe000 - 0xd800); CMOV(SLJIT_LESS, TMP1, SLJIT_IMM, INVALID_UTF_CHAR); } } @@ -4167,7 +4241,7 @@ if (common->utf && negated) if (sljit_has_cpu_feature(SLJIT_HAS_CMOV) && !HAS_VIRTUAL_REGISTERS) { OP2(SLJIT_ADD, RETURN_ADDR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); - OP2(SLJIT_SUB | SLJIT_SET_LESS, SLJIT_UNUSED, 0, TMP2, 0, SLJIT_IMM, 0x400); + OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP2, 0, SLJIT_IMM, 0x400); CMOV(SLJIT_LESS, STR_PTR, RETURN_ADDR, 0); } else @@ -4250,7 +4324,7 @@ if (common->utf) /* Skip low surrogate if necessary. */ OP2(SLJIT_AND, TMP1, 0, TMP1, 0, SLJIT_IMM, 0xfc00); - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0xdc00); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0xdc00); OP_FLAGS(SLJIT_MOV, TMP1, 0, SLJIT_EQUAL); OP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, UCHAR_SHIFT); OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, TMP1, 0); @@ -4267,7 +4341,7 @@ if (common->invalid_utf && !must_be_valid) return; } - OP2(SLJIT_SUB | SLJIT_SET_LESS, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x110000); + OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP1, 0, SLJIT_IMM, 0x110000); OP_FLAGS(SLJIT_MOV, TMP1, 0, SLJIT_LESS); OP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, UCHAR_SHIFT); OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, TMP1, 0); @@ -4332,7 +4406,7 @@ OP2(SLJIT_AND, TMP2, 0, TMP2, 0, SLJIT_IMM, 0x3f); OP2(SLJIT_OR, TMP1, 0, TMP1, 0, TMP2, 0); /* Searching for the first zero. */ -OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x800); +OP2U(SLJIT_AND | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x800); jump = JUMP(SLJIT_NOT_ZERO); /* Two byte sequence. */ OP2(SLJIT_XOR, TMP1, 0, TMP1, 0, SLJIT_IMM, 0x3000); @@ -4345,7 +4419,7 @@ OP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, 6); OP2(SLJIT_AND, TMP2, 0, TMP2, 0, SLJIT_IMM, 0x3f); OP2(SLJIT_OR, TMP1, 0, TMP1, 0, TMP2, 0); -OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x10000); +OP2U(SLJIT_AND | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x10000); jump = JUMP(SLJIT_NOT_ZERO); /* Three byte sequence. */ OP2(SLJIT_XOR, TMP1, 0, TMP1, 0, SLJIT_IMM, 0xe0000); @@ -4373,7 +4447,7 @@ struct sljit_jump *compare; sljit_emit_fast_enter(compiler, RETURN_ADDR, 0); -OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP2, 0, SLJIT_IMM, 0x20); +OP2U(SLJIT_AND | SLJIT_SET_Z, TMP2, 0, SLJIT_IMM, 0x20); jump = JUMP(SLJIT_NOT_ZERO); /* Two byte sequence. */ OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(0)); @@ -4432,7 +4506,7 @@ OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP2, 0); OP2(SLJIT_SUB, TMP2, 0, TMP2, 0, SLJIT_IMM, 0x80); exit_invalid[1] = CMP(SLJIT_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 0x40); -OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x800); +OP2U(SLJIT_AND | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x800); jump = JUMP(SLJIT_NOT_ZERO); OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(2)); @@ -4447,14 +4521,14 @@ OP2(SLJIT_SUB, TMP2, 0, TMP2, 0, SLJIT_IMM, 0x80); OP2(SLJIT_OR, TMP1, 0, TMP1, 0, TMP2, 0); if (has_cmov) { - OP2(SLJIT_SUB | SLJIT_SET_GREATER_EQUAL, SLJIT_UNUSED, 0, TMP2, 0, SLJIT_IMM, 0x40); + OP2U(SLJIT_SUB | SLJIT_SET_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 0x40); CMOV(SLJIT_GREATER_EQUAL, TMP1, SLJIT_IMM, 0x20000); exit_invalid[2] = NULL; } else exit_invalid[2] = CMP(SLJIT_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 0x40); -OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x10000); +OP2U(SLJIT_AND | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x10000); jump = JUMP(SLJIT_NOT_ZERO); three_byte_entry = LABEL(); @@ -4462,7 +4536,7 @@ three_byte_entry = LABEL(); OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, 0x2d800); if (has_cmov) { - OP2(SLJIT_SUB | SLJIT_SET_LESS, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x800); + OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP1, 0, SLJIT_IMM, 0x800); CMOV(SLJIT_LESS, TMP1, SLJIT_IMM, INVALID_UTF_CHAR - 0xd800); exit_invalid[3] = NULL; } @@ -4473,7 +4547,7 @@ OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); if (has_cmov) { - OP2(SLJIT_SUB | SLJIT_SET_LESS, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x800); + OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP1, 0, SLJIT_IMM, 0x800); CMOV(SLJIT_LESS, TMP1, SLJIT_IMM, INVALID_UTF_CHAR); exit_invalid[4] = NULL; } @@ -4490,7 +4564,7 @@ OP2(SLJIT_SUB, TMP2, 0, TMP2, 0, SLJIT_IMM, 0x80); OP2(SLJIT_OR, TMP1, 0, TMP1, 0, TMP2, 0); if (has_cmov) { - OP2(SLJIT_SUB | SLJIT_SET_GREATER_EQUAL, SLJIT_UNUSED, 0, TMP2, 0, SLJIT_IMM, 0x40); + OP2U(SLJIT_SUB | SLJIT_SET_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 0x40); CMOV(SLJIT_GREATER_EQUAL, TMP1, SLJIT_IMM, 0); exit_invalid[5] = NULL; } @@ -4500,7 +4574,7 @@ else OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, 0xc10000); if (has_cmov) { - OP2(SLJIT_SUB | SLJIT_SET_GREATER_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x100000); + OP2U(SLJIT_SUB | SLJIT_SET_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0x100000); CMOV(SLJIT_GREATER_EQUAL, TMP1, SLJIT_IMM, INVALID_UTF_CHAR - 0x10000); exit_invalid[6] = NULL; } @@ -4522,7 +4596,7 @@ OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP2, 0); OP2(SLJIT_SUB, TMP2, 0, TMP2, 0, SLJIT_IMM, 0x80); exit_invalid[8] = CMP(SLJIT_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 0x40); -OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x800); +OP2U(SLJIT_AND | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x800); jump = JUMP(SLJIT_NOT_ZERO); OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); @@ -4537,7 +4611,7 @@ OP2(SLJIT_SUB, TMP2, 0, TMP2, 0, SLJIT_IMM, 0x80); OP2(SLJIT_OR, TMP1, 0, TMP1, 0, TMP2, 0); if (has_cmov) { - OP2(SLJIT_SUB | SLJIT_SET_GREATER_EQUAL, SLJIT_UNUSED, 0, TMP2, 0, SLJIT_IMM, 0x40); + OP2U(SLJIT_SUB | SLJIT_SET_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 0x40); CMOV(SLJIT_GREATER_EQUAL, TMP1, SLJIT_IMM, INVALID_UTF_CHAR); exit_invalid[10] = NULL; } @@ -4830,7 +4904,7 @@ OP2(SLJIT_OR, TMP1, 0, TMP1, 0, TMP2, 0); OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, 0xd800); if (has_cmov) { - OP2(SLJIT_SUB | SLJIT_SET_LESS, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x800); + OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP1, 0, SLJIT_IMM, 0x800); CMOV(SLJIT_LESS, TMP1, SLJIT_IMM, -0xd800); exit_invalid[2] = NULL; } @@ -4840,7 +4914,7 @@ else OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, 0xd800); if (has_cmov) { - OP2(SLJIT_SUB | SLJIT_SET_LESS, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x800); + OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP1, 0, SLJIT_IMM, 0x800); CMOV(SLJIT_LESS, TMP1, SLJIT_IMM, INVALID_UTF_CHAR); exit_invalid[3] = NULL; } @@ -4865,7 +4939,7 @@ OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP2, 0); if (has_cmov) { - OP2(SLJIT_SUB | SLJIT_SET_GREATER_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x100000); + OP2U(SLJIT_SUB | SLJIT_SET_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0x100000); CMOV(SLJIT_GREATER_EQUAL, TMP1, SLJIT_IMM, INVALID_UTF_CHAR - 0x10000); exit_invalid[5] = NULL; } @@ -4968,7 +5042,7 @@ OP1(MOV_UCHAR, TMP2, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(0)); exit_invalid[1] = CMP(SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0xdc00); OP2(SLJIT_SUB, TMP2, 0, TMP2, 0, SLJIT_IMM, 0xdc00); -OP2(SLJIT_SUB | SLJIT_SET_LESS, SLJIT_UNUSED, 0, TMP2, 0, SLJIT_IMM, 0x400); +OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP2, 0, SLJIT_IMM, 0x400); OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_LESS); OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, 0x10000); OP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, UCHAR_SHIFT); @@ -5239,7 +5313,7 @@ if (newlinecheck) OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); end = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0); OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), 0); - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, common->newline & 0xff); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, common->newline & 0xff); OP_FLAGS(SLJIT_MOV, TMP1, 0, SLJIT_EQUAL); #if PCRE2_CODE_UNIT_WIDTH == 16 || PCRE2_CODE_UNIT_WIDTH == 32 OP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, UCHAR_SHIFT); @@ -5304,12 +5378,12 @@ else if (common->utf) if (sljit_has_cpu_feature(SLJIT_HAS_CMOV)) { OP2(SLJIT_ADD, TMP2, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); - OP2(SLJIT_SUB | SLJIT_SET_LESS, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x400); + OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP1, 0, SLJIT_IMM, 0x400); CMOV(SLJIT_LESS, STR_PTR, TMP2, 0); } else { - OP2(SLJIT_SUB | SLJIT_SET_LESS, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x400); + OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP1, 0, SLJIT_IMM, 0x400); OP_FLAGS(SLJIT_MOV, TMP1, 0, SLJIT_LESS); OP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, UCHAR_SHIFT); OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0); @@ -5860,7 +5934,7 @@ if (has_match_end) OP1(SLJIT_MOV, TMP3, 0, STR_END, 0); OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, IN_UCHARS(offset + 1)); - OP2(SLJIT_SUB | SLJIT_SET_GREATER, SLJIT_UNUSED, 0, STR_END, 0, TMP1, 0); + OP2U(SLJIT_SUB | SLJIT_SET_GREATER, STR_END, 0, TMP1, 0); CMOV(SLJIT_GREATER, STR_END, TMP1, 0); } @@ -6063,7 +6137,7 @@ if (common->match_end_ptr != 0) OP1(SLJIT_MOV, TMP3, 0, STR_END, 0); OP2(SLJIT_SUB | SLJIT_SET_LESS, STR_END, 0, STR_END, 0, SLJIT_IMM, IN_UCHARS(max)); add_jump(compiler, &common->failed_match, JUMP(SLJIT_LESS)); - OP2(SLJIT_SUB | SLJIT_SET_GREATER, SLJIT_UNUSED, 0, STR_END, 0, TMP1, 0); + OP2U(SLJIT_SUB | SLJIT_SET_GREATER, STR_END, 0, TMP1, 0); CMOV(SLJIT_GREATER, STR_END, TMP1, 0); } else @@ -6200,7 +6274,7 @@ if (common->nltype == NLTYPE_FIXED && common->newline > 255) firstchar = CMP(SLJIT_LESS_EQUAL, STR_PTR, 0, TMP2, 0); OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, STR_PTR, 0, TMP1, 0); + OP2U(SLJIT_SUB | SLJIT_SET_Z, STR_PTR, 0, TMP1, 0); OP_FLAGS(SLJIT_MOV, TMP1, 0, SLJIT_NOT_EQUAL); #if PCRE2_CODE_UNIT_WIDTH == 16 || PCRE2_CODE_UNIT_WIDTH == 32 OP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, UCHAR_SHIFT); @@ -6228,7 +6302,7 @@ if (common->nltype == NLTYPE_FIXED && common->newline > 255) firstchar = CMP(SLJIT_LESS_EQUAL, STR_PTR, 0, TMP2, 0); OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, IN_UCHARS(2)); - OP2(SLJIT_SUB | SLJIT_SET_GREATER_EQUAL, SLJIT_UNUSED, 0, STR_PTR, 0, TMP1, 0); + OP2U(SLJIT_SUB | SLJIT_SET_GREATER_EQUAL, STR_PTR, 0, TMP1, 0); OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_GREATER_EQUAL); #if PCRE2_CODE_UNIT_WIDTH == 16 || PCRE2_CODE_UNIT_WIDTH == 32 OP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, UCHAR_SHIFT); @@ -6293,7 +6367,7 @@ if (JIT_HAS_FAST_FORWARD_CHAR_SIMD && (common->nltype == NLTYPE_FIXED || common- OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); if (common->mode != PCRE2_JIT_COMPLETE) { - OP2(SLJIT_SUB | SLJIT_SET_GREATER, SLJIT_UNUSED, 0, STR_PTR, 0, STR_END, 0); + OP2U(SLJIT_SUB | SLJIT_SET_GREATER, STR_PTR, 0, STR_END, 0); CMOV(SLJIT_GREATER, STR_PTR, STR_END, 0); } } @@ -6319,7 +6393,7 @@ if (common->nltype == NLTYPE_ANY || common->nltype == NLTYPE_ANYCRLF) notfoundnl = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0); OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), 0); - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, CHAR_NL); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, CHAR_NL); OP_FLAGS(SLJIT_MOV, TMP1, 0, SLJIT_EQUAL); #if PCRE2_CODE_UNIT_WIDTH == 16 || PCRE2_CODE_UNIT_WIDTH == 32 OP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, UCHAR_SHIFT); @@ -6355,7 +6429,7 @@ if (common->match_end_ptr != 0) OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->match_end_ptr); OP1(SLJIT_MOV, RETURN_ADDR, 0, STR_END, 0); OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, IN_UCHARS(1)); - OP2(SLJIT_SUB | SLJIT_SET_GREATER, SLJIT_UNUSED, 0, STR_END, 0, TMP1, 0); + OP2U(SLJIT_SUB | SLJIT_SET_GREATER, STR_END, 0, TMP1, 0); CMOV(SLJIT_GREATER, STR_END, TMP1, 0); } @@ -6385,12 +6459,12 @@ if (!optimize_class(common, start_bits, (start_bits[31] & 0x80) != 0, FALSE, &ma if (!HAS_VIRTUAL_REGISTERS) { OP2(SLJIT_SHL, TMP3, 0, SLJIT_IMM, 1, TMP2, 0); - OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, TMP3, 0); + OP2U(SLJIT_AND | SLJIT_SET_Z, TMP1, 0, TMP3, 0); } else { OP2(SLJIT_SHL, TMP2, 0, SLJIT_IMM, 1, TMP2, 0); - OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, TMP2, 0); + OP2U(SLJIT_AND | SLJIT_SET_Z, TMP1, 0, TMP2, 0); } JUMPTO(SLJIT_ZERO, start); } @@ -6525,7 +6599,7 @@ jump = CMP(SLJIT_NOT_ZERO /* SIG_LESS */, TMP2, 0, SLJIT_IMM, 0); OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); JUMPHERE(jump); -OP1(SLJIT_NEG, TMP2, 0, TMP2, 0); +OP2(SLJIT_SUB, TMP2, 0, SLJIT_IMM, 0, TMP2, 0); OP2(SLJIT_ADD, TMP2, 0, TMP2, 0, TMP1, 0); if (HAS_VIRTUAL_REGISTERS) { @@ -6600,10 +6674,10 @@ if (common->ucp) jump = CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_IMM, CHAR_UNDERSCORE); add_jump(compiler, &common->getucdtype, JUMP(SLJIT_FAST_CALL)); OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, ucp_Ll); - OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, ucp_Lu - ucp_Ll); + OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, TMP1, 0, SLJIT_IMM, ucp_Lu - ucp_Ll); OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_LESS_EQUAL); OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, ucp_Nd - ucp_Ll); - OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, ucp_No - ucp_Nd); + OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, TMP1, 0, SLJIT_IMM, ucp_No - ucp_Nd); OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_LESS_EQUAL); JUMPHERE(jump); OP1(SLJIT_MOV, TMP3, 0, TMP2, 0); @@ -6646,10 +6720,10 @@ if (common->ucp) jump = CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_IMM, CHAR_UNDERSCORE); add_jump(compiler, &common->getucdtype, JUMP(SLJIT_FAST_CALL)); OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, ucp_Ll); - OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, ucp_Lu - ucp_Ll); + OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, TMP1, 0, SLJIT_IMM, ucp_Lu - ucp_Ll); OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_LESS_EQUAL); OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, ucp_Nd - ucp_Ll); - OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, ucp_No - ucp_Nd); + OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, TMP1, 0, SLJIT_IMM, ucp_No - ucp_Nd); OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_LESS_EQUAL); JUMPHERE(jump); } @@ -6916,7 +6990,7 @@ j = 0; if (char_list[0] == 0) { i++; - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0); OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_ZERO); } else @@ -6928,7 +7002,7 @@ while (i < len) j++; else { - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, char_list[i]); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, char_list[i]); CMOV(SLJIT_ZERO, TMP2, TMP1, 0); } i++; @@ -6942,7 +7016,7 @@ if (j != 0) if ((char_list[i] & 0x100) != 0) { j--; - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, char_list[i] & 0xff); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, char_list[i] & 0xff); CMOV(SLJIT_ZERO, TMP2, TMP1, 0); } } @@ -6971,9 +7045,9 @@ DEFINE_COMPILER; sljit_emit_fast_enter(compiler, RETURN_ADDR, 0); OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, 0x0a); -OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x0d - 0x0a); +OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, TMP1, 0, SLJIT_IMM, 0x0d - 0x0a); OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_LESS_EQUAL); -OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x85 - 0x0a); +OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x85 - 0x0a); #if defined SUPPORT_UNICODE || PCRE2_CODE_UNIT_WIDTH == 16 || PCRE2_CODE_UNIT_WIDTH == 32 #if PCRE2_CODE_UNIT_WIDTH == 8 if (common->utf) @@ -6981,7 +7055,7 @@ if (common->utf) #endif OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL); OP2(SLJIT_OR, TMP1, 0, TMP1, 0, SLJIT_IMM, 0x1); - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x2029 - 0x0a); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x2029 - 0x0a); #if PCRE2_CODE_UNIT_WIDTH == 8 } #endif @@ -6997,29 +7071,29 @@ DEFINE_COMPILER; sljit_emit_fast_enter(compiler, RETURN_ADDR, 0); -OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x09); +OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x09); OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_EQUAL); -OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x20); +OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x20); OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL); -OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0xa0); +OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0xa0); #if defined SUPPORT_UNICODE || PCRE2_CODE_UNIT_WIDTH == 16 || PCRE2_CODE_UNIT_WIDTH == 32 #if PCRE2_CODE_UNIT_WIDTH == 8 if (common->utf) { #endif OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL); - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x1680); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x1680); OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL); - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x180e); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x180e); OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL); OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, 0x2000); - OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x200A - 0x2000); + OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, TMP1, 0, SLJIT_IMM, 0x200A - 0x2000); OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_LESS_EQUAL); - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x202f - 0x2000); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x202f - 0x2000); OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL); - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x205f - 0x2000); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x205f - 0x2000); OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL); - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x3000 - 0x2000); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x3000 - 0x2000); #if PCRE2_CODE_UNIT_WIDTH == 8 } #endif @@ -7037,9 +7111,9 @@ DEFINE_COMPILER; sljit_emit_fast_enter(compiler, RETURN_ADDR, 0); OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, 0x0a); -OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x0d - 0x0a); +OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, TMP1, 0, SLJIT_IMM, 0x0d - 0x0a); OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_LESS_EQUAL); -OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x85 - 0x0a); +OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x85 - 0x0a); #if defined SUPPORT_UNICODE || PCRE2_CODE_UNIT_WIDTH == 16 || PCRE2_CODE_UNIT_WIDTH == 32 #if PCRE2_CODE_UNIT_WIDTH == 8 if (common->utf) @@ -7047,7 +7121,7 @@ if (common->utf) #endif OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL); OP2(SLJIT_OR, TMP1, 0, TMP1, 0, SLJIT_IMM, 0x1); - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x2029 - 0x0a); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x2029 - 0x0a); #if PCRE2_CODE_UNIT_WIDTH == 8 } #endif @@ -7412,6 +7486,21 @@ return cc; static PCRE2_SPTR compile_char1_matchingpath(compiler_common *common, PCRE2_UCHAR type, PCRE2_SPTR cc, jump_list **backtracks, BOOL check_str_ptr); +#ifdef SUPPORT_UNICODE +#define XCLASS_SAVE_CHAR 0x001 +#define XCLASS_CHAR_SAVED 0x002 +#define XCLASS_HAS_TYPE 0x004 +#define XCLASS_HAS_SCRIPT 0x008 +#define XCLASS_HAS_SCRIPT_EXTENSION 0x010 +#define XCLASS_HAS_BOOL 0x020 +#define XCLASS_HAS_BIDICL 0x040 +#define XCLASS_NEEDS_UCD (XCLASS_HAS_TYPE | XCLASS_HAS_SCRIPT | XCLASS_HAS_SCRIPT_EXTENSION | XCLASS_HAS_BOOL | XCLASS_HAS_BIDICL) +#define XCLASS_SCRIPT_EXTENSION_NOTPROP 0x080 +#define XCLASS_SCRIPT_EXTENSION_RESTORE_RETURN_ADDR 0x100 +#define XCLASS_SCRIPT_EXTENSION_RESTORE_LOCALS0 0x200 + +#endif /* SUPPORT_UNICODE */ + static void compile_xclass_matchingpath(compiler_common *common, PCRE2_SPTR cc, jump_list **backtracks) { DEFINE_COMPILER; @@ -7426,8 +7515,7 @@ BOOL utf = common->utf; #endif /* SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH == [8|16] */ #ifdef SUPPORT_UNICODE -BOOL needstype = FALSE, needsscript = FALSE, needschar = FALSE; -BOOL charsaved = FALSE; +sljit_u32 unicode_status = 0; int typereg = TMP1; const sljit_u32 *other_cases; sljit_uw typeoffset; @@ -7454,7 +7542,7 @@ while (*cc != XCL_END) if (c > max) max = c; if (c < min) min = c; #ifdef SUPPORT_UNICODE - needschar = TRUE; + unicode_status |= XCLASS_SAVE_CHAR; #endif /* SUPPORT_UNICODE */ } else if (*cc == XCL_RANGE) @@ -7465,7 +7553,7 @@ while (*cc != XCL_END) GETCHARINCTEST(c, cc); if (c > max) max = c; #ifdef SUPPORT_UNICODE - needschar = TRUE; + unicode_status |= XCLASS_SAVE_CHAR; #endif /* SUPPORT_UNICODE */ } #ifdef SUPPORT_UNICODE @@ -7473,7 +7561,7 @@ while (*cc != XCL_END) { SLJIT_ASSERT(*cc == XCL_PROP || *cc == XCL_NOTPROP); cc++; - if (*cc == PT_CLIST) + if (*cc == PT_CLIST && cc[-1] == XCL_PROP) { other_cases = PRIV(ucd_caseless_sets) + cc[1]; while (*other_cases != NOTACHAR) @@ -7506,11 +7594,21 @@ while (*cc != XCL_END) case PT_GC: case PT_PC: case PT_ALNUM: - needstype = TRUE; + unicode_status |= XCLASS_HAS_TYPE; break; + case PT_SCX: + unicode_status |= XCLASS_HAS_SCRIPT_EXTENSION; + if (cc[-1] == XCL_NOTPROP) + { + unicode_status |= XCLASS_SCRIPT_EXTENSION_NOTPROP; + break; + } + compares++; + /* Fall through */ + case PT_SC: - needsscript = TRUE; + unicode_status |= XCLASS_HAS_SCRIPT; break; case PT_SPACE: @@ -7519,13 +7617,20 @@ while (*cc != XCL_END) case PT_PXGRAPH: case PT_PXPRINT: case PT_PXPUNCT: - needstype = TRUE; - needschar = TRUE; + unicode_status |= XCLASS_SAVE_CHAR | XCLASS_HAS_TYPE; break; case PT_CLIST: case PT_UCNC: - needschar = TRUE; + unicode_status |= XCLASS_SAVE_CHAR; + break; + + case PT_BOOL: + unicode_status |= XCLASS_HAS_BOOL; + break; + + case PT_BIDICL: + unicode_status |= XCLASS_HAS_BIDICL; break; default: @@ -7545,7 +7650,7 @@ if ((cc[-1] & XCL_NOT) != 0) else { #ifdef SUPPORT_UNICODE - read_char(common, min, max, (needstype || needsscript) ? backtracks : NULL, 0); + read_char(common, min, max, (unicode_status & XCLASS_NEEDS_UCD) ? backtracks : NULL, 0); #else /* !SUPPORT_UNICODE */ read_char(common, min, max, NULL, 0); #endif /* SUPPORT_UNICODE */ @@ -7562,7 +7667,7 @@ if ((cc[-1] & XCL_HASPROP) == 0) OP2(SLJIT_LSHR, TMP1, 0, TMP1, 0, SLJIT_IMM, 3); OP1(SLJIT_MOV_U8, TMP1, 0, SLJIT_MEM1(TMP1), (sljit_sw)cc); OP2(SLJIT_SHL, TMP2, 0, SLJIT_IMM, 1, TMP2, 0); - OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, TMP2, 0); + OP2U(SLJIT_AND | SLJIT_SET_Z, TMP1, 0, TMP2, 0); add_jump(compiler, &found, JUMP(SLJIT_NOT_ZERO)); } @@ -7581,7 +7686,7 @@ else if ((cc[-1] & XCL_MAP) != 0) { OP1(SLJIT_MOV, RETURN_ADDR, 0, TMP1, 0); #ifdef SUPPORT_UNICODE - charsaved = TRUE; + unicode_status |= XCLASS_CHAR_SAVED; #endif /* SUPPORT_UNICODE */ if (!optimize_class(common, (const sljit_u8 *)cc, FALSE, TRUE, list)) { @@ -7595,7 +7700,7 @@ else if ((cc[-1] & XCL_MAP) != 0) OP2(SLJIT_LSHR, TMP1, 0, TMP1, 0, SLJIT_IMM, 3); OP1(SLJIT_MOV_U8, TMP1, 0, SLJIT_MEM1(TMP1), (sljit_sw)cc); OP2(SLJIT_SHL, TMP2, 0, SLJIT_IMM, 1, TMP2, 0); - OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, TMP2, 0); + OP2U(SLJIT_AND | SLJIT_SET_Z, TMP1, 0, TMP2, 0); add_jump(compiler, list, JUMP(SLJIT_NOT_ZERO)); #if PCRE2_CODE_UNIT_WIDTH == 8 @@ -7609,9 +7714,9 @@ else if ((cc[-1] & XCL_MAP) != 0) } #ifdef SUPPORT_UNICODE -if (needstype || needsscript) +if (unicode_status & XCLASS_NEEDS_UCD) { - if (needschar && !charsaved) + if ((unicode_status & (XCLASS_SAVE_CHAR | XCLASS_CHAR_SAVED)) == XCLASS_SAVE_CHAR) OP1(SLJIT_MOV, RETURN_ADDR, 0, TMP1, 0); #if PCRE2_CODE_UNIT_WIDTH == 32 @@ -7631,17 +7736,16 @@ if (needstype || needsscript) OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP2, 0); OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, (sljit_sw)PRIV(ucd_stage2)); OP1(SLJIT_MOV_U16, TMP2, 0, SLJIT_MEM2(TMP2, TMP1), 1); + OP2(SLJIT_SHL, TMP1, 0, TMP2, 0, SLJIT_IMM, 3); + OP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, 2); + OP2(SLJIT_ADD, TMP2, 0, TMP2, 0, TMP1, 0); - /* Before anything else, we deal with scripts. */ - if (needsscript) - { - OP2(SLJIT_SHL, TMP1, 0, TMP2, 0, SLJIT_IMM, 3); - OP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, 2); - OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP2, 0); - - OP1(SLJIT_MOV_U8, TMP1, 0, SLJIT_MEM1(TMP1), (sljit_sw)PRIV(ucd_records) + SLJIT_OFFSETOF(ucd_record, script)); + ccbegin = cc; - ccbegin = cc; + if (unicode_status & XCLASS_HAS_BIDICL) + { + OP1(SLJIT_MOV_U16, TMP1, 0, SLJIT_MEM1(TMP2), (sljit_sw)PRIV(ucd_records) + SLJIT_OFFSETOF(ucd_record, scriptx_bidiclass)); + OP2(SLJIT_LSHR, TMP1, 0, TMP1, 0, SLJIT_IMM, UCD_BIDICLASS_SHIFT); while (*cc != XCL_END) { @@ -7660,7 +7764,7 @@ if (needstype || needsscript) { SLJIT_ASSERT(*cc == XCL_PROP || *cc == XCL_NOTPROP); cc++; - if (*cc == PT_SC) + if (*cc == PT_BIDICL) { compares--; invertcmp = (compares == 0 && list != backtracks); @@ -7674,52 +7778,176 @@ if (needstype || needsscript) } cc = ccbegin; + } + + if (unicode_status & XCLASS_HAS_BOOL) + { + OP1(SLJIT_MOV_U16, TMP1, 0, SLJIT_MEM1(TMP2), (sljit_sw)PRIV(ucd_records) + SLJIT_OFFSETOF(ucd_record, bprops)); + OP2(SLJIT_AND, TMP1, 0, TMP1, 0, SLJIT_IMM, UCD_BPROPS_MASK); + OP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, 2); - if (needstype) + while (*cc != XCL_END) { - /* TMP2 has already been shifted by 2 */ - if (!needschar) + if (*cc == XCL_SINGLE) { - OP2(SLJIT_ADD, TMP1, 0, TMP2, 0, TMP2, 0); - OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP2, 0); - - OP1(SLJIT_MOV_U8, TMP1, 0, SLJIT_MEM1(TMP1), (sljit_sw)PRIV(ucd_records) + SLJIT_OFFSETOF(ucd_record, chartype)); + cc ++; + GETCHARINCTEST(c, cc); + } + else if (*cc == XCL_RANGE) + { + cc ++; + GETCHARINCTEST(c, cc); + GETCHARINCTEST(c, cc); } else { - OP2(SLJIT_ADD, TMP1, 0, TMP2, 0, TMP2, 0); - OP2(SLJIT_ADD, TMP2, 0, TMP2, 0, TMP1, 0); + SLJIT_ASSERT(*cc == XCL_PROP || *cc == XCL_NOTPROP); + cc++; + if (*cc == PT_BOOL) + { + compares--; + invertcmp = (compares == 0 && list != backtracks); + if (cc[-1] == XCL_NOTPROP) + invertcmp ^= 0x1; - OP1(SLJIT_MOV, TMP1, 0, RETURN_ADDR, 0); - OP1(SLJIT_MOV_U8, RETURN_ADDR, 0, SLJIT_MEM1(TMP2), (sljit_sw)PRIV(ucd_records) + SLJIT_OFFSETOF(ucd_record, chartype)); - typereg = RETURN_ADDR; + OP2U(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_MEM1(TMP1), (sljit_sw)(PRIV(ucd_boolprop_sets) + (cc[1] >> 5)), SLJIT_IMM, (sljit_sw)1 << (cc[1] & 0x1f)); + add_jump(compiler, compares > 0 ? list : backtracks, JUMP(SLJIT_NOT_ZERO ^ invertcmp)); + } + cc += 2; } } - else if (needschar) - OP1(SLJIT_MOV, TMP1, 0, RETURN_ADDR, 0); + + cc = ccbegin; } - else if (needstype) + + if (unicode_status & XCLASS_HAS_SCRIPT) { - OP2(SLJIT_SHL, TMP1, 0, TMP2, 0, SLJIT_IMM, 3); - OP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, 2); + OP1(SLJIT_MOV_U8, TMP1, 0, SLJIT_MEM1(TMP2), (sljit_sw)PRIV(ucd_records) + SLJIT_OFFSETOF(ucd_record, script)); - if (!needschar) + while (*cc != XCL_END) { - OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP2, 0); + if (*cc == XCL_SINGLE) + { + cc ++; + GETCHARINCTEST(c, cc); + } + else if (*cc == XCL_RANGE) + { + cc ++; + GETCHARINCTEST(c, cc); + GETCHARINCTEST(c, cc); + } + else + { + SLJIT_ASSERT(*cc == XCL_PROP || *cc == XCL_NOTPROP); + cc++; + switch (*cc) + { + case PT_SCX: + if (cc[-1] == XCL_NOTPROP) + break; + /* Fall through */ + + case PT_SC: + compares--; + invertcmp = (compares == 0 && list != backtracks); + if (cc[-1] == XCL_NOTPROP) + invertcmp ^= 0x1; - OP1(SLJIT_MOV_U8, TMP1, 0, SLJIT_MEM1(TMP1), (sljit_sw)PRIV(ucd_records) + SLJIT_OFFSETOF(ucd_record, chartype)); + add_jump(compiler, compares > 0 ? list : backtracks, CMP(SLJIT_EQUAL ^ invertcmp, TMP1, 0, SLJIT_IMM, (int)cc[1])); + } + cc += 2; + } } - else + + cc = ccbegin; + } + + if (unicode_status & XCLASS_HAS_SCRIPT_EXTENSION) + { + OP1(SLJIT_MOV_U16, TMP1, 0, SLJIT_MEM1(TMP2), (sljit_sw)PRIV(ucd_records) + SLJIT_OFFSETOF(ucd_record, scriptx_bidiclass)); + OP2(SLJIT_AND, TMP1, 0, TMP1, 0, SLJIT_IMM, UCD_SCRIPTX_MASK); + OP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, 2); + + if (unicode_status & XCLASS_SCRIPT_EXTENSION_NOTPROP) { - OP2(SLJIT_ADD, TMP2, 0, TMP2, 0, TMP1, 0); + if (unicode_status & XCLASS_HAS_TYPE) + { + if (unicode_status & XCLASS_SAVE_CHAR) + { + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LOCALS0, TMP2, 0); + unicode_status |= XCLASS_SCRIPT_EXTENSION_RESTORE_LOCALS0; + } + else + { + OP1(SLJIT_MOV, RETURN_ADDR, 0, TMP2, 0); + unicode_status |= XCLASS_SCRIPT_EXTENSION_RESTORE_RETURN_ADDR; + } + } + OP1(SLJIT_MOV_U8, TMP2, 0, SLJIT_MEM1(TMP2), (sljit_sw)PRIV(ucd_records) + SLJIT_OFFSETOF(ucd_record, script)); + } - OP1(SLJIT_MOV, TMP1, 0, RETURN_ADDR, 0); - OP1(SLJIT_MOV_U8, RETURN_ADDR, 0, SLJIT_MEM1(TMP2), (sljit_sw)PRIV(ucd_records) + SLJIT_OFFSETOF(ucd_record, chartype)); - typereg = RETURN_ADDR; + while (*cc != XCL_END) + { + if (*cc == XCL_SINGLE) + { + cc ++; + GETCHARINCTEST(c, cc); + } + else if (*cc == XCL_RANGE) + { + cc ++; + GETCHARINCTEST(c, cc); + GETCHARINCTEST(c, cc); + } + else + { + SLJIT_ASSERT(*cc == XCL_PROP || *cc == XCL_NOTPROP); + cc++; + if (*cc == PT_SCX) + { + compares--; + invertcmp = (compares == 0 && list != backtracks); + + jump = NULL; + if (cc[-1] == XCL_NOTPROP) + { + jump = CMP(SLJIT_EQUAL, TMP2, 0, SLJIT_IMM, (int)cc[1]); + if (invertcmp) + { + add_jump(compiler, backtracks, jump); + jump = NULL; + } + invertcmp ^= 0x1; + } + + OP2U(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_MEM1(TMP1), (sljit_sw)(PRIV(ucd_script_sets) + (cc[1] >> 5)), SLJIT_IMM, (sljit_sw)1 << (cc[1] & 0x1f)); + add_jump(compiler, compares > 0 ? list : backtracks, JUMP(SLJIT_NOT_ZERO ^ invertcmp)); + + if (jump != NULL) + JUMPHERE(jump); + } + cc += 2; + } } + + if (unicode_status & XCLASS_SCRIPT_EXTENSION_RESTORE_LOCALS0) + OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), LOCALS0); + else if (unicode_status & XCLASS_SCRIPT_EXTENSION_RESTORE_RETURN_ADDR) + OP1(SLJIT_MOV, TMP2, 0, RETURN_ADDR, 0); + cc = ccbegin; } - else if (needschar) + + if (unicode_status & XCLASS_SAVE_CHAR) OP1(SLJIT_MOV, TMP1, 0, RETURN_ADDR, 0); + + if (unicode_status & XCLASS_HAS_TYPE) + { + if (unicode_status & XCLASS_SAVE_CHAR) + typereg = RETURN_ADDR; + + OP1(SLJIT_MOV_U8, typereg, 0, SLJIT_MEM1(TMP2), (sljit_sw)PRIV(ucd_records) + SLJIT_OFFSETOF(ucd_record, chartype)); + } } #endif /* SUPPORT_UNICODE */ @@ -7743,13 +7971,13 @@ while (*cc != XCL_END) if (numberofcmps < 3 && (*cc == XCL_SINGLE || *cc == XCL_RANGE)) { - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(c - charoffset)); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, (sljit_sw)(c - charoffset)); OP_FLAGS(numberofcmps == 0 ? SLJIT_MOV : SLJIT_OR, TMP2, 0, SLJIT_EQUAL); numberofcmps++; } else if (numberofcmps > 0) { - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(c - charoffset)); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, (sljit_sw)(c - charoffset)); OP_FLAGS(SLJIT_OR | SLJIT_SET_Z, TMP2, 0, SLJIT_EQUAL); jump = JUMP(SLJIT_NOT_ZERO ^ invertcmp); numberofcmps = 0; @@ -7769,13 +7997,13 @@ while (*cc != XCL_END) if (numberofcmps < 3 && (*cc == XCL_SINGLE || *cc == XCL_RANGE)) { - OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(c - charoffset)); + OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, TMP1, 0, SLJIT_IMM, (sljit_sw)(c - charoffset)); OP_FLAGS(numberofcmps == 0 ? SLJIT_MOV : SLJIT_OR, TMP2, 0, SLJIT_LESS_EQUAL); numberofcmps++; } else if (numberofcmps > 0) { - OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(c - charoffset)); + OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, TMP1, 0, SLJIT_IMM, (sljit_sw)(c - charoffset)); OP_FLAGS(SLJIT_OR | SLJIT_SET_Z, TMP2, 0, SLJIT_LESS_EQUAL); jump = JUMP(SLJIT_NOT_ZERO ^ invertcmp); numberofcmps = 0; @@ -7801,11 +8029,11 @@ while (*cc != XCL_END) break; case PT_LAMP: - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, typereg, 0, SLJIT_IMM, ucp_Lu - typeoffset); + OP2U(SLJIT_SUB | SLJIT_SET_Z, typereg, 0, SLJIT_IMM, ucp_Lu - typeoffset); OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_EQUAL); - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, typereg, 0, SLJIT_IMM, ucp_Ll - typeoffset); + OP2U(SLJIT_SUB | SLJIT_SET_Z, typereg, 0, SLJIT_IMM, ucp_Ll - typeoffset); OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL); - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, typereg, 0, SLJIT_IMM, ucp_Lt - typeoffset); + OP2U(SLJIT_SUB | SLJIT_SET_Z, typereg, 0, SLJIT_IMM, ucp_Lt - typeoffset); OP_FLAGS(SLJIT_OR | SLJIT_SET_Z, TMP2, 0, SLJIT_EQUAL); jump = JUMP(SLJIT_NOT_ZERO ^ invertcmp); break; @@ -7821,6 +8049,9 @@ while (*cc != XCL_END) break; case PT_SC: + case PT_SCX: + case PT_BOOL: + case PT_BIDICL: compares++; /* Do nothing. */ break; @@ -7828,32 +8059,32 @@ while (*cc != XCL_END) case PT_SPACE: case PT_PXSPACE: SET_CHAR_OFFSET(9); - OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0xd - 0x9); + OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, TMP1, 0, SLJIT_IMM, 0xd - 0x9); OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_LESS_EQUAL); - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x85 - 0x9); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x85 - 0x9); OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL); - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x180e - 0x9); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x180e - 0x9); OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL); SET_TYPE_OFFSET(ucp_Zl); - OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, typereg, 0, SLJIT_IMM, ucp_Zs - ucp_Zl); + OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, typereg, 0, SLJIT_IMM, ucp_Zs - ucp_Zl); OP_FLAGS(SLJIT_OR | SLJIT_SET_Z, TMP2, 0, SLJIT_LESS_EQUAL); jump = JUMP(SLJIT_NOT_ZERO ^ invertcmp); break; case PT_WORD: - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(CHAR_UNDERSCORE - charoffset)); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, (sljit_sw)(CHAR_UNDERSCORE - charoffset)); OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_EQUAL); /* Fall through. */ case PT_ALNUM: SET_TYPE_OFFSET(ucp_Ll); - OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, typereg, 0, SLJIT_IMM, ucp_Lu - ucp_Ll); + OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, typereg, 0, SLJIT_IMM, ucp_Lu - ucp_Ll); OP_FLAGS((*cc == PT_ALNUM) ? SLJIT_MOV : SLJIT_OR, TMP2, 0, SLJIT_LESS_EQUAL); SET_TYPE_OFFSET(ucp_Nd); - OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, typereg, 0, SLJIT_IMM, ucp_No - ucp_Nd); + OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, typereg, 0, SLJIT_IMM, ucp_No - ucp_Nd); OP_FLAGS(SLJIT_OR | SLJIT_SET_Z, TMP2, 0, SLJIT_LESS_EQUAL); jump = JUMP(SLJIT_NOT_ZERO ^ invertcmp); break; @@ -7876,7 +8107,7 @@ while (*cc != XCL_END) OP2(SLJIT_ADD, TMP2, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)charoffset); OP2(SLJIT_OR, TMP2, 0, TMP2, 0, SLJIT_IMM, other_cases[1] ^ other_cases[0]); } - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP2, 0, SLJIT_IMM, other_cases[1]); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP2, 0, SLJIT_IMM, other_cases[1]); OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_EQUAL); other_cases += 2; } @@ -7889,41 +8120,41 @@ while (*cc != XCL_END) OP2(SLJIT_ADD, TMP2, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)charoffset); OP2(SLJIT_OR, TMP2, 0, TMP2, 0, SLJIT_IMM, other_cases[1] ^ other_cases[0]); } - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP2, 0, SLJIT_IMM, other_cases[2]); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP2, 0, SLJIT_IMM, other_cases[2]); OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_EQUAL); - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(other_cases[0] - charoffset)); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, (sljit_sw)(other_cases[0] - charoffset)); OP_FLAGS(SLJIT_OR | ((other_cases[3] == NOTACHAR) ? SLJIT_SET_Z : 0), TMP2, 0, SLJIT_EQUAL); other_cases += 3; } else { - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(*other_cases++ - charoffset)); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, (sljit_sw)(*other_cases++ - charoffset)); OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_EQUAL); } while (*other_cases != NOTACHAR) { - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(*other_cases++ - charoffset)); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, (sljit_sw)(*other_cases++ - charoffset)); OP_FLAGS(SLJIT_OR | ((*other_cases == NOTACHAR) ? SLJIT_SET_Z : 0), TMP2, 0, SLJIT_EQUAL); } jump = JUMP(SLJIT_NOT_ZERO ^ invertcmp); break; case PT_UCNC: - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(CHAR_DOLLAR_SIGN - charoffset)); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, (sljit_sw)(CHAR_DOLLAR_SIGN - charoffset)); OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_EQUAL); - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(CHAR_COMMERCIAL_AT - charoffset)); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, (sljit_sw)(CHAR_COMMERCIAL_AT - charoffset)); OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL); - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(CHAR_GRAVE_ACCENT - charoffset)); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, (sljit_sw)(CHAR_GRAVE_ACCENT - charoffset)); OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL); SET_CHAR_OFFSET(0xa0); - OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(0xd7ff - charoffset)); + OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, TMP1, 0, SLJIT_IMM, (sljit_sw)(0xd7ff - charoffset)); OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_LESS_EQUAL); SET_CHAR_OFFSET(0); - OP2(SLJIT_SUB | SLJIT_SET_GREATER_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0xe000 - 0); + OP2U(SLJIT_SUB | SLJIT_SET_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0xe000 - 0); OP_FLAGS(SLJIT_OR | SLJIT_SET_Z, TMP2, 0, SLJIT_GREATER_EQUAL); jump = JUMP(SLJIT_NOT_ZERO ^ invertcmp); break; @@ -7931,20 +8162,20 @@ while (*cc != XCL_END) case PT_PXGRAPH: /* C and Z groups are the farthest two groups. */ SET_TYPE_OFFSET(ucp_Ll); - OP2(SLJIT_SUB | SLJIT_SET_GREATER, SLJIT_UNUSED, 0, typereg, 0, SLJIT_IMM, ucp_So - ucp_Ll); + OP2U(SLJIT_SUB | SLJIT_SET_GREATER, typereg, 0, SLJIT_IMM, ucp_So - ucp_Ll); OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_GREATER); jump = CMP(SLJIT_NOT_EQUAL, typereg, 0, SLJIT_IMM, ucp_Cf - ucp_Ll); /* In case of ucp_Cf, we overwrite the result. */ SET_CHAR_OFFSET(0x2066); - OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x2069 - 0x2066); + OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, TMP1, 0, SLJIT_IMM, 0x2069 - 0x2066); OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_LESS_EQUAL); - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x061c - 0x2066); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x061c - 0x2066); OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL); - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x180e - 0x2066); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x180e - 0x2066); OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL); JUMPHERE(jump); @@ -7954,20 +8185,20 @@ while (*cc != XCL_END) case PT_PXPRINT: /* C and Z groups are the farthest two groups. */ SET_TYPE_OFFSET(ucp_Ll); - OP2(SLJIT_SUB | SLJIT_SET_GREATER, SLJIT_UNUSED, 0, typereg, 0, SLJIT_IMM, ucp_So - ucp_Ll); + OP2U(SLJIT_SUB | SLJIT_SET_GREATER, typereg, 0, SLJIT_IMM, ucp_So - ucp_Ll); OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_GREATER); - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, typereg, 0, SLJIT_IMM, ucp_Zs - ucp_Ll); + OP2U(SLJIT_SUB | SLJIT_SET_Z, typereg, 0, SLJIT_IMM, ucp_Zs - ucp_Ll); OP_FLAGS(SLJIT_AND, TMP2, 0, SLJIT_NOT_EQUAL); jump = CMP(SLJIT_NOT_EQUAL, typereg, 0, SLJIT_IMM, ucp_Cf - ucp_Ll); /* In case of ucp_Cf, we overwrite the result. */ SET_CHAR_OFFSET(0x2066); - OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x2069 - 0x2066); + OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, TMP1, 0, SLJIT_IMM, 0x2069 - 0x2066); OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_LESS_EQUAL); - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x061c - 0x2066); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x061c - 0x2066); OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL); JUMPHERE(jump); @@ -7976,15 +8207,15 @@ while (*cc != XCL_END) case PT_PXPUNCT: SET_TYPE_OFFSET(ucp_Sc); - OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, typereg, 0, SLJIT_IMM, ucp_So - ucp_Sc); + OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, typereg, 0, SLJIT_IMM, ucp_So - ucp_Sc); OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_LESS_EQUAL); SET_CHAR_OFFSET(0); - OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x7f); + OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, TMP1, 0, SLJIT_IMM, 0x7f); OP_FLAGS(SLJIT_AND, TMP2, 0, SLJIT_LESS_EQUAL); SET_TYPE_OFFSET(ucp_Pc); - OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, typereg, 0, SLJIT_IMM, ucp_Ps - ucp_Pc); + OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, typereg, 0, SLJIT_IMM, ucp_Ps - ucp_Pc); OP_FLAGS(SLJIT_OR | SLJIT_SET_Z, TMP2, 0, SLJIT_LESS_EQUAL); jump = JUMP(SLJIT_NOT_ZERO ^ invertcmp); break; @@ -8069,9 +8300,9 @@ switch(type) else { jump[1] = CMP(SLJIT_EQUAL, TMP2, 0, STR_END, 0); - OP2(SLJIT_SUB | SLJIT_SET_LESS, SLJIT_UNUSED, 0, TMP2, 0, STR_END, 0); + OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP2, 0, STR_END, 0); OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_LESS); - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (common->newline >> 8) & 0xff); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, (common->newline >> 8) & 0xff); OP_FLAGS(SLJIT_OR | SLJIT_SET_Z, TMP2, 0, SLJIT_NOT_EQUAL); add_jump(compiler, backtracks, JUMP(SLJIT_NOT_EQUAL)); check_partial(common, TRUE); @@ -8094,7 +8325,7 @@ switch(type) OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(0)); jump[1] = CMP(SLJIT_NOT_EQUAL, TMP1, 0, SLJIT_IMM, CHAR_CR); OP2(SLJIT_ADD, TMP2, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(2)); - OP2(SLJIT_SUB | SLJIT_SET_Z | SLJIT_SET_GREATER, SLJIT_UNUSED, 0, TMP2, 0, STR_END, 0); + OP2U(SLJIT_SUB | SLJIT_SET_Z | SLJIT_SET_GREATER, TMP2, 0, STR_END, 0); jump[2] = JUMP(SLJIT_GREATER); add_jump(compiler, backtracks, JUMP(SLJIT_NOT_EQUAL) /* LESS */); /* Equal. */ @@ -8137,10 +8368,10 @@ switch(type) if (HAS_VIRTUAL_REGISTERS) { OP1(SLJIT_MOV, TMP2, 0, ARGUMENTS, 0); - OP2(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_UNUSED, 0, SLJIT_MEM1(TMP2), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTEOL); + OP2U(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_MEM1(TMP2), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTEOL); } else - OP2(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_UNUSED, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTEOL); + OP2U(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTEOL); add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO)); if (!common->endonly) @@ -8157,10 +8388,10 @@ switch(type) if (HAS_VIRTUAL_REGISTERS) { OP1(SLJIT_MOV, TMP2, 0, ARGUMENTS, 0); - OP2(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_UNUSED, 0, SLJIT_MEM1(TMP2), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTEOL); + OP2U(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_MEM1(TMP2), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTEOL); } else - OP2(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_UNUSED, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTEOL); + OP2U(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTEOL); add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO)); check_partial(common, FALSE); jump[0] = JUMP(SLJIT_JUMP); @@ -8200,14 +8431,14 @@ switch(type) OP1(SLJIT_MOV, TMP2, 0, ARGUMENTS, 0); OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(TMP2), SLJIT_OFFSETOF(jit_arguments, begin)); add_jump(compiler, backtracks, CMP(SLJIT_GREATER, STR_PTR, 0, TMP1, 0)); - OP2(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_UNUSED, 0, SLJIT_MEM1(TMP2), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTBOL); + OP2U(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_MEM1(TMP2), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTBOL); add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO)); } else { OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, begin)); add_jump(compiler, backtracks, CMP(SLJIT_GREATER, STR_PTR, 0, TMP1, 0)); - OP2(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_UNUSED, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTBOL); + OP2U(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTBOL); add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO)); } return cc; @@ -8219,13 +8450,13 @@ switch(type) OP1(SLJIT_MOV, TMP1, 0, ARGUMENTS, 0); OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, begin)); jump[1] = CMP(SLJIT_GREATER, STR_PTR, 0, TMP2, 0); - OP2(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_UNUSED, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTBOL); + OP2U(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTBOL); } else { OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, begin)); jump[1] = CMP(SLJIT_GREATER, STR_PTR, 0, TMP2, 0); - OP2(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_UNUSED, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTBOL); + OP2U(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTBOL); } add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO)); jump[0] = JUMP(SLJIT_JUMP); @@ -8319,7 +8550,7 @@ do /* Not breaking between Regional Indicators is allowed only if there are an even number of preceding RIs. */ - if (lgb == ucp_gbRegionalIndicator && rgb == ucp_gbRegionalIndicator) + if (lgb == ucp_gbRegional_Indicator && rgb == ucp_gbRegional_Indicator) { ricount = 0; bptr = prevcc; @@ -8331,7 +8562,7 @@ do BACKCHAR(bptr); GETCHAR(c, bptr); - if (UCD_GRAPHBREAK(c) != ucp_gbRegionalIndicator) + if (UCD_GRAPHBREAK(c) != ucp_gbRegional_Indicator) break; ricount++; @@ -8387,7 +8618,7 @@ do /* Not breaking between Regional Indicators is allowed only if there are an even number of preceding RIs. */ - if (lgb == ucp_gbRegionalIndicator && rgb == ucp_gbRegionalIndicator) + if (lgb == ucp_gbRegional_Indicator && rgb == ucp_gbRegional_Indicator) { ricount = 0; bptr = prevcc; @@ -8397,7 +8628,7 @@ do { GETCHARBACK_INVALID(c, bptr, start_subject, break); - if (UCD_GRAPHBREAK(c) != ucp_gbRegionalIndicator) + if (UCD_GRAPHBREAK(c) != ucp_gbRegional_Indicator) break; ricount++; @@ -8455,7 +8686,7 @@ while (cc < end_subject) /* Not breaking between Regional Indicators is allowed only if there are an even number of preceding RIs. */ - if (lgb == ucp_gbRegionalIndicator && rgb == ucp_gbRegionalIndicator) + if (lgb == ucp_gbRegional_Indicator && rgb == ucp_gbRegional_Indicator) { ricount = 0; bptr = cc - 1; @@ -8470,7 +8701,7 @@ while (cc < end_subject) break; #endif /* PCRE2_CODE_UNIT_WIDTH == 32 */ - if (UCD_GRAPHBREAK(c) != ucp_gbRegionalIndicator) break; + if (UCD_GRAPHBREAK(c) != ucp_gbRegional_Indicator) break; ricount++; } @@ -8520,7 +8751,7 @@ switch(type) #endif read_char8_type(common, backtracks, type == OP_NOT_DIGIT); /* Flip the starting bit in the negative case. */ - OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, ctype_digit); + OP2U(SLJIT_AND | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, ctype_digit); add_jump(compiler, backtracks, JUMP(type == OP_DIGIT ? SLJIT_ZERO : SLJIT_NOT_ZERO)); return cc; @@ -8534,7 +8765,7 @@ switch(type) else #endif read_char8_type(common, backtracks, type == OP_NOT_WHITESPACE); - OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, ctype_space); + OP2U(SLJIT_AND | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, ctype_space); add_jump(compiler, backtracks, JUMP(type == OP_WHITESPACE ? SLJIT_ZERO : SLJIT_NOT_ZERO)); return cc; @@ -8548,7 +8779,7 @@ switch(type) else #endif read_char8_type(common, backtracks, type == OP_NOT_WORDCHAR); - OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, ctype_word); + OP2U(SLJIT_AND | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, ctype_word); add_jump(compiler, backtracks, JUMP(type == OP_WORDCHAR ? SLJIT_ZERO : SLJIT_NOT_ZERO)); return cc; @@ -8596,7 +8827,7 @@ switch(type) #elif PCRE2_CODE_UNIT_WIDTH == 16 jump[0] = CMP(SLJIT_LESS, TMP1, 0, SLJIT_IMM, 0xd800); OP2(SLJIT_AND, TMP1, 0, TMP1, 0, SLJIT_IMM, 0xfc00); - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0xd800); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0xd800); OP_FLAGS(SLJIT_MOV, TMP1, 0, SLJIT_EQUAL); OP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, 1); OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0); @@ -8690,13 +8921,13 @@ switch(type) OP1(SLJIT_MOV, SLJIT_R0, 0, ARGUMENTS, 0); #if PCRE2_CODE_UNIT_WIDTH != 32 - sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(SW), SLJIT_IMM, - common->utf ? (common->invalid_utf ? SLJIT_FUNC_OFFSET(do_extuni_utf_invalid) : SLJIT_FUNC_OFFSET(do_extuni_utf)) : SLJIT_FUNC_OFFSET(do_extuni_no_utf)); + sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS2(W, W, W), SLJIT_IMM, + common->utf ? (common->invalid_utf ? SLJIT_FUNC_ADDR(do_extuni_utf_invalid) : SLJIT_FUNC_ADDR(do_extuni_utf)) : SLJIT_FUNC_ADDR(do_extuni_no_utf)); if (common->invalid_utf) add_jump(compiler, backtracks, CMP(SLJIT_EQUAL, SLJIT_RETURN_REG, 0, SLJIT_IMM, 0)); #else - sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(SW), SLJIT_IMM, - common->invalid_utf ? SLJIT_FUNC_OFFSET(do_extuni_utf_invalid) : SLJIT_FUNC_OFFSET(do_extuni_no_utf)); + sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS2(W, W, W), SLJIT_IMM, + common->invalid_utf ? SLJIT_FUNC_ADDR(do_extuni_utf_invalid) : SLJIT_FUNC_ADDR(do_extuni_no_utf)); if (!common->utf || common->invalid_utf) add_jump(compiler, backtracks, CMP(SLJIT_EQUAL, SLJIT_RETURN_REG, 0, SLJIT_IMM, 0)); #endif @@ -8758,7 +8989,7 @@ switch(type) if (sljit_has_cpu_feature(SLJIT_HAS_CMOV)) { - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, oc); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, oc); CMOV(SLJIT_EQUAL, TMP1, SLJIT_IMM, c); add_jump(compiler, backtracks, CMP(SLJIT_NOT_EQUAL, TMP1, 0, SLJIT_IMM, c)); } @@ -8878,7 +9109,7 @@ switch(type) OP2(SLJIT_LSHR, TMP1, 0, TMP1, 0, SLJIT_IMM, 3); OP1(SLJIT_MOV_U8, TMP1, 0, SLJIT_MEM1(TMP1), (sljit_sw)cc); OP2(SLJIT_SHL, TMP2, 0, SLJIT_IMM, 1, TMP2, 0); - OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, TMP2, 0); + OP2U(SLJIT_AND | SLJIT_SET_Z, TMP1, 0, TMP2, 0); add_jump(compiler, backtracks, JUMP(SLJIT_ZERO)); #if defined SUPPORT_UNICODE || PCRE2_CODE_UNIT_WIDTH != 8 @@ -9116,7 +9347,7 @@ if (common->utf && *cc == OP_REFI) caseless_loop = LABEL(); OP1(SLJIT_MOV_U32, TMP1, 0, SLJIT_MEM1(TMP2), 0); OP2(SLJIT_ADD, TMP2, 0, TMP2, 0, SLJIT_IMM, sizeof(uint32_t)); - OP2(SLJIT_SUB | SLJIT_SET_Z | SLJIT_SET_LESS, SLJIT_UNUSED, 0, TMP1, 0, char1_reg, 0); + OP2U(SLJIT_SUB | SLJIT_SET_Z | SLJIT_SET_LESS, TMP1, 0, char1_reg, 0); JUMPTO(SLJIT_EQUAL, loop); JUMPTO(SLJIT_LESS, caseless_loop); @@ -9575,12 +9806,12 @@ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LOCALS0, STR_PTR, 0); /* SLJIT_R0 = arguments */ OP1(SLJIT_MOV, SLJIT_R1, 0, STACK_TOP, 0); GET_LOCAL_BASE(SLJIT_R2, 0, OVECTOR_START); -sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(S32) | SLJIT_ARG1(SW) | SLJIT_ARG2(SW) | SLJIT_ARG3(SW), SLJIT_IMM, SLJIT_FUNC_OFFSET(do_callout)); +sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS3(32, W, W, W), SLJIT_IMM, SLJIT_FUNC_ADDR(do_callout)); OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(SLJIT_SP), LOCALS0); free_stack(common, callout_arg_size); /* Check return value. */ -OP2(SLJIT_SUB32 | SLJIT_SET_Z | SLJIT_SET_SIG_GREATER, SLJIT_UNUSED, 0, SLJIT_RETURN_REG, 0, SLJIT_IMM, 0); +OP2U(SLJIT_SUB32 | SLJIT_SET_Z | SLJIT_SET_SIG_GREATER, SLJIT_RETURN_REG, 0, SLJIT_IMM, 0); add_jump(compiler, &backtrack->topbacktracks, JUMP(SLJIT_SIG_GREATER)); if (common->abort_label == NULL) add_jump(compiler, &common->abort, JUMP(SLJIT_NOT_EQUAL) /* SIG_LESS */); @@ -10148,10 +10379,10 @@ SLJIT_ASSERT(TMP1 == SLJIT_R0 && STR_PTR == SLJIT_R1); OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr); #ifdef SUPPORT_UNICODE -sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(SW), SLJIT_IMM, - common->utf ? SLJIT_FUNC_OFFSET(do_script_run_utf) : SLJIT_FUNC_OFFSET(do_script_run)); +sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS2(W, W, W), SLJIT_IMM, + common->utf ? SLJIT_FUNC_ADDR(do_script_run_utf) : SLJIT_FUNC_ADDR(do_script_run)); #else -sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(SW), SLJIT_IMM, SLJIT_FUNC_OFFSET(do_script_run)); +sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS2(W, W, W), SLJIT_IMM, SLJIT_FUNC_ADDR(do_script_run)); #endif OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_RETURN_REG, 0); @@ -11374,7 +11605,7 @@ switch(opcode) if (common->mode == PCRE2_JIT_COMPLETE) { - OP2(SLJIT_SUB | SLJIT_SET_GREATER, SLJIT_UNUSED, 0, STR_PTR, 0, STR_END, 0); + OP2U(SLJIT_SUB | SLJIT_SET_GREATER, STR_PTR, 0, STR_END, 0); CMOV(SLJIT_GREATER, STR_PTR, STR_END, 0); } else @@ -11667,7 +11898,7 @@ switch(opcode) if (common->mode == PCRE2_JIT_COMPLETE) { - OP2(SLJIT_SUB | SLJIT_SET_GREATER, SLJIT_UNUSED, 0, STR_PTR, 0, STR_END, 0); + OP2U(SLJIT_SUB | SLJIT_SET_GREATER, STR_PTR, 0, STR_END, 0); CMOV(SLJIT_GREATER, STR_PTR, STR_END, 0); } else @@ -11751,9 +11982,9 @@ if (HAS_VIRTUAL_REGISTERS) else OP1(SLJIT_MOV_U32, TMP2, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, options)); -OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP2, 0, SLJIT_IMM, PCRE2_NOTEMPTY); +OP2U(SLJIT_AND | SLJIT_SET_Z, TMP2, 0, SLJIT_IMM, PCRE2_NOTEMPTY); add_jump(compiler, &backtrack->topbacktracks, JUMP(SLJIT_NOT_ZERO)); -OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP2, 0, SLJIT_IMM, PCRE2_NOTEMPTY_ATSTART); +OP2U(SLJIT_AND | SLJIT_SET_Z, TMP2, 0, SLJIT_IMM, PCRE2_NOTEMPTY_ATSTART); if (common->accept_label == NULL) add_jump(compiler, &common->accept, JUMP(SLJIT_ZERO)); else @@ -13004,7 +13235,7 @@ if (opcode == OP_SKIP_ARG) SLJIT_ASSERT(common->control_head_ptr != 0 && TMP1 == SLJIT_R0 && STR_PTR == SLJIT_R1); OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr); OP1(SLJIT_MOV, SLJIT_R1, 0, SLJIT_IMM, (sljit_sw)(current->cc + 2)); - sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(SW), SLJIT_IMM, SLJIT_FUNC_OFFSET(do_search_mark)); + sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS2(W, W, W), SLJIT_IMM, SLJIT_FUNC_ADDR(do_search_mark)); OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_R0, 0); add_jump(compiler, &common->reset_match, CMP(SLJIT_NOT_EQUAL, SLJIT_R0, 0, SLJIT_IMM, 0)); @@ -13248,10 +13479,8 @@ DEFINE_COMPILER; PCRE2_SPTR cc = common->start + common->currententry->start; PCRE2_SPTR ccbegin = cc + 1 + LINK_SIZE + (*cc == OP_BRA ? 0 : IMM2_SIZE); PCRE2_SPTR ccend = bracketend(cc) - (1 + LINK_SIZE); -BOOL needs_control_head; -BOOL has_quit; -BOOL has_accept; -int private_data_size = get_recurse_data_length(common, ccbegin, ccend, &needs_control_head, &has_quit, &has_accept); +uint32_t recurse_flags = 0; +int private_data_size = get_recurse_data_length(common, ccbegin, ccend, &recurse_flags); int alt_count, alt_max, local_size; backtrack_common altbacktrack; jump_list *match = NULL; @@ -13285,12 +13514,12 @@ allocate_stack(common, private_data_size + local_size); /* Save return address. */ OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(local_size - 1), TMP2, 0); -copy_recurse_data(common, ccbegin, ccend, recurse_copy_from_global, local_size, private_data_size + local_size, has_quit); +copy_recurse_data(common, ccbegin, ccend, recurse_copy_from_global, local_size, private_data_size + local_size, recurse_flags); /* This variable is saved and restored all time when we enter or exit from a recursive context. */ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->recursive_head_ptr, STACK_TOP, 0); -if (needs_control_head) +if (recurse_flags & recurse_flag_control_head_found) OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr, SLJIT_IMM, 0); if (alt_max > 1) @@ -13315,10 +13544,10 @@ while (1) if (SLJIT_UNLIKELY(sljit_get_compiler_error(compiler))) return; - allocate_stack(common, (alt_max > 1 || has_accept) ? 2 : 1); + allocate_stack(common, (alt_max > 1 || (recurse_flags & recurse_flag_accept_found)) ? 2 : 1); OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), common->recursive_head_ptr); - if (alt_max > 1 || has_accept) + if (alt_max > 1 || (recurse_flags & recurse_flag_accept_found)) { if (alt_max > 3) put_label = sljit_emit_put_label(compiler, SLJIT_MEM1(STACK_TOP), STACK(1)); @@ -13337,14 +13566,14 @@ while (1) sljit_emit_fast_enter(compiler, TMP1, 0); - if (has_accept) + if (recurse_flags & recurse_flag_accept_found) accept_exit = CMP(SLJIT_EQUAL, SLJIT_MEM1(STACK_TOP), STACK(1), SLJIT_IMM, -1); OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(STACK_TOP), STACK(0)); /* Save return address. */ OP1(SLJIT_MOV, SLJIT_MEM1(TMP2), STACK(local_size - 1), TMP1, 0); - copy_recurse_data(common, ccbegin, ccend, recurse_swap_global, local_size, private_data_size + local_size, has_quit); + copy_recurse_data(common, ccbegin, ccend, recurse_swap_global, local_size, private_data_size + local_size, recurse_flags); if (alt_max > 1) { @@ -13361,7 +13590,7 @@ while (1) next_alt = CMP(SLJIT_NOT_EQUAL, TMP1, 0, SLJIT_IMM, 0); } else - free_stack(common, has_accept ? 2 : 1); + free_stack(common, (recurse_flags & recurse_flag_accept_found) ? 2 : 1); } else if (alt_max > 3) { @@ -13396,7 +13625,7 @@ while (1) quit = LABEL(); -copy_recurse_data(common, ccbegin, ccend, recurse_copy_private_to_global, local_size, private_data_size + local_size, has_quit); +copy_recurse_data(common, ccbegin, ccend, recurse_copy_private_to_global, local_size, private_data_size + local_size, recurse_flags); OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(STACK_TOP), STACK(local_size - 1)); free_stack(common, private_data_size + local_size); @@ -13405,15 +13634,15 @@ OP_SRC(SLJIT_FAST_RETURN, TMP2, 0); if (common->quit != NULL) { - SLJIT_ASSERT(has_quit); + SLJIT_ASSERT(recurse_flags & recurse_flag_quit_found); set_jumps(common->quit, LABEL()); OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), common->recursive_head_ptr); - copy_recurse_data(common, ccbegin, ccend, recurse_copy_shared_to_global, local_size, private_data_size + local_size, has_quit); + copy_recurse_data(common, ccbegin, ccend, recurse_copy_shared_to_global, local_size, private_data_size + local_size, recurse_flags); JUMPTO(SLJIT_JUMP, quit); } -if (has_accept) +if (recurse_flags & recurse_flag_accept_found) { JUMPHERE(accept_exit); free_stack(common, 2); @@ -13421,7 +13650,7 @@ if (has_accept) /* Save return address. */ OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(local_size - 1), TMP1, 0); - copy_recurse_data(common, ccbegin, ccend, recurse_copy_kept_shared_to_global, local_size, private_data_size + local_size, has_quit); + copy_recurse_data(common, ccbegin, ccend, recurse_copy_kept_shared_to_global, local_size, private_data_size + local_size, recurse_flags); OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(STACK_TOP), STACK(local_size - 1)); free_stack(common, private_data_size + local_size); @@ -13431,7 +13660,7 @@ if (has_accept) if (common->accept != NULL) { - SLJIT_ASSERT(has_accept); + SLJIT_ASSERT(recurse_flags & recurse_flag_accept_found); set_jumps(common->accept, LABEL()); @@ -13446,7 +13675,7 @@ set_jumps(match, LABEL()); OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), TMP2, 0); -copy_recurse_data(common, ccbegin, ccend, recurse_swap_global, local_size, private_data_size + local_size, has_quit); +copy_recurse_data(common, ccbegin, ccend, recurse_swap_global, local_size, private_data_size + local_size, recurse_flags); OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(TMP2), STACK(local_size - 1)); OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, 1); @@ -13652,7 +13881,7 @@ SLJIT_ASSERT(!(common->req_char_ptr != 0 && common->start_used_ptr != 0)); common->cbra_ptr = OVECTOR_START + (re->top_bracket + 1) * 2 * sizeof(sljit_sw); total_length = ccend - common->start; -common->private_data_ptrs = (sljit_s32 *)SLJIT_MALLOC(total_length * (sizeof(sljit_s32) + (common->has_then ? 1 : 0)), allocator_data); +common->private_data_ptrs = (sljit_s32*)SLJIT_MALLOC(total_length * (sizeof(sljit_s32) + (common->has_then ? 1 : 0)), allocator_data); if (!common->private_data_ptrs) { SLJIT_FREE(common->optimized_cbracket, allocator_data); @@ -13692,8 +13921,9 @@ if (!compiler) } common->compiler = compiler; -/* Main pcre_jit_exec entry. */ -sljit_emit_enter(compiler, 0, SLJIT_ARG1(SW), 5, 5, 0, 0, private_data_size); +/* Main pcre2_jit_exec entry. */ +SLJIT_ASSERT((private_data_size & (sizeof(sljit_sw) - 1)) == 0); +sljit_emit_enter(compiler, 0, SLJIT_ARGS1(W, W), 5, 5, 0, 0, private_data_size); /* Register init. */ reset_ovector(common, (re->top_bracket + 1) * 2); @@ -13900,9 +14130,9 @@ if (common->might_be_empty) JUMPHERE(empty_match); OP1(SLJIT_MOV, TMP1, 0, ARGUMENTS, 0); OP1(SLJIT_MOV_U32, TMP2, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, options)); - OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP2, 0, SLJIT_IMM, PCRE2_NOTEMPTY); + OP2U(SLJIT_AND | SLJIT_SET_Z, TMP2, 0, SLJIT_IMM, PCRE2_NOTEMPTY); JUMPTO(SLJIT_NOT_ZERO, empty_match_backtrack_label); - OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP2, 0, SLJIT_IMM, PCRE2_NOTEMPTY_ATSTART); + OP2U(SLJIT_AND | SLJIT_SET_Z, TMP2, 0, SLJIT_IMM, PCRE2_NOTEMPTY_ATSTART); JUMPTO(SLJIT_ZERO, empty_match_found_label); OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, str)); CMPTO(SLJIT_NOT_EQUAL, TMP2, 0, STR_PTR, 0, empty_match_found_label); @@ -13915,20 +14145,40 @@ common->early_fail_end_ptr = 0; common->currententry = common->entries; common->local_quit_available = TRUE; quit_label = common->quit_label; -while (common->currententry != NULL) +if (common->currententry != NULL) { - /* Might add new entries. */ - compile_recurse(common); - if (SLJIT_UNLIKELY(sljit_get_compiler_error(compiler))) + /* A free bit for each private data. */ + common->recurse_bitset_size = ((private_data_size / (int)sizeof(sljit_sw)) + 7) >> 3; + SLJIT_ASSERT(common->recurse_bitset_size > 0); + common->recurse_bitset = (sljit_u8*)SLJIT_MALLOC(common->recurse_bitset_size, allocator_data);; + + if (common->recurse_bitset != NULL) + { + do + { + /* Might add new entries. */ + compile_recurse(common); + if (SLJIT_UNLIKELY(sljit_get_compiler_error(compiler))) + break; + flush_stubs(common); + common->currententry = common->currententry->next; + } + while (common->currententry != NULL); + + SLJIT_FREE(common->recurse_bitset, allocator_data); + } + + if (common->currententry != NULL) { + /* The common->recurse_bitset has been freed. */ + SLJIT_ASSERT(sljit_get_compiler_error(compiler) || common->recurse_bitset == NULL); + sljit_free_compiler(compiler); SLJIT_FREE(common->optimized_cbracket, allocator_data); SLJIT_FREE(common->private_data_ptrs, allocator_data); PRIV(jit_free_rodata)(common->read_only_data_head, allocator_data); return PCRE2_ERROR_NOMEMORY; } - flush_stubs(common); - common->currententry = common->currententry->next; } common->local_quit_available = FALSE; common->quit_label = quit_label; @@ -13947,7 +14197,7 @@ OP2(SLJIT_SUB, SLJIT_R1, 0, STACK_LIMIT, 0, SLJIT_IMM, STACK_GROWTH_RATE); OP1(SLJIT_MOV, SLJIT_R0, 0, SLJIT_MEM1(SLJIT_R0), SLJIT_OFFSETOF(jit_arguments, stack)); OP1(SLJIT_MOV, STACK_LIMIT, 0, TMP2, 0); -sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(SW), SLJIT_IMM, SLJIT_FUNC_OFFSET(sljit_stack_resize)); +sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS2(W, W, W), SLJIT_IMM, SLJIT_FUNC_ADDR(sljit_stack_resize)); jump = CMP(SLJIT_EQUAL, SLJIT_RETURN_REG, 0, SLJIT_IMM, 0); OP1(SLJIT_MOV, TMP2, 0, STACK_LIMIT, 0); diff --git a/thirdparty/pcre2/src/pcre2_jit_match.c b/thirdparty/pcre2/src/pcre2_jit_match.c index 7e13b8cfee..1ab3af073e 100644 --- a/thirdparty/pcre2/src/pcre2_jit_match.c +++ b/thirdparty/pcre2/src/pcre2_jit_match.c @@ -120,7 +120,7 @@ else if ((options & PCRE2_PARTIAL_SOFT) != 0) if (functions == NULL || functions->executable_funcs[index] == NULL) return PCRE2_ERROR_JIT_BADOPTION; -/* Sanity checks should be handled by pcre_exec. */ +/* Sanity checks should be handled by pcre2_match. */ arguments.str = subject + start_offset; arguments.begin = subject; arguments.end = subject + length; diff --git a/thirdparty/pcre2/src/pcre2_jit_misc.c b/thirdparty/pcre2/src/pcre2_jit_misc.c index ec924e0f9b..e57afad065 100644 --- a/thirdparty/pcre2/src/pcre2_jit_misc.c +++ b/thirdparty/pcre2/src/pcre2_jit_misc.c @@ -135,7 +135,7 @@ return NULL; pcre2_jit_stack *jit_stack; -if (startsize < 1 || maxsize < 1) +if (startsize == 0 || maxsize == 0 || maxsize > SIZE_MAX - STACK_GROWTH_RATE) return NULL; if (startsize > maxsize) startsize = maxsize; diff --git a/thirdparty/pcre2/src/pcre2_jit_simd_inc.h b/thirdparty/pcre2/src/pcre2_jit_simd_inc.h index aa029cce38..d99cfc5ce4 100644 --- a/thirdparty/pcre2/src/pcre2_jit_simd_inc.h +++ b/thirdparty/pcre2/src/pcre2_jit_simd_inc.h @@ -339,7 +339,7 @@ if (common->mode != PCRE2_JIT_COMPLETE) { JUMPHERE(partial_quit[0]); JUMPHERE(partial_quit[1]); - OP2(SLJIT_SUB | SLJIT_SET_GREATER, SLJIT_UNUSED, 0, STR_PTR, 0, STR_END, 0); + OP2U(SLJIT_SUB | SLJIT_SET_GREATER, STR_PTR, 0, STR_END, 0); CMOV(SLJIT_GREATER, STR_PTR, STR_END, 0); } else @@ -537,7 +537,7 @@ if (common->match_end_ptr != 0) OP1(SLJIT_MOV, TMP3, 0, STR_END, 0); OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, IN_UCHARS(offs1 + 1)); - OP2(SLJIT_SUB | SLJIT_SET_LESS, SLJIT_UNUSED, 0, TMP1, 0, STR_END, 0); + OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP1, 0, STR_END, 0); CMOV(SLJIT_LESS, STR_END, TMP1, 0); } @@ -883,14 +883,14 @@ if (char1 == char2) #if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 if (common->utf && offset > 0) - sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(UW) | SLJIT_ARG3(UW) | SLJIT_ARG4(UW), - SLJIT_IMM, SLJIT_FUNC_OFFSET(ffcs_utf)); + sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W), + SLJIT_IMM, SLJIT_FUNC_ADDR(ffcs_utf)); else - sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(UW) | SLJIT_ARG3(UW) | SLJIT_ARG4(UW), - SLJIT_IMM, SLJIT_FUNC_OFFSET(ffcs)); + sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W), + SLJIT_IMM, SLJIT_FUNC_ADDR(ffcs)); #else - sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(UW) | SLJIT_ARG3(UW) | SLJIT_ARG4(UW), - SLJIT_IMM, SLJIT_FUNC_OFFSET(ffcs)); + sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W), + SLJIT_IMM, SLJIT_FUNC_ADDR(ffcs)); #endif } else @@ -904,14 +904,14 @@ else #if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 if (common->utf && offset > 0) - sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(UW) | SLJIT_ARG3(UW) | SLJIT_ARG4(UW), - SLJIT_IMM, SLJIT_FUNC_OFFSET(ffcs_mask_utf)); + sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W), + SLJIT_IMM, SLJIT_FUNC_ADDR(ffcs_mask_utf)); else - sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(UW) | SLJIT_ARG3(UW) | SLJIT_ARG4(UW), - SLJIT_IMM, SLJIT_FUNC_OFFSET(ffcs_mask)); + sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W), + SLJIT_IMM, SLJIT_FUNC_ADDR(ffcs_mask)); #else - sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(UW) | SLJIT_ARG3(UW) | SLJIT_ARG4(UW), - SLJIT_IMM, SLJIT_FUNC_OFFSET(ffcs_mask)); + sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W), + SLJIT_IMM, SLJIT_FUNC_ADDR(ffcs_mask)); #endif } else @@ -922,14 +922,14 @@ else #if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 if (common->utf && offset > 0) - sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(UW) | SLJIT_ARG3(UW) | SLJIT_ARG4(UW), - SLJIT_IMM, SLJIT_FUNC_OFFSET(ffcs_2_utf)); + sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W), + SLJIT_IMM, SLJIT_FUNC_ADDR(ffcs_2_utf)); else - sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(UW) | SLJIT_ARG3(UW) | SLJIT_ARG4(UW), - SLJIT_IMM, SLJIT_FUNC_OFFSET(ffcs_2)); + sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W), + SLJIT_IMM, SLJIT_FUNC_ADDR(ffcs_2)); #else - sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(UW) | SLJIT_ARG3(UW) | SLJIT_ARG4(UW), - SLJIT_IMM, SLJIT_FUNC_OFFSET(ffcs_2)); + sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W), + SLJIT_IMM, SLJIT_FUNC_ADDR(ffcs_2)); #endif } } @@ -1067,7 +1067,7 @@ else OP1(SLJIT_MOV, SLJIT_R0, 0, SLJIT_MEM1(SLJIT_SP), common->match_end_ptr); OP2(SLJIT_ADD, SLJIT_R0, 0, SLJIT_R0, 0, SLJIT_IMM, IN_UCHARS(offs1 + 1)); - OP2(SLJIT_SUB | SLJIT_SET_LESS, SLJIT_UNUSED, 0, STR_END, 0, SLJIT_R0, 0); + OP2U(SLJIT_SUB | SLJIT_SET_LESS, STR_END, 0, SLJIT_R0, 0); CMOV(SLJIT_LESS, SLJIT_R0, STR_END, 0); } @@ -1084,31 +1084,31 @@ if (diff == 1) { if (char1a == char1b && char2a == char2b) { #if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 if (common->utf) - sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(SW) | SLJIT_ARG3(SW) | SLJIT_ARG4(SW), - SLJIT_IMM, SLJIT_FUNC_OFFSET(ffcps_0_utf)); + sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W), + SLJIT_IMM, SLJIT_FUNC_ADDR(ffcps_0_utf)); else #endif - sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(SW) | SLJIT_ARG3(SW) | SLJIT_ARG4(SW), - SLJIT_IMM, SLJIT_FUNC_OFFSET(ffcps_0)); + sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W), + SLJIT_IMM, SLJIT_FUNC_ADDR(ffcps_0)); } else { #if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 if (common->utf) - sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(SW) | SLJIT_ARG3(SW) | SLJIT_ARG4(SW), - SLJIT_IMM, SLJIT_FUNC_OFFSET(ffcps_1_utf)); + sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W), + SLJIT_IMM, SLJIT_FUNC_ADDR(ffcps_1_utf)); else #endif - sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(SW) | SLJIT_ARG3(SW) | SLJIT_ARG4(SW), - SLJIT_IMM, SLJIT_FUNC_OFFSET(ffcps_1)); + sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W), + SLJIT_IMM, SLJIT_FUNC_ADDR(ffcps_1)); } } else { #if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 if (common->utf) - sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(SW) | SLJIT_ARG3(SW) | SLJIT_ARG4(SW), - SLJIT_IMM, SLJIT_FUNC_OFFSET(ffcps_default_utf)); + sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W), + SLJIT_IMM, SLJIT_FUNC_ADDR(ffcps_default_utf)); else #endif - sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(SW) | SLJIT_ARG3(SW) | SLJIT_ARG4(SW), - SLJIT_IMM, SLJIT_FUNC_OFFSET(ffcps_default)); + sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W), + SLJIT_IMM, SLJIT_FUNC_ADDR(ffcps_default)); } /* Restore STR_PTR register. */ @@ -1418,7 +1418,7 @@ if (common->mode != PCRE2_JIT_COMPLETE) { JUMPHERE(partial_quit[0]); JUMPHERE(partial_quit[1]); - OP2(SLJIT_SUB | SLJIT_SET_GREATER, SLJIT_UNUSED, 0, STR_PTR, 0, STR_END, 0); + OP2U(SLJIT_SUB | SLJIT_SET_GREATER, STR_PTR, 0, STR_END, 0); CMOV(SLJIT_GREATER, STR_PTR, STR_END, 0); } else @@ -1673,7 +1673,7 @@ if (common->match_end_ptr != 0) OP1(SLJIT_MOV, TMP3, 0, STR_END, 0); OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, IN_UCHARS(offs1 + 1)); - OP2(SLJIT_SUB | SLJIT_SET_LESS, SLJIT_UNUSED, 0, TMP1, 0, STR_END, 0); + OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP1, 0, STR_END, 0); CMOV(SLJIT_LESS, STR_END, TMP1, 0); } diff --git a/thirdparty/pcre2/src/pcre2_match.c b/thirdparty/pcre2/src/pcre2_match.c index f28cdbb47a..6354e1bb9e 100644 --- a/thirdparty/pcre2/src/pcre2_match.c +++ b/thirdparty/pcre2/src/pcre2_match.c @@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Original API code Copyright (c) 1997-2012 University of Cambridge - New API code Copyright (c) 2015-2021 University of Cambridge + New API code Copyright (c) 2015-2022 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -49,7 +49,7 @@ POSSIBILITY OF SUCH DAMAGE. /* #define DEBUG_SHOW_OPS */ /* #define DEBUG_SHOW_RMATCH */ -#ifdef DEBUG_FRAME_DISPLAY +#ifdef DEBUG_FRAMES_DISPLAY #include <stdarg.h> #endif @@ -159,7 +159,8 @@ enum { RM100=100, RM101 }; #ifdef SUPPORT_UNICODE enum { RM200=200, RM201, RM202, RM203, RM204, RM205, RM206, RM207, RM208, RM209, RM210, RM211, RM212, RM213, RM214, RM215, - RM216, RM217, RM218, RM219, RM220, RM221, RM222 }; + RM216, RM217, RM218, RM219, RM220, RM221, RM222, RM223, + RM224, RM225 }; #endif /* Define short names for general fields in the current backtrack frame, which @@ -2421,40 +2422,49 @@ fprintf(stderr, "++ op=%d\n", *Fecode); { const uint32_t *cp; const ucd_record *prop = GET_UCD(fc); + BOOL notmatch = Fop == OP_NOTPROP; switch(Fecode[1]) { case PT_ANY: - if (Fop == OP_NOTPROP) RRETURN(MATCH_NOMATCH); + if (notmatch) RRETURN(MATCH_NOMATCH); break; case PT_LAMP: if ((prop->chartype == ucp_Lu || prop->chartype == ucp_Ll || - prop->chartype == ucp_Lt) == (Fop == OP_NOTPROP)) + prop->chartype == ucp_Lt) == notmatch) RRETURN(MATCH_NOMATCH); break; case PT_GC: - if ((Fecode[2] != PRIV(ucp_gentype)[prop->chartype]) == (Fop == OP_PROP)) + if ((Fecode[2] == PRIV(ucp_gentype)[prop->chartype]) == notmatch) RRETURN(MATCH_NOMATCH); break; case PT_PC: - if ((Fecode[2] != prop->chartype) == (Fop == OP_PROP)) + if ((Fecode[2] == prop->chartype) == notmatch) RRETURN(MATCH_NOMATCH); break; case PT_SC: - if ((Fecode[2] != prop->script) == (Fop == OP_PROP)) + if ((Fecode[2] == prop->script) == notmatch) RRETURN(MATCH_NOMATCH); break; + case PT_SCX: + { + BOOL ok = (Fecode[2] == prop->script || + MAPBIT(PRIV(ucd_script_sets) + UCD_SCRIPTX_PROP(prop), Fecode[2]) != 0); + if (ok == notmatch) RRETURN(MATCH_NOMATCH); + } + break; + /* These are specials */ case PT_ALNUM: if ((PRIV(ucp_gentype)[prop->chartype] == ucp_L || - PRIV(ucp_gentype)[prop->chartype] == ucp_N) == (Fop == OP_NOTPROP)) + PRIV(ucp_gentype)[prop->chartype] == ucp_N) == notmatch) RRETURN(MATCH_NOMATCH); break; @@ -2468,12 +2478,12 @@ fprintf(stderr, "++ op=%d\n", *Fecode); { HSPACE_CASES: VSPACE_CASES: - if (Fop == OP_NOTPROP) RRETURN(MATCH_NOMATCH); + if (notmatch) RRETURN(MATCH_NOMATCH); break; default: - if ((PRIV(ucp_gentype)[prop->chartype] == ucp_Z) == - (Fop == OP_NOTPROP)) RRETURN(MATCH_NOMATCH); + if ((PRIV(ucp_gentype)[prop->chartype] == ucp_Z) == notmatch) + RRETURN(MATCH_NOMATCH); break; } break; @@ -2481,7 +2491,7 @@ fprintf(stderr, "++ op=%d\n", *Fecode); case PT_WORD: if ((PRIV(ucp_gentype)[prop->chartype] == ucp_L || PRIV(ucp_gentype)[prop->chartype] == ucp_N || - fc == CHAR_UNDERSCORE) == (Fop == OP_NOTPROP)) + fc == CHAR_UNDERSCORE) == notmatch) RRETURN(MATCH_NOMATCH); break; @@ -2490,19 +2500,32 @@ fprintf(stderr, "++ op=%d\n", *Fecode); for (;;) { if (fc < *cp) - { if (Fop == OP_PROP) { RRETURN(MATCH_NOMATCH); } else break; } + { if (notmatch) break; else { RRETURN(MATCH_NOMATCH); } } if (fc == *cp++) - { if (Fop == OP_PROP) break; else { RRETURN(MATCH_NOMATCH); } } + { if (notmatch) { RRETURN(MATCH_NOMATCH); } else break; } } break; case PT_UCNC: if ((fc == CHAR_DOLLAR_SIGN || fc == CHAR_COMMERCIAL_AT || fc == CHAR_GRAVE_ACCENT || (fc >= 0xa0 && fc <= 0xd7ff) || - fc >= 0xe000) == (Fop == OP_NOTPROP)) + fc >= 0xe000) == notmatch) RRETURN(MATCH_NOMATCH); break; + case PT_BIDICL: + if ((UCD_BIDICLASS_PROP(prop) == Fecode[2]) == notmatch) + RRETURN(MATCH_NOMATCH); + break; + + case PT_BOOL: + { + BOOL ok = MAPBIT(PRIV(ucd_boolprop_sets) + + UCD_BPROPS_PROP(prop), Fecode[2]) != 0; + if (ok == notmatch) RRETURN(MATCH_NOMATCH); + } + break; + /* This should never occur */ default: @@ -2616,18 +2639,20 @@ fprintf(stderr, "++ op=%d\n", *Fecode); /* First, ensure the minimum number of matches are present. Use inline code for maximizing the speed, and do the type test once at the start - (i.e. keep it out of the loop). The code for UTF mode is separated out for - tidiness, except for Unicode property tests. */ + (i.e. keep it out of the loops). As there are no calls to RMATCH in the + loops, we can use an ordinary variable for "notmatch". The code for UTF + mode is separated out for tidiness, except for Unicode property tests. */ if (Lmin > 0) { #ifdef SUPPORT_UNICODE if (proptype >= 0) /* Property tests in all modes */ { + BOOL notmatch = Lctype == OP_NOTPROP; switch(proptype) { case PT_ANY: - if (Lctype == OP_NOTPROP) RRETURN(MATCH_NOMATCH); + if (notmatch) RRETURN(MATCH_NOMATCH); for (i = 1; i <= Lmin; i++) { if (Feptr >= mb->end_subject) @@ -2652,7 +2677,7 @@ fprintf(stderr, "++ op=%d\n", *Fecode); chartype = UCD_CHARTYPE(fc); if ((chartype == ucp_Lu || chartype == ucp_Ll || - chartype == ucp_Lt) == (Lctype == OP_NOTPROP)) + chartype == ucp_Lt) == notmatch) RRETURN(MATCH_NOMATCH); } break; @@ -2666,7 +2691,7 @@ fprintf(stderr, "++ op=%d\n", *Fecode); RRETURN(MATCH_NOMATCH); } GETCHARINCTEST(fc, Feptr); - if ((UCD_CATEGORY(fc) == Lpropvalue) == (Lctype == OP_NOTPROP)) + if ((UCD_CATEGORY(fc) == Lpropvalue) == notmatch) RRETURN(MATCH_NOMATCH); } break; @@ -2680,7 +2705,7 @@ fprintf(stderr, "++ op=%d\n", *Fecode); RRETURN(MATCH_NOMATCH); } GETCHARINCTEST(fc, Feptr); - if ((UCD_CHARTYPE(fc) == Lpropvalue) == (Lctype == OP_NOTPROP)) + if ((UCD_CHARTYPE(fc) == Lpropvalue) == notmatch) RRETURN(MATCH_NOMATCH); } break; @@ -2694,7 +2719,26 @@ fprintf(stderr, "++ op=%d\n", *Fecode); RRETURN(MATCH_NOMATCH); } GETCHARINCTEST(fc, Feptr); - if ((UCD_SCRIPT(fc) == Lpropvalue) == (Lctype == OP_NOTPROP)) + if ((UCD_SCRIPT(fc) == Lpropvalue) == notmatch) + RRETURN(MATCH_NOMATCH); + } + break; + + case PT_SCX: + for (i = 1; i <= Lmin; i++) + { + BOOL ok; + const ucd_record *prop; + if (Feptr >= mb->end_subject) + { + SCHECK_PARTIAL(); + RRETURN(MATCH_NOMATCH); + } + GETCHARINCTEST(fc, Feptr); + prop = GET_UCD(fc); + ok = (prop->script == Lpropvalue || + MAPBIT(PRIV(ucd_script_sets) + UCD_SCRIPTX_PROP(prop), Lpropvalue) != 0); + if (ok == notmatch) RRETURN(MATCH_NOMATCH); } break; @@ -2710,7 +2754,7 @@ fprintf(stderr, "++ op=%d\n", *Fecode); } GETCHARINCTEST(fc, Feptr); category = UCD_CATEGORY(fc); - if ((category == ucp_L || category == ucp_N) == (Lctype == OP_NOTPROP)) + if ((category == ucp_L || category == ucp_N) == notmatch) RRETURN(MATCH_NOMATCH); } break; @@ -2733,11 +2777,11 @@ fprintf(stderr, "++ op=%d\n", *Fecode); { HSPACE_CASES: VSPACE_CASES: - if (Lctype == OP_NOTPROP) RRETURN(MATCH_NOMATCH); + if (notmatch) RRETURN(MATCH_NOMATCH); break; default: - if ((UCD_CATEGORY(fc) == ucp_Z) == (Lctype == OP_NOTPROP)) + if ((UCD_CATEGORY(fc) == ucp_Z) == notmatch) RRETURN(MATCH_NOMATCH); break; } @@ -2756,7 +2800,7 @@ fprintf(stderr, "++ op=%d\n", *Fecode); GETCHARINCTEST(fc, Feptr); category = UCD_CATEGORY(fc); if ((category == ucp_L || category == ucp_N || - fc == CHAR_UNDERSCORE) == (Lctype == OP_NOTPROP)) + fc == CHAR_UNDERSCORE) == notmatch) RRETURN(MATCH_NOMATCH); } break; @@ -2776,12 +2820,12 @@ fprintf(stderr, "++ op=%d\n", *Fecode); { if (fc < *cp) { - if (Lctype == OP_NOTPROP) break; + if (notmatch) break; RRETURN(MATCH_NOMATCH); } if (fc == *cp++) { - if (Lctype == OP_NOTPROP) RRETURN(MATCH_NOMATCH); + if (notmatch) RRETURN(MATCH_NOMATCH); break; } } @@ -2799,7 +2843,40 @@ fprintf(stderr, "++ op=%d\n", *Fecode); GETCHARINCTEST(fc, Feptr); if ((fc == CHAR_DOLLAR_SIGN || fc == CHAR_COMMERCIAL_AT || fc == CHAR_GRAVE_ACCENT || (fc >= 0xa0 && fc <= 0xd7ff) || - fc >= 0xe000) == (Lctype == OP_NOTPROP)) + fc >= 0xe000) == notmatch) + RRETURN(MATCH_NOMATCH); + } + break; + + case PT_BIDICL: + for (i = 1; i <= Lmin; i++) + { + if (Feptr >= mb->end_subject) + { + SCHECK_PARTIAL(); + RRETURN(MATCH_NOMATCH); + } + GETCHARINCTEST(fc, Feptr); + if ((UCD_BIDICLASS(fc) == Lpropvalue) == notmatch) + RRETURN(MATCH_NOMATCH); + } + break; + + case PT_BOOL: + for (i = 1; i <= Lmin; i++) + { + BOOL ok; + const ucd_record *prop; + if (Feptr >= mb->end_subject) + { + SCHECK_PARTIAL(); + RRETURN(MATCH_NOMATCH); + } + GETCHARINCTEST(fc, Feptr); + prop = GET_UCD(fc); + ok = MAPBIT(PRIV(ucd_boolprop_sets) + + UCD_BPROPS_PROP(prop), Lpropvalue) != 0; + if (ok == notmatch) RRETURN(MATCH_NOMATCH); } break; @@ -3343,7 +3420,9 @@ fprintf(stderr, "++ op=%d\n", *Fecode); if (Lmin == Lmax) continue; /* If minimizing, we have to test the rest of the pattern before each - subsequent match. */ + subsequent match. This means we cannot use a local "notmatch" variable as + in the other cases. As all 4 temporary 32-bit values in the frame are + already in use, just test the type each time. */ if (reptype == REPTYPE_MIN) { @@ -3440,6 +3519,28 @@ fprintf(stderr, "++ op=%d\n", *Fecode); } /* Control never gets here */ + case PT_SCX: + for (;;) + { + BOOL ok; + const ucd_record *prop; + RMATCH(Fecode, RM225); + if (rrc != MATCH_NOMATCH) RRETURN(rrc); + if (Lmin++ >= Lmax) RRETURN(MATCH_NOMATCH); + if (Feptr >= mb->end_subject) + { + SCHECK_PARTIAL(); + RRETURN(MATCH_NOMATCH); + } + GETCHARINCTEST(fc, Feptr); + prop = GET_UCD(fc); + ok = (prop->script == Lpropvalue + || MAPBIT(PRIV(ucd_script_sets) + UCD_SCRIPTX_PROP(prop), Lpropvalue) != 0); + if (ok == (Lctype == OP_NOTPROP)) + RRETURN(MATCH_NOMATCH); + } + /* Control never gets here */ + case PT_ALNUM: for (;;) { @@ -3454,8 +3555,7 @@ fprintf(stderr, "++ op=%d\n", *Fecode); } GETCHARINCTEST(fc, Feptr); category = UCD_CATEGORY(fc); - if ((category == ucp_L || category == ucp_N) == - (Lctype == OP_NOTPROP)) + if ((category == ucp_L || category == ucp_N) == (Lctype == OP_NOTPROP)) RRETURN(MATCH_NOMATCH); } /* Control never gets here */ @@ -3562,6 +3662,45 @@ fprintf(stderr, "++ op=%d\n", *Fecode); } /* Control never gets here */ + case PT_BIDICL: + for (;;) + { + RMATCH(Fecode, RM224); + if (rrc != MATCH_NOMATCH) RRETURN(rrc); + if (Lmin++ >= Lmax) RRETURN(MATCH_NOMATCH); + if (Feptr >= mb->end_subject) + { + SCHECK_PARTIAL(); + RRETURN(MATCH_NOMATCH); + } + GETCHARINCTEST(fc, Feptr); + if ((UCD_BIDICLASS(fc) == Lpropvalue) == (Lctype == OP_NOTPROP)) + RRETURN(MATCH_NOMATCH); + } + /* Control never gets here */ + + case PT_BOOL: + for (;;) + { + BOOL ok; + const ucd_record *prop; + RMATCH(Fecode, RM223); + if (rrc != MATCH_NOMATCH) RRETURN(rrc); + if (Lmin++ >= Lmax) RRETURN(MATCH_NOMATCH); + if (Feptr >= mb->end_subject) + { + SCHECK_PARTIAL(); + RRETURN(MATCH_NOMATCH); + } + GETCHARINCTEST(fc, Feptr); + prop = GET_UCD(fc); + ok = MAPBIT(PRIV(ucd_boolprop_sets) + + UCD_BPROPS_PROP(prop), Lpropvalue) != 0; + if (ok == (Lctype == OP_NOTPROP)) + RRETURN(MATCH_NOMATCH); + } + /* Control never gets here */ + /* This should never occur */ default: return PCRE2_ERROR_INTERNAL; @@ -3870,7 +4009,9 @@ fprintf(stderr, "++ op=%d\n", *Fecode); } /* If maximizing, it is worth using inline code for speed, doing the type - test once at the start (i.e. keep it out of the loop). */ + test once at the start (i.e. keep it out of the loops). Once again, + "notmatch" can be an ordinary local variable because the loops do not call + RMATCH. */ else { @@ -3879,6 +4020,7 @@ fprintf(stderr, "++ op=%d\n", *Fecode); #ifdef SUPPORT_UNICODE if (proptype >= 0) { + BOOL notmatch = Lctype == OP_NOTPROP; switch(proptype) { case PT_ANY: @@ -3891,7 +4033,7 @@ fprintf(stderr, "++ op=%d\n", *Fecode); break; } GETCHARLENTEST(fc, Feptr, len); - if (Lctype == OP_NOTPROP) break; + if (notmatch) break; Feptr+= len; } break; @@ -3910,7 +4052,7 @@ fprintf(stderr, "++ op=%d\n", *Fecode); chartype = UCD_CHARTYPE(fc); if ((chartype == ucp_Lu || chartype == ucp_Ll || - chartype == ucp_Lt) == (Lctype == OP_NOTPROP)) + chartype == ucp_Lt) == notmatch) break; Feptr+= len; } @@ -3926,8 +4068,7 @@ fprintf(stderr, "++ op=%d\n", *Fecode); break; } GETCHARLENTEST(fc, Feptr, len); - if ((UCD_CATEGORY(fc) == Lpropvalue) == (Lctype == OP_NOTPROP)) - break; + if ((UCD_CATEGORY(fc) == Lpropvalue) == notmatch) break; Feptr+= len; } break; @@ -3942,8 +4083,7 @@ fprintf(stderr, "++ op=%d\n", *Fecode); break; } GETCHARLENTEST(fc, Feptr, len); - if ((UCD_CHARTYPE(fc) == Lpropvalue) == (Lctype == OP_NOTPROP)) - break; + if ((UCD_CHARTYPE(fc) == Lpropvalue) == notmatch) break; Feptr+= len; } break; @@ -3958,8 +4098,27 @@ fprintf(stderr, "++ op=%d\n", *Fecode); break; } GETCHARLENTEST(fc, Feptr, len); - if ((UCD_SCRIPT(fc) == Lpropvalue) == (Lctype == OP_NOTPROP)) + if ((UCD_SCRIPT(fc) == Lpropvalue) == notmatch) break; + Feptr+= len; + } + break; + + case PT_SCX: + for (i = Lmin; i < Lmax; i++) + { + BOOL ok; + const ucd_record *prop; + int len = 1; + if (Feptr >= mb->end_subject) + { + SCHECK_PARTIAL(); break; + } + GETCHARLENTEST(fc, Feptr, len); + prop = GET_UCD(fc); + ok = (prop->script == Lpropvalue || + MAPBIT(PRIV(ucd_script_sets) + UCD_SCRIPTX_PROP(prop), Lpropvalue) != 0); + if (ok == notmatch) break; Feptr+= len; } break; @@ -3976,8 +4135,7 @@ fprintf(stderr, "++ op=%d\n", *Fecode); } GETCHARLENTEST(fc, Feptr, len); category = UCD_CATEGORY(fc); - if ((category == ucp_L || category == ucp_N) == - (Lctype == OP_NOTPROP)) + if ((category == ucp_L || category == ucp_N) == notmatch) break; Feptr+= len; } @@ -4002,11 +4160,11 @@ fprintf(stderr, "++ op=%d\n", *Fecode); { HSPACE_CASES: VSPACE_CASES: - if (Lctype == OP_NOTPROP) goto ENDLOOP99; /* Break the loop */ + if (notmatch) goto ENDLOOP99; /* Break the loop */ break; default: - if ((UCD_CATEGORY(fc) == ucp_Z) == (Lctype == OP_NOTPROP)) + if ((UCD_CATEGORY(fc) == ucp_Z) == notmatch) goto ENDLOOP99; /* Break the loop */ break; } @@ -4028,7 +4186,7 @@ fprintf(stderr, "++ op=%d\n", *Fecode); GETCHARLENTEST(fc, Feptr, len); category = UCD_CATEGORY(fc); if ((category == ucp_L || category == ucp_N || - fc == CHAR_UNDERSCORE) == (Lctype == OP_NOTPROP)) + fc == CHAR_UNDERSCORE) == notmatch) break; Feptr+= len; } @@ -4049,9 +4207,9 @@ fprintf(stderr, "++ op=%d\n", *Fecode); for (;;) { if (fc < *cp) - { if (Lctype == OP_NOTPROP) break; else goto GOT_MAX; } + { if (notmatch) break; else goto GOT_MAX; } if (fc == *cp++) - { if (Lctype == OP_NOTPROP) goto GOT_MAX; else break; } + { if (notmatch) goto GOT_MAX; else break; } } Feptr += len; } @@ -4070,12 +4228,47 @@ fprintf(stderr, "++ op=%d\n", *Fecode); GETCHARLENTEST(fc, Feptr, len); if ((fc == CHAR_DOLLAR_SIGN || fc == CHAR_COMMERCIAL_AT || fc == CHAR_GRAVE_ACCENT || (fc >= 0xa0 && fc <= 0xd7ff) || - fc >= 0xe000) == (Lctype == OP_NOTPROP)) + fc >= 0xe000) == notmatch) break; Feptr += len; } break; + case PT_BIDICL: + for (i = Lmin; i < Lmax; i++) + { + int len = 1; + if (Feptr >= mb->end_subject) + { + SCHECK_PARTIAL(); + break; + } + GETCHARLENTEST(fc, Feptr, len); + if ((UCD_BIDICLASS(fc) == Lpropvalue) == notmatch) break; + Feptr+= len; + } + break; + + case PT_BOOL: + for (i = Lmin; i < Lmax; i++) + { + BOOL ok; + const ucd_record *prop; + int len = 1; + if (Feptr >= mb->end_subject) + { + SCHECK_PARTIAL(); + break; + } + GETCHARLENTEST(fc, Feptr, len); + prop = GET_UCD(fc); + ok = MAPBIT(PRIV(ucd_boolprop_sets) + + UCD_BPROPS_PROP(prop), Lpropvalue) != 0; + if (ok == notmatch) break; + Feptr+= len; + } + break; + default: return PCRE2_ERROR_INTERNAL; } @@ -6066,7 +6259,7 @@ switch (Freturn_id) LBL(200) LBL(201) LBL(202) LBL(203) LBL(204) LBL(205) LBL(206) LBL(207) LBL(208) LBL(209) LBL(210) LBL(211) LBL(212) LBL(213) LBL(214) LBL(215) LBL(216) LBL(217) LBL(218) LBL(219) LBL(220) - LBL(221) LBL(222) + LBL(221) LBL(222) LBL(223) LBL(224) LBL(225) #endif default: @@ -6129,8 +6322,8 @@ PCRE2_UCHAR req_cu2 = 0; PCRE2_SPTR bumpalong_limit; PCRE2_SPTR end_subject; PCRE2_SPTR true_end_subject; -PCRE2_SPTR start_match = subject + start_offset; -PCRE2_SPTR req_cu_ptr = start_match - 1; +PCRE2_SPTR start_match; +PCRE2_SPTR req_cu_ptr; PCRE2_SPTR start_partial; PCRE2_SPTR match_partial; @@ -6170,9 +6363,18 @@ PCRE2_SPTR stack_frames_vector[START_FRAMES_SIZE/sizeof(PCRE2_SPTR)] PCRE2_KEEP_UNINITIALIZED; mb->stack_frames = (heapframe *)stack_frames_vector; -/* A length equal to PCRE2_ZERO_TERMINATED implies a zero-terminated -subject string. */ +/* Recognize NULL, length 0 as an empty string. */ + +if (subject == NULL && length == 0) subject = (PCRE2_SPTR)""; + +/* Plausibility checks */ + +if ((options & ~PUBLIC_MATCH_OPTIONS) != 0) return PCRE2_ERROR_BADOPTION; +if (code == NULL || subject == NULL || match_data == NULL) + return PCRE2_ERROR_NULL; +start_match = subject + start_offset; +req_cu_ptr = start_match - 1; if (length == PCRE2_ZERO_TERMINATED) { length = PRIV(strlen)(subject); @@ -6180,11 +6382,6 @@ if (length == PCRE2_ZERO_TERMINATED) } true_end_subject = end_subject = subject + length; -/* Plausibility checks */ - -if ((options & ~PUBLIC_MATCH_OPTIONS) != 0) return PCRE2_ERROR_BADOPTION; -if (code == NULL || subject == NULL || match_data == NULL) - return PCRE2_ERROR_NULL; if (start_offset > length) return PCRE2_ERROR_BADOFFSET; /* Check that the first field in the block is the magic number. */ @@ -6482,7 +6679,7 @@ if (utf && /* If the end precedes start_match, it means there is invalid UTF in the extra code units we reversed over because of a lookbehind. Advance past the first bad code unit, and then skip invalid character starting code units in - 8-bit and 16-bit modes, and try again. */ + 8-bit and 16-bit modes, and try again with the original end point. */ if (end_subject < start_match) { @@ -6491,6 +6688,7 @@ if (utf && while (mb->check_subject < start_match && NOT_FIRSTCU(*mb->check_subject)) mb->check_subject++; #endif + end_subject = true_end_subject; } /* Otherwise, set the not end of line option, and do the match. */ @@ -6601,10 +6799,16 @@ the pattern. It is not used at all if there are no capturing parentheses. The last of these is changed within the match() function if the frame vector has to be expanded. We therefore put it into the match block so that it is -correct when calling match() more than once for non-anchored patterns. */ +correct when calling match() more than once for non-anchored patterns. + +We must also pad frame_size for alignment to ensure subsequent frames are as +aligned as heapframe. Whilst ovector is word-aligned due to being a PCRE2_SIZE +array, that does not guarantee it is suitably aligned for pointers, as some +architectures have pointers that are larger than a size_t. */ -frame_size = offsetof(heapframe, ovector) + - re->top_bracket * 2 * sizeof(PCRE2_SIZE); +frame_size = (offsetof(heapframe, ovector) + + re->top_bracket * 2 * sizeof(PCRE2_SIZE) + HEAPFRAME_ALIGNMENT - 1) & + ~(HEAPFRAME_ALIGNMENT - 1); /* Limits set in the pattern override the match context only if they are smaller. */ @@ -6648,7 +6852,7 @@ mb->match_frames_top = to avoid uninitialized memory read errors when it is copied to a new frame. */ memset((char *)(mb->match_frames) + offsetof(heapframe, ovector), 0xff, - re->top_bracket * 2 * sizeof(PCRE2_SIZE)); + frame_size - offsetof(heapframe, ovector)); /* Pointers to the individual character tables */ diff --git a/thirdparty/pcre2/src/pcre2_script_run.c b/thirdparty/pcre2/src/pcre2_script_run.c index 91a4833028..4926fa63bb 100644 --- a/thirdparty/pcre2/src/pcre2_script_run.c +++ b/thirdparty/pcre2/src/pcre2_script_run.c @@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Original API code Copyright (c) 1997-2012 University of Cambridge - New API code Copyright (c) 2016-2018 University of Cambridge + New API code Copyright (c) 2016-2021 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -68,26 +68,26 @@ Arguments: Returns: TRUE if this is a valid script run */ -/* These dummy values must be less than the negation of the largest offset in -the PRIV(ucd_script_sets) vector, which is held in a 16-bit field in UCD -records (and is only likely to be a few hundred). */ +/* These are states in the checking process. */ -#define SCRIPT_UNSET (-99999) -#define SCRIPT_HANPENDING (-99998) -#define SCRIPT_HANHIRAKATA (-99997) -#define SCRIPT_HANBOPOMOFO (-99996) -#define SCRIPT_HANHANGUL (-99995) -#define SCRIPT_LIST (-99994) +enum { SCRIPT_UNSET, /* Requirement as yet unknown */ + SCRIPT_MAP, /* Bitmap contains acceptable scripts */ + SCRIPT_HANPENDING, /* Have had only Han characters */ + SCRIPT_HANHIRAKATA, /* Expect Han or Hirikata */ + SCRIPT_HANBOPOMOFO, /* Expect Han or Bopomofo */ + SCRIPT_HANHANGUL /* Expect Han or Hangul */ + }; -#define INTERSECTION_LIST_SIZE 50 +#define UCD_MAPSIZE (ucp_Unknown/32 + 1) +#define FULL_MAPSIZE (ucp_Script_Count/32 + 1) BOOL PRIV(script_run)(PCRE2_SPTR ptr, PCRE2_SPTR endptr, BOOL utf) { #ifdef SUPPORT_UNICODE -int require_script = SCRIPT_UNSET; -uint8_t intersection_list[INTERSECTION_LIST_SIZE]; -const uint8_t *require_list = NULL; +uint32_t require_state = SCRIPT_UNSET; +uint32_t require_map[FULL_MAPSIZE]; +uint32_t map[FULL_MAPSIZE]; uint32_t require_digitset = 0; uint32_t c; @@ -101,11 +101,17 @@ if (ptr >= endptr) return TRUE; GETCHARINCTEST(c, ptr); if (ptr >= endptr) return TRUE; +/* Initialize the require map. This is a full-size bitmap that has a bit for +every script, as opposed to the maps in ucd_script_sets, which only have bits +for scripts less than ucp_Unknown - those that appear in script extension +lists. */ + +for (int i = 0; i < FULL_MAPSIZE; i++) require_map[i] = 0; + /* Scan strings of two or more characters, checking the Unicode characteristics -of each code point. We make use of the Script Extensions property. There is -special code for scripts that can be combined with characters from the Han -Chinese script. This may be used in conjunction with four other scripts in -these combinations: +of each code point. There is special code for scripts that can be combined with +characters from the Han Chinese script. This may be used in conjunction with +four other scripts in these combinations: . Han with Hiragana and Katakana is allowed (for Japanese). . Han with Bopomofo is allowed (for Taiwanese Mandarin). @@ -119,310 +125,207 @@ Hence the SCRIPT_HANPENDING state. */ for (;;) { const ucd_record *ucd = GET_UCD(c); - int32_t scriptx = ucd->scriptx; + uint32_t script = ucd->script; - /* If the script extension is Unknown, the string is not a valid script run. - Such characters can only form script runs of length one. */ + /* If the script is Unknown, the string is not a valid script run. Such + characters can only form script runs of length one (see test above). */ - if (scriptx == ucp_Unknown) return FALSE; + if (script == ucp_Unknown) return FALSE; - /* A character whose script extension is Inherited is always accepted with - any script, and plays no further part in this testing. A character whose - script is Common is always accepted, but must still be tested for a digit - below. The scriptx value at this point is non-zero, because zero is - ucp_Unknown, tested for above. */ + /* A character without any script extensions whose script is Inherited or + Common is always accepted with any script. If there are extensions, the + following processing happens for all scripts. */ - if (scriptx != ucp_Inherited) + if (UCD_SCRIPTX_PROP(ucd) != 0 || (script != ucp_Inherited && script != ucp_Common)) { - if (scriptx != ucp_Common) + BOOL OK; + + /* Set up a full-sized map for this character that can include bits for all + scripts. Copy the scriptx map for this character (which covers those + scripts that appear in script extension lists), set the remaining values to + zero, and then, except for Common or Inherited, add this script's bit to + the map. */ + + memcpy(map, PRIV(ucd_script_sets) + UCD_SCRIPTX_PROP(ucd), UCD_MAPSIZE * sizeof(uint32_t)); + memset(map + UCD_MAPSIZE, 0, (FULL_MAPSIZE - UCD_MAPSIZE) * sizeof(uint32_t)); + if (script != ucp_Common && script != ucp_Inherited) MAPSET(map, script); + + /* Handle the different checking states */ + + switch(require_state) { - /* If the script extension value is positive, the character is not a mark - that can be used with many scripts. In the simple case we either set or - compare with the required script. However, handling the scripts that can - combine with Han are more complicated, as is the case when the previous - characters have been man-script marks. */ + /* First significant character - it might follow Common or Inherited + characters that do not have any script extensions. */ - if (scriptx > 0) + case SCRIPT_UNSET: + switch(script) { - switch(require_script) - { - /* Either the first significant character (require_script unset) or - after only Han characters. */ - - case SCRIPT_UNSET: - case SCRIPT_HANPENDING: - switch(scriptx) - { - case ucp_Han: - require_script = SCRIPT_HANPENDING; - break; - - case ucp_Hiragana: - case ucp_Katakana: - require_script = SCRIPT_HANHIRAKATA; - break; - - case ucp_Bopomofo: - require_script = SCRIPT_HANBOPOMOFO; - break; - - case ucp_Hangul: - require_script = SCRIPT_HANHANGUL; - break; - - /* Not a Han-related script. If expecting one, fail. Otherise set - the requirement to this script. */ - - default: - if (require_script == SCRIPT_HANPENDING) return FALSE; - require_script = scriptx; - break; - } - break; + case ucp_Han: + require_state = SCRIPT_HANPENDING; + break; + + case ucp_Hiragana: + case ucp_Katakana: + require_state = SCRIPT_HANHIRAKATA; + break; + + case ucp_Bopomofo: + require_state = SCRIPT_HANBOPOMOFO; + break; + + case ucp_Hangul: + require_state = SCRIPT_HANHANGUL; + break; + + default: + memcpy(require_map, map, FULL_MAPSIZE * sizeof(uint32_t)); + require_state = SCRIPT_MAP; + break; + } + break; - /* Previously encountered one of the "with Han" scripts. Check that - this character is appropriate. */ + /* The first significant character was Han. An inspection of the Unicode + 11.0.0 files shows that there are the following types of Script Extension + list that involve the Han, Bopomofo, Hiragana, Katakana, and Hangul + scripts: - case SCRIPT_HANHIRAKATA: - if (scriptx != ucp_Han && scriptx != ucp_Hiragana && - scriptx != ucp_Katakana) - return FALSE; - break; + . Bopomofo + Han + . Han + Hiragana + Katakana + . Hiragana + Katakana + . Bopopmofo + Hangul + Han + Hiragana + Katakana - case SCRIPT_HANBOPOMOFO: - if (scriptx != ucp_Han && scriptx != ucp_Bopomofo) return FALSE; - break; + The following code tries to make sense of this. */ - case SCRIPT_HANHANGUL: - if (scriptx != ucp_Han && scriptx != ucp_Hangul) return FALSE; - break; +#define FOUND_BOPOMOFO 1 +#define FOUND_HIRAGANA 2 +#define FOUND_KATAKANA 4 +#define FOUND_HANGUL 8 - /* We have a list of scripts to check that is derived from one or - more previous characters. This is either one of the lists in - ucd_script_sets[] (for one previous character) or the intersection of - several lists for multiple characters. */ - - case SCRIPT_LIST: - { - const uint8_t *list; - for (list = require_list; *list != 0; list++) - { - if (*list == scriptx) break; - } - if (*list == 0) return FALSE; - } - - /* The rest of the string must be in this script, but we have to - allow for the Han complications. */ - - switch(scriptx) - { - case ucp_Han: - require_script = SCRIPT_HANPENDING; - break; - - case ucp_Hiragana: - case ucp_Katakana: - require_script = SCRIPT_HANHIRAKATA; - break; - - case ucp_Bopomofo: - require_script = SCRIPT_HANBOPOMOFO; - break; - - case ucp_Hangul: - require_script = SCRIPT_HANHANGUL; - break; - - default: - require_script = scriptx; - break; - } - break; + case SCRIPT_HANPENDING: + if (script != ucp_Han) /* Another Han does nothing */ + { + uint32_t chspecial = 0; - /* This is the easy case when a single script is required. */ + if (MAPBIT(map, ucp_Bopomofo) != 0) chspecial |= FOUND_BOPOMOFO; + if (MAPBIT(map, ucp_Hiragana) != 0) chspecial |= FOUND_HIRAGANA; + if (MAPBIT(map, ucp_Katakana) != 0) chspecial |= FOUND_KATAKANA; + if (MAPBIT(map, ucp_Hangul) != 0) chspecial |= FOUND_HANGUL; - default: - if (scriptx != require_script) return FALSE; - break; - } - } /* End of handing positive scriptx */ + if (chspecial == 0) return FALSE; /* Not allowed with Han */ - /* If scriptx is negative, this character is a mark-type character that - has a list of permitted scripts. */ + if (chspecial == FOUND_BOPOMOFO) + require_state = SCRIPT_HANBOPOMOFO; + else if (chspecial == (FOUND_HIRAGANA|FOUND_KATAKANA)) + require_state = SCRIPT_HANHIRAKATA; - else - { - uint32_t chspecial; - const uint8_t *clist, *rlist; - const uint8_t *list = PRIV(ucd_script_sets) - scriptx; - - switch(require_script) - { - case SCRIPT_UNSET: - require_list = PRIV(ucd_script_sets) - scriptx; - require_script = SCRIPT_LIST; - break; + /* Otherwise this character must be allowed with all of them, so remain + in the pending state. */ + } + break; - /* An inspection of the Unicode 11.0.0 files shows that there are the - following types of Script Extension list that involve the Han, - Bopomofo, Hiragana, Katakana, and Hangul scripts: + /* Previously encountered one of the "with Han" scripts. Check that + this character is appropriate. */ - . Bopomofo + Han - . Han + Hiragana + Katakana - . Hiragana + Katakana - . Bopopmofo + Hangul + Han + Hiragana + Katakana + case SCRIPT_HANHIRAKATA: + if (MAPBIT(map, ucp_Han) + MAPBIT(map, ucp_Hiragana) + + MAPBIT(map, ucp_Katakana) == 0) return FALSE; + break; - The following code tries to make sense of this. */ + case SCRIPT_HANBOPOMOFO: + if (MAPBIT(map, ucp_Han) + MAPBIT(map, ucp_Bopomofo) == 0) return FALSE; + break; -#define FOUND_BOPOMOFO 1 -#define FOUND_HIRAGANA 2 -#define FOUND_KATAKANA 4 -#define FOUND_HANGUL 8 + case SCRIPT_HANHANGUL: + if (MAPBIT(map, ucp_Han) + MAPBIT(map, ucp_Hangul) == 0) return FALSE; + break; - case SCRIPT_HANPENDING: - chspecial = 0; - for (; *list != 0; list++) - { - switch (*list) - { - case ucp_Bopomofo: chspecial |= FOUND_BOPOMOFO; break; - case ucp_Hiragana: chspecial |= FOUND_HIRAGANA; break; - case ucp_Katakana: chspecial |= FOUND_KATAKANA; break; - case ucp_Hangul: chspecial |= FOUND_HANGUL; break; - default: break; - } - } - - if (chspecial == 0) return FALSE; - - if (chspecial == FOUND_BOPOMOFO) - { - require_script = SCRIPT_HANBOPOMOFO; - } - else if (chspecial == (FOUND_HIRAGANA|FOUND_KATAKANA)) - { - require_script = SCRIPT_HANHIRAKATA; - } - - /* Otherwise it must be allowed with all of them, so remain in - the pending state. */ + /* Previously encountered one or more characters that are allowed with a + list of scripts. */ - break; + case SCRIPT_MAP: + OK = FALSE; - case SCRIPT_HANHIRAKATA: - for (; *list != 0; list++) - { - if (*list == ucp_Hiragana || *list == ucp_Katakana) break; - } - if (*list == 0) return FALSE; + for (int i = 0; i < FULL_MAPSIZE; i++) + { + if ((require_map[i] & map[i]) != 0) + { + OK = TRUE; break; + } + } - case SCRIPT_HANBOPOMOFO: - for (; *list != 0; list++) - { - if (*list == ucp_Bopomofo) break; - } - if (*list == 0) return FALSE; - break; + if (!OK) return FALSE; - case SCRIPT_HANHANGUL: - for (; *list != 0; list++) - { - if (*list == ucp_Hangul) break; - } - if (*list == 0) return FALSE; - break; + /* The rest of the string must be in this script, but we have to + allow for the Han complications. */ - /* Previously encountered one or more characters that are allowed - with a list of scripts. Build the intersection of the required list - with this character's list in intersection_list[]. This code is - written so that it still works OK if the required list is already in - that vector. */ - - case SCRIPT_LIST: - { - int i = 0; - for (rlist = require_list; *rlist != 0; rlist++) - { - for (clist = list; *clist != 0; clist++) - { - if (*rlist == *clist) - { - intersection_list[i++] = *rlist; - break; - } - } - } - if (i == 0) return FALSE; /* No scripts in common */ - - /* If there's just one script in common, we can set it as the - unique required script. Otherwise, terminate the intersection list - and make it the required list. */ - - if (i == 1) - { - require_script = intersection_list[0]; - } - else - { - intersection_list[i] = 0; - require_list = intersection_list; - } - } - break; + switch(script) + { + case ucp_Han: + require_state = SCRIPT_HANPENDING; + break; - /* The previously set required script is a single script, not - Han-related. Check that it is in this character's list. */ + case ucp_Hiragana: + case ucp_Katakana: + require_state = SCRIPT_HANHIRAKATA; + break; - default: - for (; *list != 0; list++) - { - if (*list == require_script) break; - } - if (*list == 0) return FALSE; - break; - } - } /* End of handling negative scriptx */ - } /* End of checking non-Common character */ - - /* The character is in an acceptable script. We must now ensure that all - decimal digits in the string come from the same set. Some scripts (e.g. - Common, Arabic) have more than one set of decimal digits. This code does - not allow mixing sets, even within the same script. The vector called - PRIV(ucd_digit_sets)[] contains, in its first element, the number of - following elements, and then, in ascending order, the code points of the - '9' characters in every set of 10 digits. Each set is identified by the - offset in the vector of its '9' character. An initial check of the first - value picks up ASCII digits quickly. Otherwise, a binary chop is used. */ - - if (ucd->chartype == ucp_Nd) - { - uint32_t digitset; + case ucp_Bopomofo: + require_state = SCRIPT_HANBOPOMOFO; + break; + + case ucp_Hangul: + require_state = SCRIPT_HANHANGUL; + break; + + /* Compute the intersection of the required list of scripts and the + allowed scripts for this character. */ - if (c <= PRIV(ucd_digit_sets)[1]) digitset = 1; else + default: + for (int i = 0; i < FULL_MAPSIZE; i++) require_map[i] &= map[i]; + break; + } + + break; + } + } /* End checking character's script and extensions. */ + + /* The character is in an acceptable script. We must now ensure that all + decimal digits in the string come from the same set. Some scripts (e.g. + Common, Arabic) have more than one set of decimal digits. This code does + not allow mixing sets, even within the same script. The vector called + PRIV(ucd_digit_sets)[] contains, in its first element, the number of + following elements, and then, in ascending order, the code points of the + '9' characters in every set of 10 digits. Each set is identified by the + offset in the vector of its '9' character. An initial check of the first + value picks up ASCII digits quickly. Otherwise, a binary chop is used. */ + + if (ucd->chartype == ucp_Nd) + { + uint32_t digitset; + + if (c <= PRIV(ucd_digit_sets)[1]) digitset = 1; else + { + int mid; + int bot = 1; + int top = PRIV(ucd_digit_sets)[0]; + for (;;) { - int mid; - int bot = 1; - int top = PRIV(ucd_digit_sets)[0]; - for (;;) + if (top <= bot + 1) /* <= rather than == is paranoia */ { - if (top <= bot + 1) /* <= rather than == is paranoia */ - { - digitset = top; - break; - } - mid = (top + bot) / 2; - if (c <= PRIV(ucd_digit_sets)[mid]) top = mid; else bot = mid; + digitset = top; + break; } + mid = (top + bot) / 2; + if (c <= PRIV(ucd_digit_sets)[mid]) top = mid; else bot = mid; } + } - /* A required value of 0 means "unset". */ + /* A required value of 0 means "unset". */ - if (require_digitset == 0) require_digitset = digitset; - else if (digitset != require_digitset) return FALSE; - } /* End digit handling */ - } /* End checking non-Inherited character */ + if (require_digitset == 0) require_digitset = digitset; + else if (digitset != require_digitset) return FALSE; + } /* End digit handling */ /* If we haven't yet got to the end, pick up the next character. */ diff --git a/thirdparty/pcre2/src/pcre2_string_utils.c b/thirdparty/pcre2/src/pcre2_string_utils.c index d6be01acf5..ebfa9434e3 100644 --- a/thirdparty/pcre2/src/pcre2_string_utils.c +++ b/thirdparty/pcre2/src/pcre2_string_utils.c @@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Original API code Copyright (c) 1997-2012 University of Cambridge - New API code Copyright (c) 2018 University of Cambridge + New API code Copyright (c) 2018-2021 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without diff --git a/thirdparty/pcre2/src/pcre2_study.c b/thirdparty/pcre2/src/pcre2_study.c index 9bbb37570f..4db3ad1184 100644 --- a/thirdparty/pcre2/src/pcre2_study.c +++ b/thirdparty/pcre2/src/pcre2_study.c @@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Original API code Copyright (c) 1997-2012 University of Cambridge - New API code Copyright (c) 2016-2020 University of Cambridge + New API code Copyright (c) 2016-2021 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -908,7 +908,7 @@ set_nottype_bits(pcre2_real_code *re, int cbit_type, unsigned int table_limit) { uint32_t c; for (c = 0; c < table_limit; c++) - re->start_bitmap[c] |= ~(re->tables[c+cbits_offset+cbit_type]); + re->start_bitmap[c] |= (uint8_t)(~(re->tables[c+cbits_offset+cbit_type])); #if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH == 8 if (table_limit != 32) for (c = 24; c < 32; c++) re->start_bitmap[c] = 0xff; #endif diff --git a/thirdparty/pcre2/src/pcre2_substitute.c b/thirdparty/pcre2/src/pcre2_substitute.c index 981a106a9f..8b2c369ccc 100644 --- a/thirdparty/pcre2/src/pcre2_substitute.c +++ b/thirdparty/pcre2/src/pcre2_substitute.c @@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Original API code Copyright (c) 1997-2012 University of Cambridge - New API code Copyright (c) 2016-2020 University of Cambridge + New API code Copyright (c) 2016-2021 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -259,6 +259,18 @@ PCRE2_UNSET, so as not to imply an offset in the replacement. */ if ((options & (PCRE2_PARTIAL_HARD|PCRE2_PARTIAL_SOFT)) != 0) return PCRE2_ERROR_BADOPTION; + +/* Validate length and find the end of the replacement. A NULL replacement of +zero length is interpreted as an empty string. */ + +if (replacement == NULL) + { + if (rlength != 0) return PCRE2_ERROR_NULL; + replacement = (PCRE2_SPTR)""; + } + +if (rlength == PCRE2_ZERO_TERMINATED) rlength = PRIV(strlen)(replacement); +repend = replacement + rlength; /* Check for using a match that has already happened. Note that the subject pointer in the match data may be NULL after a no-match. */ @@ -312,11 +324,18 @@ scb.input = subject; scb.output = (PCRE2_SPTR)buffer; scb.ovector = ovector; -/* Find lengths of zero-terminated strings and the end of the replacement. */ +/* A NULL subject of zero length is treated as an empty string. */ -if (length == PCRE2_ZERO_TERMINATED) length = PRIV(strlen)(subject); -if (rlength == PCRE2_ZERO_TERMINATED) rlength = PRIV(strlen)(replacement); -repend = replacement + rlength; +if (subject == NULL) + { + if (length != 0) return PCRE2_ERROR_NULL; + subject = (PCRE2_SPTR)""; + } + +/* Find length of zero-terminated subject */ + +if (length == PCRE2_ZERO_TERMINATED) + length = subject? PRIV(strlen)(subject) : 0; /* Check UTF replacement string if necessary. */ diff --git a/thirdparty/pcre2/src/pcre2_tables.c b/thirdparty/pcre2/src/pcre2_tables.c index c164e976e0..e00252f1eb 100644 --- a/thirdparty/pcre2/src/pcre2_tables.c +++ b/thirdparty/pcre2/src/pcre2_tables.c @@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Original API code Copyright (c) 1997-2012 University of Cambridge - New API code Copyright (c) 2016-2019 University of Cambridge + New API code Copyright (c) 2016-2021 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -51,10 +51,10 @@ defined. */ #include "pcre2_internal.h" #endif /* PCRE2_PCRE2TEST */ - /* Table of sizes for the fixed-length opcodes. It's defined in a macro so that the definition is next to the definition of the opcodes in pcre2_internal.h. -This is mode-dependent, so is skipped when this file is included by pcre2test. */ +This is mode-dependent, so it is skipped when this file is included by +pcre2test. */ #ifndef PCRE2_PCRE2TEST const uint8_t PRIV(OP_lengths)[] = { OP_LENGTHS }; @@ -119,6 +119,9 @@ const uint8_t PRIV(utf8_table4)[] = { #endif /* UTF-8 support needed */ +/* Tables concerned with Unicode properties are relevant only when Unicode +support is enabled. See also the pcre2_ucptables.c file, which is generated by +a Python script from Unicode data files. */ #ifdef SUPPORT_UNICODE @@ -190,7 +193,7 @@ const uint32_t PRIV(ucp_gbtable)[] = { ESZ|(1u<<ucp_gbPrepend)| /* 4 Prepend */ (1u<<ucp_gbL)|(1u<<ucp_gbV)|(1u<<ucp_gbT)| (1u<<ucp_gbLV)|(1u<<ucp_gbLVT)|(1u<<ucp_gbOther)| - (1u<<ucp_gbRegionalIndicator), + (1u<<ucp_gbRegional_Indicator), ESZ, /* 5 SpacingMark */ ESZ|(1u<<ucp_gbL)|(1u<<ucp_gbV)|(1u<<ucp_gbLV)| /* 6 L */ (1u<<ucp_gbLVT), @@ -198,7 +201,7 @@ const uint32_t PRIV(ucp_gbtable)[] = { ESZ|(1u<<ucp_gbT), /* 8 T */ ESZ|(1u<<ucp_gbV)|(1u<<ucp_gbT), /* 9 LV */ ESZ|(1u<<ucp_gbT), /* 10 LVT */ - (1u<<ucp_gbRegionalIndicator), /* 11 RegionalIndicator */ + (1u<<ucp_gbRegional_Indicator), /* 11 Regional Indicator */ ESZ, /* 12 Other */ ESZ, /* 13 ZWJ */ ESZ|(1u<<ucp_gbExtended_Pictographic) /* 14 Extended Pictographic */ @@ -221,648 +224,10 @@ const int PRIV(ucp_typerange)[] = { }; #endif /* SUPPORT_JIT */ -/* The PRIV(utt)[] table below translates Unicode property names into type and -code values. It is searched by binary chop, so must be in collating sequence of -name. Originally, the table contained pointers to the name strings in the first -field of each entry. However, that leads to a large number of relocations when -a shared library is dynamically loaded. A significant reduction is made by -putting all the names into a single, large string and then using offsets in the -table itself. Maintenance is more error-prone, but frequent changes to this -data are unlikely. - -July 2008: There is now a script called maint/GenerateUtt.py that can be used -to generate this data automatically instead of maintaining it by hand. - -The script was updated in March 2009 to generate a new EBCDIC-compliant -version. Like all other character and string literals that are compared against -the regular expression pattern, we must use STR_ macros instead of literal -strings to make sure that UTF-8 support works on EBCDIC platforms. */ - -#define STRING_Adlam0 STR_A STR_d STR_l STR_a STR_m "\0" -#define STRING_Ahom0 STR_A STR_h STR_o STR_m "\0" -#define STRING_Anatolian_Hieroglyphs0 STR_A STR_n STR_a STR_t STR_o STR_l STR_i STR_a STR_n STR_UNDERSCORE STR_H STR_i STR_e STR_r STR_o STR_g STR_l STR_y STR_p STR_h STR_s "\0" -#define STRING_Any0 STR_A STR_n STR_y "\0" -#define STRING_Arabic0 STR_A STR_r STR_a STR_b STR_i STR_c "\0" -#define STRING_Armenian0 STR_A STR_r STR_m STR_e STR_n STR_i STR_a STR_n "\0" -#define STRING_Avestan0 STR_A STR_v STR_e STR_s STR_t STR_a STR_n "\0" -#define STRING_Balinese0 STR_B STR_a STR_l STR_i STR_n STR_e STR_s STR_e "\0" -#define STRING_Bamum0 STR_B STR_a STR_m STR_u STR_m "\0" -#define STRING_Bassa_Vah0 STR_B STR_a STR_s STR_s STR_a STR_UNDERSCORE STR_V STR_a STR_h "\0" -#define STRING_Batak0 STR_B STR_a STR_t STR_a STR_k "\0" -#define STRING_Bengali0 STR_B STR_e STR_n STR_g STR_a STR_l STR_i "\0" -#define STRING_Bhaiksuki0 STR_B STR_h STR_a STR_i STR_k STR_s STR_u STR_k STR_i "\0" -#define STRING_Bopomofo0 STR_B STR_o STR_p STR_o STR_m STR_o STR_f STR_o "\0" -#define STRING_Brahmi0 STR_B STR_r STR_a STR_h STR_m STR_i "\0" -#define STRING_Braille0 STR_B STR_r STR_a STR_i STR_l STR_l STR_e "\0" -#define STRING_Buginese0 STR_B STR_u STR_g STR_i STR_n STR_e STR_s STR_e "\0" -#define STRING_Buhid0 STR_B STR_u STR_h STR_i STR_d "\0" -#define STRING_C0 STR_C "\0" -#define STRING_Canadian_Aboriginal0 STR_C STR_a STR_n STR_a STR_d STR_i STR_a STR_n STR_UNDERSCORE STR_A STR_b STR_o STR_r STR_i STR_g STR_i STR_n STR_a STR_l "\0" -#define STRING_Carian0 STR_C STR_a STR_r STR_i STR_a STR_n "\0" -#define STRING_Caucasian_Albanian0 STR_C STR_a STR_u STR_c STR_a STR_s STR_i STR_a STR_n STR_UNDERSCORE STR_A STR_l STR_b STR_a STR_n STR_i STR_a STR_n "\0" -#define STRING_Cc0 STR_C STR_c "\0" -#define STRING_Cf0 STR_C STR_f "\0" -#define STRING_Chakma0 STR_C STR_h STR_a STR_k STR_m STR_a "\0" -#define STRING_Cham0 STR_C STR_h STR_a STR_m "\0" -#define STRING_Cherokee0 STR_C STR_h STR_e STR_r STR_o STR_k STR_e STR_e "\0" -#define STRING_Chorasmian0 STR_C STR_h STR_o STR_r STR_a STR_s STR_m STR_i STR_a STR_n "\0" -#define STRING_Cn0 STR_C STR_n "\0" -#define STRING_Co0 STR_C STR_o "\0" -#define STRING_Common0 STR_C STR_o STR_m STR_m STR_o STR_n "\0" -#define STRING_Coptic0 STR_C STR_o STR_p STR_t STR_i STR_c "\0" -#define STRING_Cs0 STR_C STR_s "\0" -#define STRING_Cuneiform0 STR_C STR_u STR_n STR_e STR_i STR_f STR_o STR_r STR_m "\0" -#define STRING_Cypriot0 STR_C STR_y STR_p STR_r STR_i STR_o STR_t "\0" -#define STRING_Cypro_Minoan0 STR_C STR_y STR_p STR_r STR_o STR_UNDERSCORE STR_M STR_i STR_n STR_o STR_a STR_n "\0" -#define STRING_Cyrillic0 STR_C STR_y STR_r STR_i STR_l STR_l STR_i STR_c "\0" -#define STRING_Deseret0 STR_D STR_e STR_s STR_e STR_r STR_e STR_t "\0" -#define STRING_Devanagari0 STR_D STR_e STR_v STR_a STR_n STR_a STR_g STR_a STR_r STR_i "\0" -#define STRING_Dives_Akuru0 STR_D STR_i STR_v STR_e STR_s STR_UNDERSCORE STR_A STR_k STR_u STR_r STR_u "\0" -#define STRING_Dogra0 STR_D STR_o STR_g STR_r STR_a "\0" -#define STRING_Duployan0 STR_D STR_u STR_p STR_l STR_o STR_y STR_a STR_n "\0" -#define STRING_Egyptian_Hieroglyphs0 STR_E STR_g STR_y STR_p STR_t STR_i STR_a STR_n STR_UNDERSCORE STR_H STR_i STR_e STR_r STR_o STR_g STR_l STR_y STR_p STR_h STR_s "\0" -#define STRING_Elbasan0 STR_E STR_l STR_b STR_a STR_s STR_a STR_n "\0" -#define STRING_Elymaic0 STR_E STR_l STR_y STR_m STR_a STR_i STR_c "\0" -#define STRING_Ethiopic0 STR_E STR_t STR_h STR_i STR_o STR_p STR_i STR_c "\0" -#define STRING_Georgian0 STR_G STR_e STR_o STR_r STR_g STR_i STR_a STR_n "\0" -#define STRING_Glagolitic0 STR_G STR_l STR_a STR_g STR_o STR_l STR_i STR_t STR_i STR_c "\0" -#define STRING_Gothic0 STR_G STR_o STR_t STR_h STR_i STR_c "\0" -#define STRING_Grantha0 STR_G STR_r STR_a STR_n STR_t STR_h STR_a "\0" -#define STRING_Greek0 STR_G STR_r STR_e STR_e STR_k "\0" -#define STRING_Gujarati0 STR_G STR_u STR_j STR_a STR_r STR_a STR_t STR_i "\0" -#define STRING_Gunjala_Gondi0 STR_G STR_u STR_n STR_j STR_a STR_l STR_a STR_UNDERSCORE STR_G STR_o STR_n STR_d STR_i "\0" -#define STRING_Gurmukhi0 STR_G STR_u STR_r STR_m STR_u STR_k STR_h STR_i "\0" -#define STRING_Han0 STR_H STR_a STR_n "\0" -#define STRING_Hangul0 STR_H STR_a STR_n STR_g STR_u STR_l "\0" -#define STRING_Hanifi_Rohingya0 STR_H STR_a STR_n STR_i STR_f STR_i STR_UNDERSCORE STR_R STR_o STR_h STR_i STR_n STR_g STR_y STR_a "\0" -#define STRING_Hanunoo0 STR_H STR_a STR_n STR_u STR_n STR_o STR_o "\0" -#define STRING_Hatran0 STR_H STR_a STR_t STR_r STR_a STR_n "\0" -#define STRING_Hebrew0 STR_H STR_e STR_b STR_r STR_e STR_w "\0" -#define STRING_Hiragana0 STR_H STR_i STR_r STR_a STR_g STR_a STR_n STR_a "\0" -#define STRING_Imperial_Aramaic0 STR_I STR_m STR_p STR_e STR_r STR_i STR_a STR_l STR_UNDERSCORE STR_A STR_r STR_a STR_m STR_a STR_i STR_c "\0" -#define STRING_Inherited0 STR_I STR_n STR_h STR_e STR_r STR_i STR_t STR_e STR_d "\0" -#define STRING_Inscriptional_Pahlavi0 STR_I STR_n STR_s STR_c STR_r STR_i STR_p STR_t STR_i STR_o STR_n STR_a STR_l STR_UNDERSCORE STR_P STR_a STR_h STR_l STR_a STR_v STR_i "\0" -#define STRING_Inscriptional_Parthian0 STR_I STR_n STR_s STR_c STR_r STR_i STR_p STR_t STR_i STR_o STR_n STR_a STR_l STR_UNDERSCORE STR_P STR_a STR_r STR_t STR_h STR_i STR_a STR_n "\0" -#define STRING_Javanese0 STR_J STR_a STR_v STR_a STR_n STR_e STR_s STR_e "\0" -#define STRING_Kaithi0 STR_K STR_a STR_i STR_t STR_h STR_i "\0" -#define STRING_Kannada0 STR_K STR_a STR_n STR_n STR_a STR_d STR_a "\0" -#define STRING_Katakana0 STR_K STR_a STR_t STR_a STR_k STR_a STR_n STR_a "\0" -#define STRING_Kayah_Li0 STR_K STR_a STR_y STR_a STR_h STR_UNDERSCORE STR_L STR_i "\0" -#define STRING_Kharoshthi0 STR_K STR_h STR_a STR_r STR_o STR_s STR_h STR_t STR_h STR_i "\0" -#define STRING_Khitan_Small_Script0 STR_K STR_h STR_i STR_t STR_a STR_n STR_UNDERSCORE STR_S STR_m STR_a STR_l STR_l STR_UNDERSCORE STR_S STR_c STR_r STR_i STR_p STR_t "\0" -#define STRING_Khmer0 STR_K STR_h STR_m STR_e STR_r "\0" -#define STRING_Khojki0 STR_K STR_h STR_o STR_j STR_k STR_i "\0" -#define STRING_Khudawadi0 STR_K STR_h STR_u STR_d STR_a STR_w STR_a STR_d STR_i "\0" -#define STRING_L0 STR_L "\0" -#define STRING_L_AMPERSAND0 STR_L STR_AMPERSAND "\0" -#define STRING_Lao0 STR_L STR_a STR_o "\0" -#define STRING_Latin0 STR_L STR_a STR_t STR_i STR_n "\0" -#define STRING_Lepcha0 STR_L STR_e STR_p STR_c STR_h STR_a "\0" -#define STRING_Limbu0 STR_L STR_i STR_m STR_b STR_u "\0" -#define STRING_Linear_A0 STR_L STR_i STR_n STR_e STR_a STR_r STR_UNDERSCORE STR_A "\0" -#define STRING_Linear_B0 STR_L STR_i STR_n STR_e STR_a STR_r STR_UNDERSCORE STR_B "\0" -#define STRING_Lisu0 STR_L STR_i STR_s STR_u "\0" -#define STRING_Ll0 STR_L STR_l "\0" -#define STRING_Lm0 STR_L STR_m "\0" -#define STRING_Lo0 STR_L STR_o "\0" -#define STRING_Lt0 STR_L STR_t "\0" -#define STRING_Lu0 STR_L STR_u "\0" -#define STRING_Lycian0 STR_L STR_y STR_c STR_i STR_a STR_n "\0" -#define STRING_Lydian0 STR_L STR_y STR_d STR_i STR_a STR_n "\0" -#define STRING_M0 STR_M "\0" -#define STRING_Mahajani0 STR_M STR_a STR_h STR_a STR_j STR_a STR_n STR_i "\0" -#define STRING_Makasar0 STR_M STR_a STR_k STR_a STR_s STR_a STR_r "\0" -#define STRING_Malayalam0 STR_M STR_a STR_l STR_a STR_y STR_a STR_l STR_a STR_m "\0" -#define STRING_Mandaic0 STR_M STR_a STR_n STR_d STR_a STR_i STR_c "\0" -#define STRING_Manichaean0 STR_M STR_a STR_n STR_i STR_c STR_h STR_a STR_e STR_a STR_n "\0" -#define STRING_Marchen0 STR_M STR_a STR_r STR_c STR_h STR_e STR_n "\0" -#define STRING_Masaram_Gondi0 STR_M STR_a STR_s STR_a STR_r STR_a STR_m STR_UNDERSCORE STR_G STR_o STR_n STR_d STR_i "\0" -#define STRING_Mc0 STR_M STR_c "\0" -#define STRING_Me0 STR_M STR_e "\0" -#define STRING_Medefaidrin0 STR_M STR_e STR_d STR_e STR_f STR_a STR_i STR_d STR_r STR_i STR_n "\0" -#define STRING_Meetei_Mayek0 STR_M STR_e STR_e STR_t STR_e STR_i STR_UNDERSCORE STR_M STR_a STR_y STR_e STR_k "\0" -#define STRING_Mende_Kikakui0 STR_M STR_e STR_n STR_d STR_e STR_UNDERSCORE STR_K STR_i STR_k STR_a STR_k STR_u STR_i "\0" -#define STRING_Meroitic_Cursive0 STR_M STR_e STR_r STR_o STR_i STR_t STR_i STR_c STR_UNDERSCORE STR_C STR_u STR_r STR_s STR_i STR_v STR_e "\0" -#define STRING_Meroitic_Hieroglyphs0 STR_M STR_e STR_r STR_o STR_i STR_t STR_i STR_c STR_UNDERSCORE STR_H STR_i STR_e STR_r STR_o STR_g STR_l STR_y STR_p STR_h STR_s "\0" -#define STRING_Miao0 STR_M STR_i STR_a STR_o "\0" -#define STRING_Mn0 STR_M STR_n "\0" -#define STRING_Modi0 STR_M STR_o STR_d STR_i "\0" -#define STRING_Mongolian0 STR_M STR_o STR_n STR_g STR_o STR_l STR_i STR_a STR_n "\0" -#define STRING_Mro0 STR_M STR_r STR_o "\0" -#define STRING_Multani0 STR_M STR_u STR_l STR_t STR_a STR_n STR_i "\0" -#define STRING_Myanmar0 STR_M STR_y STR_a STR_n STR_m STR_a STR_r "\0" -#define STRING_N0 STR_N "\0" -#define STRING_Nabataean0 STR_N STR_a STR_b STR_a STR_t STR_a STR_e STR_a STR_n "\0" -#define STRING_Nandinagari0 STR_N STR_a STR_n STR_d STR_i STR_n STR_a STR_g STR_a STR_r STR_i "\0" -#define STRING_Nd0 STR_N STR_d "\0" -#define STRING_New_Tai_Lue0 STR_N STR_e STR_w STR_UNDERSCORE STR_T STR_a STR_i STR_UNDERSCORE STR_L STR_u STR_e "\0" -#define STRING_Newa0 STR_N STR_e STR_w STR_a "\0" -#define STRING_Nko0 STR_N STR_k STR_o "\0" -#define STRING_Nl0 STR_N STR_l "\0" -#define STRING_No0 STR_N STR_o "\0" -#define STRING_Nushu0 STR_N STR_u STR_s STR_h STR_u "\0" -#define STRING_Nyiakeng_Puachue_Hmong0 STR_N STR_y STR_i STR_a STR_k STR_e STR_n STR_g STR_UNDERSCORE STR_P STR_u STR_a STR_c STR_h STR_u STR_e STR_UNDERSCORE STR_H STR_m STR_o STR_n STR_g "\0" -#define STRING_Ogham0 STR_O STR_g STR_h STR_a STR_m "\0" -#define STRING_Ol_Chiki0 STR_O STR_l STR_UNDERSCORE STR_C STR_h STR_i STR_k STR_i "\0" -#define STRING_Old_Hungarian0 STR_O STR_l STR_d STR_UNDERSCORE STR_H STR_u STR_n STR_g STR_a STR_r STR_i STR_a STR_n "\0" -#define STRING_Old_Italic0 STR_O STR_l STR_d STR_UNDERSCORE STR_I STR_t STR_a STR_l STR_i STR_c "\0" -#define STRING_Old_North_Arabian0 STR_O STR_l STR_d STR_UNDERSCORE STR_N STR_o STR_r STR_t STR_h STR_UNDERSCORE STR_A STR_r STR_a STR_b STR_i STR_a STR_n "\0" -#define STRING_Old_Permic0 STR_O STR_l STR_d STR_UNDERSCORE STR_P STR_e STR_r STR_m STR_i STR_c "\0" -#define STRING_Old_Persian0 STR_O STR_l STR_d STR_UNDERSCORE STR_P STR_e STR_r STR_s STR_i STR_a STR_n "\0" -#define STRING_Old_Sogdian0 STR_O STR_l STR_d STR_UNDERSCORE STR_S STR_o STR_g STR_d STR_i STR_a STR_n "\0" -#define STRING_Old_South_Arabian0 STR_O STR_l STR_d STR_UNDERSCORE STR_S STR_o STR_u STR_t STR_h STR_UNDERSCORE STR_A STR_r STR_a STR_b STR_i STR_a STR_n "\0" -#define STRING_Old_Turkic0 STR_O STR_l STR_d STR_UNDERSCORE STR_T STR_u STR_r STR_k STR_i STR_c "\0" -#define STRING_Old_Uyghur0 STR_O STR_l STR_d STR_UNDERSCORE STR_U STR_y STR_g STR_h STR_u STR_r "\0" -#define STRING_Oriya0 STR_O STR_r STR_i STR_y STR_a "\0" -#define STRING_Osage0 STR_O STR_s STR_a STR_g STR_e "\0" -#define STRING_Osmanya0 STR_O STR_s STR_m STR_a STR_n STR_y STR_a "\0" -#define STRING_P0 STR_P "\0" -#define STRING_Pahawh_Hmong0 STR_P STR_a STR_h STR_a STR_w STR_h STR_UNDERSCORE STR_H STR_m STR_o STR_n STR_g "\0" -#define STRING_Palmyrene0 STR_P STR_a STR_l STR_m STR_y STR_r STR_e STR_n STR_e "\0" -#define STRING_Pau_Cin_Hau0 STR_P STR_a STR_u STR_UNDERSCORE STR_C STR_i STR_n STR_UNDERSCORE STR_H STR_a STR_u "\0" -#define STRING_Pc0 STR_P STR_c "\0" -#define STRING_Pd0 STR_P STR_d "\0" -#define STRING_Pe0 STR_P STR_e "\0" -#define STRING_Pf0 STR_P STR_f "\0" -#define STRING_Phags_Pa0 STR_P STR_h STR_a STR_g STR_s STR_UNDERSCORE STR_P STR_a "\0" -#define STRING_Phoenician0 STR_P STR_h STR_o STR_e STR_n STR_i STR_c STR_i STR_a STR_n "\0" -#define STRING_Pi0 STR_P STR_i "\0" -#define STRING_Po0 STR_P STR_o "\0" -#define STRING_Ps0 STR_P STR_s "\0" -#define STRING_Psalter_Pahlavi0 STR_P STR_s STR_a STR_l STR_t STR_e STR_r STR_UNDERSCORE STR_P STR_a STR_h STR_l STR_a STR_v STR_i "\0" -#define STRING_Rejang0 STR_R STR_e STR_j STR_a STR_n STR_g "\0" -#define STRING_Runic0 STR_R STR_u STR_n STR_i STR_c "\0" -#define STRING_S0 STR_S "\0" -#define STRING_Samaritan0 STR_S STR_a STR_m STR_a STR_r STR_i STR_t STR_a STR_n "\0" -#define STRING_Saurashtra0 STR_S STR_a STR_u STR_r STR_a STR_s STR_h STR_t STR_r STR_a "\0" -#define STRING_Sc0 STR_S STR_c "\0" -#define STRING_Sharada0 STR_S STR_h STR_a STR_r STR_a STR_d STR_a "\0" -#define STRING_Shavian0 STR_S STR_h STR_a STR_v STR_i STR_a STR_n "\0" -#define STRING_Siddham0 STR_S STR_i STR_d STR_d STR_h STR_a STR_m "\0" -#define STRING_SignWriting0 STR_S STR_i STR_g STR_n STR_W STR_r STR_i STR_t STR_i STR_n STR_g "\0" -#define STRING_Sinhala0 STR_S STR_i STR_n STR_h STR_a STR_l STR_a "\0" -#define STRING_Sk0 STR_S STR_k "\0" -#define STRING_Sm0 STR_S STR_m "\0" -#define STRING_So0 STR_S STR_o "\0" -#define STRING_Sogdian0 STR_S STR_o STR_g STR_d STR_i STR_a STR_n "\0" -#define STRING_Sora_Sompeng0 STR_S STR_o STR_r STR_a STR_UNDERSCORE STR_S STR_o STR_m STR_p STR_e STR_n STR_g "\0" -#define STRING_Soyombo0 STR_S STR_o STR_y STR_o STR_m STR_b STR_o "\0" -#define STRING_Sundanese0 STR_S STR_u STR_n STR_d STR_a STR_n STR_e STR_s STR_e "\0" -#define STRING_Syloti_Nagri0 STR_S STR_y STR_l STR_o STR_t STR_i STR_UNDERSCORE STR_N STR_a STR_g STR_r STR_i "\0" -#define STRING_Syriac0 STR_S STR_y STR_r STR_i STR_a STR_c "\0" -#define STRING_Tagalog0 STR_T STR_a STR_g STR_a STR_l STR_o STR_g "\0" -#define STRING_Tagbanwa0 STR_T STR_a STR_g STR_b STR_a STR_n STR_w STR_a "\0" -#define STRING_Tai_Le0 STR_T STR_a STR_i STR_UNDERSCORE STR_L STR_e "\0" -#define STRING_Tai_Tham0 STR_T STR_a STR_i STR_UNDERSCORE STR_T STR_h STR_a STR_m "\0" -#define STRING_Tai_Viet0 STR_T STR_a STR_i STR_UNDERSCORE STR_V STR_i STR_e STR_t "\0" -#define STRING_Takri0 STR_T STR_a STR_k STR_r STR_i "\0" -#define STRING_Tamil0 STR_T STR_a STR_m STR_i STR_l "\0" -#define STRING_Tangsa0 STR_T STR_a STR_n STR_g STR_s STR_a "\0" -#define STRING_Tangut0 STR_T STR_a STR_n STR_g STR_u STR_t "\0" -#define STRING_Telugu0 STR_T STR_e STR_l STR_u STR_g STR_u "\0" -#define STRING_Thaana0 STR_T STR_h STR_a STR_a STR_n STR_a "\0" -#define STRING_Thai0 STR_T STR_h STR_a STR_i "\0" -#define STRING_Tibetan0 STR_T STR_i STR_b STR_e STR_t STR_a STR_n "\0" -#define STRING_Tifinagh0 STR_T STR_i STR_f STR_i STR_n STR_a STR_g STR_h "\0" -#define STRING_Tirhuta0 STR_T STR_i STR_r STR_h STR_u STR_t STR_a "\0" -#define STRING_Toto0 STR_T STR_o STR_t STR_o "\0" -#define STRING_Ugaritic0 STR_U STR_g STR_a STR_r STR_i STR_t STR_i STR_c "\0" -#define STRING_Unknown0 STR_U STR_n STR_k STR_n STR_o STR_w STR_n "\0" -#define STRING_Vai0 STR_V STR_a STR_i "\0" -#define STRING_Vithkuqi0 STR_V STR_i STR_t STR_h STR_k STR_u STR_q STR_i "\0" -#define STRING_Wancho0 STR_W STR_a STR_n STR_c STR_h STR_o "\0" -#define STRING_Warang_Citi0 STR_W STR_a STR_r STR_a STR_n STR_g STR_UNDERSCORE STR_C STR_i STR_t STR_i "\0" -#define STRING_Xan0 STR_X STR_a STR_n "\0" -#define STRING_Xps0 STR_X STR_p STR_s "\0" -#define STRING_Xsp0 STR_X STR_s STR_p "\0" -#define STRING_Xuc0 STR_X STR_u STR_c "\0" -#define STRING_Xwd0 STR_X STR_w STR_d "\0" -#define STRING_Yezidi0 STR_Y STR_e STR_z STR_i STR_d STR_i "\0" -#define STRING_Yi0 STR_Y STR_i "\0" -#define STRING_Z0 STR_Z "\0" -#define STRING_Zanabazar_Square0 STR_Z STR_a STR_n STR_a STR_b STR_a STR_z STR_a STR_r STR_UNDERSCORE STR_S STR_q STR_u STR_a STR_r STR_e "\0" -#define STRING_Zl0 STR_Z STR_l "\0" -#define STRING_Zp0 STR_Z STR_p "\0" -#define STRING_Zs0 STR_Z STR_s "\0" - -const char PRIV(utt_names)[] = - STRING_Adlam0 - STRING_Ahom0 - STRING_Anatolian_Hieroglyphs0 - STRING_Any0 - STRING_Arabic0 - STRING_Armenian0 - STRING_Avestan0 - STRING_Balinese0 - STRING_Bamum0 - STRING_Bassa_Vah0 - STRING_Batak0 - STRING_Bengali0 - STRING_Bhaiksuki0 - STRING_Bopomofo0 - STRING_Brahmi0 - STRING_Braille0 - STRING_Buginese0 - STRING_Buhid0 - STRING_C0 - STRING_Canadian_Aboriginal0 - STRING_Carian0 - STRING_Caucasian_Albanian0 - STRING_Cc0 - STRING_Cf0 - STRING_Chakma0 - STRING_Cham0 - STRING_Cherokee0 - STRING_Chorasmian0 - STRING_Cn0 - STRING_Co0 - STRING_Common0 - STRING_Coptic0 - STRING_Cs0 - STRING_Cuneiform0 - STRING_Cypriot0 - STRING_Cypro_Minoan0 - STRING_Cyrillic0 - STRING_Deseret0 - STRING_Devanagari0 - STRING_Dives_Akuru0 - STRING_Dogra0 - STRING_Duployan0 - STRING_Egyptian_Hieroglyphs0 - STRING_Elbasan0 - STRING_Elymaic0 - STRING_Ethiopic0 - STRING_Georgian0 - STRING_Glagolitic0 - STRING_Gothic0 - STRING_Grantha0 - STRING_Greek0 - STRING_Gujarati0 - STRING_Gunjala_Gondi0 - STRING_Gurmukhi0 - STRING_Han0 - STRING_Hangul0 - STRING_Hanifi_Rohingya0 - STRING_Hanunoo0 - STRING_Hatran0 - STRING_Hebrew0 - STRING_Hiragana0 - STRING_Imperial_Aramaic0 - STRING_Inherited0 - STRING_Inscriptional_Pahlavi0 - STRING_Inscriptional_Parthian0 - STRING_Javanese0 - STRING_Kaithi0 - STRING_Kannada0 - STRING_Katakana0 - STRING_Kayah_Li0 - STRING_Kharoshthi0 - STRING_Khitan_Small_Script0 - STRING_Khmer0 - STRING_Khojki0 - STRING_Khudawadi0 - STRING_L0 - STRING_L_AMPERSAND0 - STRING_Lao0 - STRING_Latin0 - STRING_Lepcha0 - STRING_Limbu0 - STRING_Linear_A0 - STRING_Linear_B0 - STRING_Lisu0 - STRING_Ll0 - STRING_Lm0 - STRING_Lo0 - STRING_Lt0 - STRING_Lu0 - STRING_Lycian0 - STRING_Lydian0 - STRING_M0 - STRING_Mahajani0 - STRING_Makasar0 - STRING_Malayalam0 - STRING_Mandaic0 - STRING_Manichaean0 - STRING_Marchen0 - STRING_Masaram_Gondi0 - STRING_Mc0 - STRING_Me0 - STRING_Medefaidrin0 - STRING_Meetei_Mayek0 - STRING_Mende_Kikakui0 - STRING_Meroitic_Cursive0 - STRING_Meroitic_Hieroglyphs0 - STRING_Miao0 - STRING_Mn0 - STRING_Modi0 - STRING_Mongolian0 - STRING_Mro0 - STRING_Multani0 - STRING_Myanmar0 - STRING_N0 - STRING_Nabataean0 - STRING_Nandinagari0 - STRING_Nd0 - STRING_New_Tai_Lue0 - STRING_Newa0 - STRING_Nko0 - STRING_Nl0 - STRING_No0 - STRING_Nushu0 - STRING_Nyiakeng_Puachue_Hmong0 - STRING_Ogham0 - STRING_Ol_Chiki0 - STRING_Old_Hungarian0 - STRING_Old_Italic0 - STRING_Old_North_Arabian0 - STRING_Old_Permic0 - STRING_Old_Persian0 - STRING_Old_Sogdian0 - STRING_Old_South_Arabian0 - STRING_Old_Turkic0 - STRING_Old_Uyghur0 - STRING_Oriya0 - STRING_Osage0 - STRING_Osmanya0 - STRING_P0 - STRING_Pahawh_Hmong0 - STRING_Palmyrene0 - STRING_Pau_Cin_Hau0 - STRING_Pc0 - STRING_Pd0 - STRING_Pe0 - STRING_Pf0 - STRING_Phags_Pa0 - STRING_Phoenician0 - STRING_Pi0 - STRING_Po0 - STRING_Ps0 - STRING_Psalter_Pahlavi0 - STRING_Rejang0 - STRING_Runic0 - STRING_S0 - STRING_Samaritan0 - STRING_Saurashtra0 - STRING_Sc0 - STRING_Sharada0 - STRING_Shavian0 - STRING_Siddham0 - STRING_SignWriting0 - STRING_Sinhala0 - STRING_Sk0 - STRING_Sm0 - STRING_So0 - STRING_Sogdian0 - STRING_Sora_Sompeng0 - STRING_Soyombo0 - STRING_Sundanese0 - STRING_Syloti_Nagri0 - STRING_Syriac0 - STRING_Tagalog0 - STRING_Tagbanwa0 - STRING_Tai_Le0 - STRING_Tai_Tham0 - STRING_Tai_Viet0 - STRING_Takri0 - STRING_Tamil0 - STRING_Tangsa0 - STRING_Tangut0 - STRING_Telugu0 - STRING_Thaana0 - STRING_Thai0 - STRING_Tibetan0 - STRING_Tifinagh0 - STRING_Tirhuta0 - STRING_Toto0 - STRING_Ugaritic0 - STRING_Unknown0 - STRING_Vai0 - STRING_Vithkuqi0 - STRING_Wancho0 - STRING_Warang_Citi0 - STRING_Xan0 - STRING_Xps0 - STRING_Xsp0 - STRING_Xuc0 - STRING_Xwd0 - STRING_Yezidi0 - STRING_Yi0 - STRING_Z0 - STRING_Zanabazar_Square0 - STRING_Zl0 - STRING_Zp0 - STRING_Zs0; - -const ucp_type_table PRIV(utt)[] = { - { 0, PT_SC, ucp_Adlam }, - { 6, PT_SC, ucp_Ahom }, - { 11, PT_SC, ucp_Anatolian_Hieroglyphs }, - { 33, PT_ANY, 0 }, - { 37, PT_SC, ucp_Arabic }, - { 44, PT_SC, ucp_Armenian }, - { 53, PT_SC, ucp_Avestan }, - { 61, PT_SC, ucp_Balinese }, - { 70, PT_SC, ucp_Bamum }, - { 76, PT_SC, ucp_Bassa_Vah }, - { 86, PT_SC, ucp_Batak }, - { 92, PT_SC, ucp_Bengali }, - { 100, PT_SC, ucp_Bhaiksuki }, - { 110, PT_SC, ucp_Bopomofo }, - { 119, PT_SC, ucp_Brahmi }, - { 126, PT_SC, ucp_Braille }, - { 134, PT_SC, ucp_Buginese }, - { 143, PT_SC, ucp_Buhid }, - { 149, PT_GC, ucp_C }, - { 151, PT_SC, ucp_Canadian_Aboriginal }, - { 171, PT_SC, ucp_Carian }, - { 178, PT_SC, ucp_Caucasian_Albanian }, - { 197, PT_PC, ucp_Cc }, - { 200, PT_PC, ucp_Cf }, - { 203, PT_SC, ucp_Chakma }, - { 210, PT_SC, ucp_Cham }, - { 215, PT_SC, ucp_Cherokee }, - { 224, PT_SC, ucp_Chorasmian }, - { 235, PT_PC, ucp_Cn }, - { 238, PT_PC, ucp_Co }, - { 241, PT_SC, ucp_Common }, - { 248, PT_SC, ucp_Coptic }, - { 255, PT_PC, ucp_Cs }, - { 258, PT_SC, ucp_Cuneiform }, - { 268, PT_SC, ucp_Cypriot }, - { 276, PT_SC, ucp_Cypro_Minoan }, - { 289, PT_SC, ucp_Cyrillic }, - { 298, PT_SC, ucp_Deseret }, - { 306, PT_SC, ucp_Devanagari }, - { 317, PT_SC, ucp_Dives_Akuru }, - { 329, PT_SC, ucp_Dogra }, - { 335, PT_SC, ucp_Duployan }, - { 344, PT_SC, ucp_Egyptian_Hieroglyphs }, - { 365, PT_SC, ucp_Elbasan }, - { 373, PT_SC, ucp_Elymaic }, - { 381, PT_SC, ucp_Ethiopic }, - { 390, PT_SC, ucp_Georgian }, - { 399, PT_SC, ucp_Glagolitic }, - { 410, PT_SC, ucp_Gothic }, - { 417, PT_SC, ucp_Grantha }, - { 425, PT_SC, ucp_Greek }, - { 431, PT_SC, ucp_Gujarati }, - { 440, PT_SC, ucp_Gunjala_Gondi }, - { 454, PT_SC, ucp_Gurmukhi }, - { 463, PT_SC, ucp_Han }, - { 467, PT_SC, ucp_Hangul }, - { 474, PT_SC, ucp_Hanifi_Rohingya }, - { 490, PT_SC, ucp_Hanunoo }, - { 498, PT_SC, ucp_Hatran }, - { 505, PT_SC, ucp_Hebrew }, - { 512, PT_SC, ucp_Hiragana }, - { 521, PT_SC, ucp_Imperial_Aramaic }, - { 538, PT_SC, ucp_Inherited }, - { 548, PT_SC, ucp_Inscriptional_Pahlavi }, - { 570, PT_SC, ucp_Inscriptional_Parthian }, - { 593, PT_SC, ucp_Javanese }, - { 602, PT_SC, ucp_Kaithi }, - { 609, PT_SC, ucp_Kannada }, - { 617, PT_SC, ucp_Katakana }, - { 626, PT_SC, ucp_Kayah_Li }, - { 635, PT_SC, ucp_Kharoshthi }, - { 646, PT_SC, ucp_Khitan_Small_Script }, - { 666, PT_SC, ucp_Khmer }, - { 672, PT_SC, ucp_Khojki }, - { 679, PT_SC, ucp_Khudawadi }, - { 689, PT_GC, ucp_L }, - { 691, PT_LAMP, 0 }, - { 694, PT_SC, ucp_Lao }, - { 698, PT_SC, ucp_Latin }, - { 704, PT_SC, ucp_Lepcha }, - { 711, PT_SC, ucp_Limbu }, - { 717, PT_SC, ucp_Linear_A }, - { 726, PT_SC, ucp_Linear_B }, - { 735, PT_SC, ucp_Lisu }, - { 740, PT_PC, ucp_Ll }, - { 743, PT_PC, ucp_Lm }, - { 746, PT_PC, ucp_Lo }, - { 749, PT_PC, ucp_Lt }, - { 752, PT_PC, ucp_Lu }, - { 755, PT_SC, ucp_Lycian }, - { 762, PT_SC, ucp_Lydian }, - { 769, PT_GC, ucp_M }, - { 771, PT_SC, ucp_Mahajani }, - { 780, PT_SC, ucp_Makasar }, - { 788, PT_SC, ucp_Malayalam }, - { 798, PT_SC, ucp_Mandaic }, - { 806, PT_SC, ucp_Manichaean }, - { 817, PT_SC, ucp_Marchen }, - { 825, PT_SC, ucp_Masaram_Gondi }, - { 839, PT_PC, ucp_Mc }, - { 842, PT_PC, ucp_Me }, - { 845, PT_SC, ucp_Medefaidrin }, - { 857, PT_SC, ucp_Meetei_Mayek }, - { 870, PT_SC, ucp_Mende_Kikakui }, - { 884, PT_SC, ucp_Meroitic_Cursive }, - { 901, PT_SC, ucp_Meroitic_Hieroglyphs }, - { 922, PT_SC, ucp_Miao }, - { 927, PT_PC, ucp_Mn }, - { 930, PT_SC, ucp_Modi }, - { 935, PT_SC, ucp_Mongolian }, - { 945, PT_SC, ucp_Mro }, - { 949, PT_SC, ucp_Multani }, - { 957, PT_SC, ucp_Myanmar }, - { 965, PT_GC, ucp_N }, - { 967, PT_SC, ucp_Nabataean }, - { 977, PT_SC, ucp_Nandinagari }, - { 989, PT_PC, ucp_Nd }, - { 992, PT_SC, ucp_New_Tai_Lue }, - { 1004, PT_SC, ucp_Newa }, - { 1009, PT_SC, ucp_Nko }, - { 1013, PT_PC, ucp_Nl }, - { 1016, PT_PC, ucp_No }, - { 1019, PT_SC, ucp_Nushu }, - { 1025, PT_SC, ucp_Nyiakeng_Puachue_Hmong }, - { 1048, PT_SC, ucp_Ogham }, - { 1054, PT_SC, ucp_Ol_Chiki }, - { 1063, PT_SC, ucp_Old_Hungarian }, - { 1077, PT_SC, ucp_Old_Italic }, - { 1088, PT_SC, ucp_Old_North_Arabian }, - { 1106, PT_SC, ucp_Old_Permic }, - { 1117, PT_SC, ucp_Old_Persian }, - { 1129, PT_SC, ucp_Old_Sogdian }, - { 1141, PT_SC, ucp_Old_South_Arabian }, - { 1159, PT_SC, ucp_Old_Turkic }, - { 1170, PT_SC, ucp_Old_Uyghur }, - { 1181, PT_SC, ucp_Oriya }, - { 1187, PT_SC, ucp_Osage }, - { 1193, PT_SC, ucp_Osmanya }, - { 1201, PT_GC, ucp_P }, - { 1203, PT_SC, ucp_Pahawh_Hmong }, - { 1216, PT_SC, ucp_Palmyrene }, - { 1226, PT_SC, ucp_Pau_Cin_Hau }, - { 1238, PT_PC, ucp_Pc }, - { 1241, PT_PC, ucp_Pd }, - { 1244, PT_PC, ucp_Pe }, - { 1247, PT_PC, ucp_Pf }, - { 1250, PT_SC, ucp_Phags_Pa }, - { 1259, PT_SC, ucp_Phoenician }, - { 1270, PT_PC, ucp_Pi }, - { 1273, PT_PC, ucp_Po }, - { 1276, PT_PC, ucp_Ps }, - { 1279, PT_SC, ucp_Psalter_Pahlavi }, - { 1295, PT_SC, ucp_Rejang }, - { 1302, PT_SC, ucp_Runic }, - { 1308, PT_GC, ucp_S }, - { 1310, PT_SC, ucp_Samaritan }, - { 1320, PT_SC, ucp_Saurashtra }, - { 1331, PT_PC, ucp_Sc }, - { 1334, PT_SC, ucp_Sharada }, - { 1342, PT_SC, ucp_Shavian }, - { 1350, PT_SC, ucp_Siddham }, - { 1358, PT_SC, ucp_SignWriting }, - { 1370, PT_SC, ucp_Sinhala }, - { 1378, PT_PC, ucp_Sk }, - { 1381, PT_PC, ucp_Sm }, - { 1384, PT_PC, ucp_So }, - { 1387, PT_SC, ucp_Sogdian }, - { 1395, PT_SC, ucp_Sora_Sompeng }, - { 1408, PT_SC, ucp_Soyombo }, - { 1416, PT_SC, ucp_Sundanese }, - { 1426, PT_SC, ucp_Syloti_Nagri }, - { 1439, PT_SC, ucp_Syriac }, - { 1446, PT_SC, ucp_Tagalog }, - { 1454, PT_SC, ucp_Tagbanwa }, - { 1463, PT_SC, ucp_Tai_Le }, - { 1470, PT_SC, ucp_Tai_Tham }, - { 1479, PT_SC, ucp_Tai_Viet }, - { 1488, PT_SC, ucp_Takri }, - { 1494, PT_SC, ucp_Tamil }, - { 1500, PT_SC, ucp_Tangsa }, - { 1507, PT_SC, ucp_Tangut }, - { 1514, PT_SC, ucp_Telugu }, - { 1521, PT_SC, ucp_Thaana }, - { 1528, PT_SC, ucp_Thai }, - { 1533, PT_SC, ucp_Tibetan }, - { 1541, PT_SC, ucp_Tifinagh }, - { 1550, PT_SC, ucp_Tirhuta }, - { 1558, PT_SC, ucp_Toto }, - { 1563, PT_SC, ucp_Ugaritic }, - { 1572, PT_SC, ucp_Unknown }, - { 1580, PT_SC, ucp_Vai }, - { 1584, PT_SC, ucp_Vithkuqi }, - { 1593, PT_SC, ucp_Wancho }, - { 1600, PT_SC, ucp_Warang_Citi }, - { 1612, PT_ALNUM, 0 }, - { 1616, PT_PXSPACE, 0 }, - { 1620, PT_SPACE, 0 }, - { 1624, PT_UCNC, 0 }, - { 1628, PT_WORD, 0 }, - { 1632, PT_SC, ucp_Yezidi }, - { 1639, PT_SC, ucp_Yi }, - { 1642, PT_GC, ucp_Z }, - { 1644, PT_SC, ucp_Zanabazar_Square }, - { 1661, PT_PC, ucp_Zl }, - { 1664, PT_PC, ucp_Zp }, - { 1667, PT_PC, ucp_Zs } -}; +/* Finally, include the tables that are auto-generated from the Unicode data +files. */ -const size_t PRIV(utt_size) = sizeof(PRIV(utt)) / sizeof(ucp_type_table); +#include "pcre2_ucptables.c" #endif /* SUPPORT_UNICODE */ diff --git a/thirdparty/pcre2/src/pcre2_ucd.c b/thirdparty/pcre2/src/pcre2_ucd.c index 0b8ac75bd4..5e0fc37c35 100644 --- a/thirdparty/pcre2/src/pcre2_ucd.c +++ b/thirdparty/pcre2/src/pcre2_ucd.c @@ -1,36 +1,71 @@ -/* This module is generated by the maint/MultiStage2.py script. -Do not modify it by hand. Instead modify the script and run it -to regenerate this code. +/************************************************* +* Perl-Compatible Regular Expressions * +*************************************************/ + +/* PCRE is a library of functions to support regular expressions whose syntax +and semantics are as close as possible to those of the Perl 5 language. + + Written by Philip Hazel + Original API code Copyright (c) 1997-2012 University of Cambridge + New API code Copyright (c) 2016-2022 University of Cambridge + +This module is auto-generated from Unicode data files. DO NOT EDIT MANUALLY! +Instead, modify the maint/GenerateUcd.py script and run it to generate +a new version of this code. + +----------------------------------------------------------------------------- +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the University of Cambridge nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +----------------------------------------------------------------------------- +*/ -As well as being part of the PCRE2 library, this module is #included -by the pcre2test program, which redefines the PRIV macro to change -table names from _pcre2_xxx to xxxx, thereby avoiding name clashes -with the library. At present, just one of these tables is actually -needed. */ +/* This file contains tables of Unicode properties that are extracted from +Unicode data files. See the comments at the start of maint/GenerateUcd.py for +details. -#ifndef PCRE2_PCRE2TEST +As well as being part of the PCRE2 library, this file is #included by the +pcre2test program, which redefines the PRIV macro to change table names from +_pcre2_xxx to xxxx, thereby avoiding name clashes with the library. At present, +just one of these tables is actually needed. When compiling the library, some +headers are needed. */ +#ifndef PCRE2_PCRE2TEST #ifdef HAVE_CONFIG_H #include "config.h" #endif - #include "pcre2_internal.h" - #endif /* PCRE2_PCRE2TEST */ -/* Unicode character database. */ -/* This file was autogenerated by the MultiStage2.py script. */ -/* Total size: 102844 bytes, block size: 128. */ - -/* The tables herein are needed only when UCP support is built, -and in PCRE2 that happens automatically with UTF support. -This module should not be referenced otherwise, so -it should not matter whether it is compiled or not. However -a comment was received about space saving - maybe the guy linked -all the modules rather than using a library - so we include a -condition to cut out the tables when not needed. But don't leave -a totally empty module because some compilers barf at that. -Instead, just supply some small dummy tables. */ +/* The tables herein are needed only when UCP support is built, and in PCRE2 +that happens automatically with UTF support. This module should not be +referenced otherwise, so it should not matter whether it is compiled or not. +However a comment was received about space saving - maybe the guy linked all +the modules rather than using a library - so we include a condition to cut out +the tables when not needed. But don't leave a totally empty module because some +compilers barf at that. Instead, just supply some small dummy tables. */ #ifndef SUPPORT_UNICODE const ucd_record PRIV(ucd_records)[] = {{0,0,0,0,0,0,0 }}; @@ -39,11 +74,27 @@ const uint16_t PRIV(ucd_stage2)[] = {0}; const uint32_t PRIV(ucd_caseless_sets)[] = {0}; #else +/* Total size: 111116 bytes, block size: 128. */ + const char *PRIV(unicode_version) = "14.0.0"; -/* If the 32-bit library is run in non-32-bit mode, character values -greater than 0x10ffff may be encountered. For these we set up a -special record. */ +/* When recompiling tables with a new Unicode version, please check the types +in this structure definition with those in pcre2_internal.h (the actual field +names will be different). + +typedef struct { +uint8_t property_0; +uint8_t property_1; +uint8_t property_2; +uint8_t property_3; +int32_t property_4; +uint16_t property_5; +uint16_t property_6; +} ucd_record; +*/ + +/* If the 32-bit library is run in non-32-bit mode, character values greater +than 0x10ffff may be encountered. For these we set up a special record. */ #if PCRE2_CODE_UNIT_WIDTH == 32 const ucd_record PRIV(dummy_ucd_record)[] = {{ @@ -52,68 +103,53 @@ const ucd_record PRIV(dummy_ucd_record)[] = {{ ucp_gbOther, /* grapheme break property */ 0, /* case set */ 0, /* other case */ - ucp_Unknown, /* script extension */ - 0, /* dummy filler */ + 0 | (ucp_bidiL << UCD_BIDICLASS_SHIFT), /* script extension and bidi class */ + 0, /* bool properties offset */ }}; #endif -/* When recompiling tables with a new Unicode version, please check the -types in this structure definition from pcre2_internal.h (the actual -field names will be different): - -typedef struct { -uint8_t property_0; -uint8_t property_1; -uint8_t property_2; -uint8_t property_3; -pcre_int32 property_4; -pcre_int16 property_5; -uint16_t property_6; -} ucd_record; -*/ - /* This table contains lists of characters that are caseless sets of more than one character. Each list is terminated by NOTACHAR. */ const uint32_t PRIV(ucd_caseless_sets)[] = { NOTACHAR, - 0x0053, 0x0073, 0x017f, NOTACHAR, - 0x01c4, 0x01c5, 0x01c6, NOTACHAR, - 0x01c7, 0x01c8, 0x01c9, NOTACHAR, - 0x01ca, 0x01cb, 0x01cc, NOTACHAR, - 0x01f1, 0x01f2, 0x01f3, NOTACHAR, - 0x0345, 0x0399, 0x03b9, 0x1fbe, NOTACHAR, - 0x00b5, 0x039c, 0x03bc, NOTACHAR, - 0x03a3, 0x03c2, 0x03c3, NOTACHAR, - 0x0392, 0x03b2, 0x03d0, NOTACHAR, - 0x0398, 0x03b8, 0x03d1, 0x03f4, NOTACHAR, - 0x03a6, 0x03c6, 0x03d5, NOTACHAR, - 0x03a0, 0x03c0, 0x03d6, NOTACHAR, - 0x039a, 0x03ba, 0x03f0, NOTACHAR, - 0x03a1, 0x03c1, 0x03f1, NOTACHAR, - 0x0395, 0x03b5, 0x03f5, NOTACHAR, - 0x0412, 0x0432, 0x1c80, NOTACHAR, - 0x0414, 0x0434, 0x1c81, NOTACHAR, - 0x041e, 0x043e, 0x1c82, NOTACHAR, - 0x0421, 0x0441, 0x1c83, NOTACHAR, - 0x0422, 0x0442, 0x1c84, 0x1c85, NOTACHAR, - 0x042a, 0x044a, 0x1c86, NOTACHAR, - 0x0462, 0x0463, 0x1c87, NOTACHAR, - 0x1e60, 0x1e61, 0x1e9b, NOTACHAR, - 0x03a9, 0x03c9, 0x2126, NOTACHAR, - 0x004b, 0x006b, 0x212a, NOTACHAR, - 0x00c5, 0x00e5, 0x212b, NOTACHAR, - 0x1c88, 0xa64a, 0xa64b, NOTACHAR, + 0x0053, 0x0073, 0x017f, NOTACHAR, + 0x01c4, 0x01c5, 0x01c6, NOTACHAR, + 0x01c7, 0x01c8, 0x01c9, NOTACHAR, + 0x01ca, 0x01cb, 0x01cc, NOTACHAR, + 0x01f1, 0x01f2, 0x01f3, NOTACHAR, + 0x0345, 0x0399, 0x03b9, 0x1fbe, NOTACHAR, + 0x00b5, 0x039c, 0x03bc, NOTACHAR, + 0x03a3, 0x03c2, 0x03c3, NOTACHAR, + 0x0392, 0x03b2, 0x03d0, NOTACHAR, + 0x0398, 0x03b8, 0x03d1, 0x03f4, NOTACHAR, + 0x03a6, 0x03c6, 0x03d5, NOTACHAR, + 0x03a0, 0x03c0, 0x03d6, NOTACHAR, + 0x039a, 0x03ba, 0x03f0, NOTACHAR, + 0x03a1, 0x03c1, 0x03f1, NOTACHAR, + 0x0395, 0x03b5, 0x03f5, NOTACHAR, + 0x0412, 0x0432, 0x1c80, NOTACHAR, + 0x0414, 0x0434, 0x1c81, NOTACHAR, + 0x041e, 0x043e, 0x1c82, NOTACHAR, + 0x0421, 0x0441, 0x1c83, NOTACHAR, + 0x0422, 0x0442, 0x1c84, 0x1c85, NOTACHAR, + 0x042a, 0x044a, 0x1c86, NOTACHAR, + 0x0462, 0x0463, 0x1c87, NOTACHAR, + 0x1e60, 0x1e61, 0x1e9b, NOTACHAR, + 0x03a9, 0x03c9, 0x2126, NOTACHAR, + 0x004b, 0x006b, 0x212a, NOTACHAR, + 0x00c5, 0x00e5, 0x212b, NOTACHAR, + 0x1c88, 0xa64a, 0xa64b, NOTACHAR, }; -/* When #included in pcre2test, we don't need the table of digit -sets, nor the the large main UCD tables. */ +/* When #included in pcre2test, we don't need the table of digit sets, nor the +the large main UCD tables. */ #ifndef PCRE2_PCRE2TEST -/* This table lists the code points for the '9' characters in each -set of decimal digits. It is used to ensure that all the digits in -a script run come from the same set. */ +/* This table lists the code points for the '9' characters in each set of +decimal digits. It is used to ensure that all the digits in a script run come +from the same set. */ const uint32_t PRIV(ucd_digit_sets)[] = { 66, /* Number of subsequent values */ @@ -128,1072 +164,1676 @@ const uint32_t PRIV(ucd_digit_sets)[] = { 0x1e959, 0x1fbf9, }; -/* This vector is a list of lists of scripts for the Script Extension -property. Each sublist is zero-terminated. */ - -const uint8_t PRIV(ucd_script_sets)[] = { - /* 0 */ 0, - /* 1 */ 1, 11, 0, - /* 4 */ 1, 144, 0, - /* 7 */ 1, 64, 0, - /* 10 */ 1, 50, 0, - /* 13 */ 1, 56, 0, - /* 16 */ 3, 15, 0, - /* 19 */ 4, 23, 0, - /* 22 */ 6, 84, 0, - /* 25 */ 12, 36, 0, - /* 28 */ 13, 18, 0, - /* 31 */ 13, 34, 0, - /* 34 */ 13, 118, 0, - /* 37 */ 13, 50, 0, - /* 40 */ 15, 107, 0, - /* 43 */ 15, 150, 0, - /* 46 */ 15, 100, 0, - /* 49 */ 15, 54, 0, - /* 52 */ 17, 34, 0, - /* 55 */ 107, 54, 0, - /* 58 */ 21, 108, 0, - /* 61 */ 22, 129, 0, - /* 64 */ 23, 34, 0, - /* 67 */ 27, 30, 0, - /* 70 */ 29, 150, 0, - /* 73 */ 34, 38, 0, - /* 76 */ 112, 158, 0, - /* 79 */ 38, 65, 0, - /* 82 */ 1, 50, 56, 0, - /* 86 */ 1, 56, 156, 0, - /* 90 */ 3, 96, 49, 0, - /* 94 */ 96, 39, 53, 0, - /* 98 */ 157, 12, 36, 0, - /* 102 */ 12, 110, 36, 0, - /* 106 */ 15, 107, 29, 0, - /* 110 */ 15, 107, 34, 0, - /* 114 */ 23, 27, 30, 0, - /* 118 */ 69, 34, 39, 0, - /* 122 */ 3, 15, 107, 29, 0, - /* 127 */ 7, 25, 52, 51, 0, - /* 132 */ 15, 142, 85, 111, 0, - /* 137 */ 4, 24, 23, 27, 30, 0, - /* 143 */ 1, 64, 144, 50, 56, 156, 0, - /* 150 */ 4, 24, 23, 27, 30, 61, 0, - /* 157 */ 15, 29, 37, 44, 54, 55, 0, - /* 164 */ 132, 1, 64, 144, 50, 56, 156, 0, - /* 172 */ 3, 15, 107, 29, 150, 44, 55, 124, 0, - /* 181 */ 132, 1, 95, 112, 158, 121, 144, 148, 50, 0, - /* 191 */ 15, 142, 21, 22, 108, 85, 111, 114, 109, 102, 124, 0, - /* 203 */ 3, 15, 107, 21, 22, 29, 34, 37, 44, 54, 55, 124, 0, - /* 216 */ 3, 15, 107, 21, 22, 29, 34, 37, 44, 100, 54, 55, 124, 0, - /* 230 */ 15, 142, 21, 22, 108, 29, 85, 111, 114, 150, 109, 102, 124, 0, - /* 244 */ 15, 142, 21, 22, 108, 29, 85, 111, 37, 114, 150, 109, 102, 124, 0, - /* 259 */ 3, 15, 142, 143, 138, 107, 21, 22, 29, 111, 37, 150, 44, 109, 48, 49, 102, 54, 55, 124, 0, - /* 280 */ 3, 15, 142, 143, 138, 107, 21, 22, 29, 35, 111, 37, 150, 44, 109, 48, 49, 102, 54, 55, 124, 0, - /* 302 */ +/* This vector is a list of script bitsets for the Script Extension property. +The number of 32-bit words in each bitset is #defined in pcre2_ucp.h as +ucd_script_sets_item_size. */ + +const uint32_t PRIV(ucd_script_sets)[] = { + 0x00000000u, 0x00000000u, 0x00000000u, + 0x00000080u, 0x00000000u, 0x00000000u, + 0x00000040u, 0x00000000u, 0x00000000u, + 0x00000000u, 0x00004000u, 0x00000000u, + 0x00000002u, 0x00000000u, 0x00000000u, + 0x00800000u, 0x00000000u, 0x00000000u, + 0x00000001u, 0x00000000u, 0x00000000u, + 0x00000000u, 0x00000000u, 0x00000001u, + 0x00000010u, 0x00000000u, 0x00000000u, + 0x00000008u, 0x00000004u, 0x00000000u, + 0x00000008u, 0x40000000u, 0x00000000u, + 0x00000008u, 0x00000040u, 0x00000000u, + 0x00000018u, 0x00000000u, 0x00000000u, + 0x00000028u, 0x00000000u, 0x00000000u, + 0x000000c0u, 0x00000000u, 0x00000000u, + 0x00c00000u, 0x00000000u, 0x00000000u, + 0x00000000u, 0x00000102u, 0x00000000u, + 0x80000000u, 0x00000001u, 0x00000000u, + 0x00000004u, 0x00000008u, 0x00000000u, + 0x00000005u, 0x00000000u, 0x00000000u, + 0x00000004u, 0x00200000u, 0x00000000u, + 0x00000014u, 0x00000000u, 0x00000000u, + 0x00000040u, 0x00008000u, 0x00000000u, + 0x00000040u, 0x00000000u, 0x00000001u, + 0x00000040u, 0x00001000u, 0x00000000u, + 0x00000840u, 0x00000000u, 0x00000000u, + 0x00020001u, 0x00000000u, 0x00000000u, + 0x00000800u, 0x00008000u, 0x00000000u, + 0x00000200u, 0x00010000u, 0x00000000u, + 0x00000100u, 0x02000000u, 0x00000000u, + 0x00800001u, 0x00000000u, 0x00000000u, + 0x00300000u, 0x00000000u, 0x00000000u, + 0x00002000u, 0x00000000u, 0x00000001u, + 0x00080001u, 0x00000000u, 0x00000000u, + 0x00000000u, 0x00080000u, 0x00000008u, + 0x00080000u, 0x00000020u, 0x00000000u, + 0x00000038u, 0x00000000u, 0x00000000u, + 0x00000028u, 0x00000000u, 0x00000002u, + 0x00000080u, 0x00000810u, 0x00000000u, + 0x40010000u, 0x00000800u, 0x00000000u, + 0x80000000u, 0x00000001u, 0x00000004u, + 0x80000000u, 0x00020001u, 0x00000000u, + 0x00002040u, 0x00008000u, 0x00000000u, + 0x00000041u, 0x00008000u, 0x00000000u, + 0x00b00000u, 0x00000000u, 0x00000000u, + 0x00010001u, 0x00000080u, 0x00000000u, + 0x000020c0u, 0x00008000u, 0x00000000u, + 0x1e000000u, 0x00000000u, 0x00000000u, + 0x00000040u, 0x10040200u, 0x00000000u, + 0x00f40000u, 0x00000000u, 0x00000000u, + 0x00000038u, 0x40000040u, 0x00000002u, + 0x01f40000u, 0x00000000u, 0x00000000u, + 0x00007c40u, 0x00000000u, 0x00000000u, + 0x00000038u, 0x44000040u, 0x00000002u, + 0x000034c0u, 0x01008000u, 0x00000001u, + 0x00000018u, 0xc4480400u, 0x00000008u, + 0x00000340u, 0x11952200u, 0x00000000u, + 0x00007fc1u, 0x01008000u, 0x00000000u, + 0x00007fc1u, 0x01009000u, 0x00000000u, + 0x00002340u, 0x11952200u, 0x00000001u, + 0x00006340u, 0x11952200u, 0x00000001u, + 0x0000ffc0u, 0x3984a010u, 0x00000001u, + 0x2000ffc0u, 0x3984a010u, 0x00000001u, +}; + +/* This vector is a list of bitsets for Boolean properties. The number of +32_bit words in each bitset is #defined as ucd_boolprop_sets_item_size in +pcre2_ucp.h. */ + +const uint32_t PRIV(ucd_boolprop_sets)[] = { + 0x00000000u, 0x00000000u, + 0x00000001u, 0x00000000u, + 0x00000001u, 0x00020040u, + 0x00800001u, 0x00020040u, + 0x00800001u, 0x00002820u, + 0x00800001u, 0x00000120u, + 0x00830001u, 0x00000020u, + 0x00800001u, 0x00000020u, + 0x00800021u, 0x00000120u, + 0x00800011u, 0x00000020u, + 0x00800001u, 0x00000028u, + 0x00800001u, 0x00002020u, + 0x00801001u, 0x00000020u, + 0x00800021u, 0x00002820u, + 0x24830003u, 0x00040000u, + 0x00800021u, 0x00002020u, + 0x00800011u, 0x00000028u, + 0x648003c7u, 0x000c8000u, + 0x608003c5u, 0x000c8000u, + 0x00808021u, 0x00000028u, + 0x20800001u, 0x00040000u, + 0x00808021u, 0x00000020u, + 0x64800d47u, 0x000c0004u, + 0x60800d45u, 0x000c0004u, + 0x60800d45u, 0x000c1004u, + 0x00000000u, 0x00020040u, + 0x00800000u, 0x00020000u, + 0x00800000u, 0x00000020u, + 0x00808020u, 0x00000000u, + 0x00a10000u, 0x00000020u, + 0x60800044u, 0x000c0004u, + 0x00800010u, 0x00000120u, + 0x00800000u, 0x00000028u, + 0x00002020u, 0x00000000u, + 0x00800000u, 0x00000000u, + 0x60800dc4u, 0x000c0004u, + 0x20c08020u, 0x00040000u, + 0x608003c4u, 0x000c8000u, + 0x60800d44u, 0x000c0004u, + 0x60800d44u, 0x000c1004u, + 0x60804dc4u, 0x000c0004u, + 0x60800004u, 0x000c0000u, + 0x608007c4u, 0x000c8000u, + 0x60800bc4u, 0x000c0000u, + 0x60808064u, 0x000c0004u, + 0x60808064u, 0x000c1004u, + 0x60808024u, 0x000c0000u, + 0x60c08024u, 0x000c0000u, + 0x21008020u, 0x00040000u, + 0x21008de4u, 0x00040004u, + 0x21002020u, 0x00040000u, + 0x21000020u, 0x00040000u, + 0x60808064u, 0x00000004u, + 0x00800000u, 0x00002000u, + 0x20800020u, 0x00042000u, + 0x60800dc4u, 0x000c000cu, + 0x60800044u, 0x000c8008u, + 0x60800044u, 0x000c8000u, + 0x608003c4u, 0x000c8008u, + 0x00800000u, 0x00000008u, + 0x01000020u, 0x00000000u, + 0x00800020u, 0x00000000u, + 0x00800000u, 0x00002800u, + 0x00801000u, 0x00000000u, + 0x21008024u, 0x00040000u, + 0x21000024u, 0x00040000u, + 0x00000020u, 0x00000080u, + 0x00002028u, 0x00000000u, + 0x60c00024u, 0x000c0000u, + 0x20800000u, 0x00040000u, + 0x60804004u, 0x000c0000u, + 0x60800024u, 0x000c0000u, + 0x20800004u, 0x00040000u, + 0x23008020u, 0x00040000u, + 0x21000004u, 0x00040000u, + 0x21408020u, 0x00040000u, + 0x60800004u, 0x00040000u, + 0x23000024u, 0x00040000u, + 0x60800004u, 0x000c0002u, + 0x00800010u, 0x00000000u, + 0x20808000u, 0x00040000u, + 0x21004024u, 0x00040000u, + 0x20808004u, 0x00040000u, + 0x60800944u, 0x000c0004u, + 0x60802004u, 0x000c0000u, + 0x60800344u, 0x000c8000u, + 0x22808000u, 0x00040000u, + 0x22800000u, 0x00040000u, + 0x00c00000u, 0x00000000u, + 0x21002020u, 0x00050000u, + 0x61000024u, 0x000c0000u, + 0x23000020u, 0x00040000u, + 0x01008020u, 0x00000000u, + 0x21408024u, 0x00040000u, + 0x00808000u, 0x00000000u, + 0x60800064u, 0x000c0004u, + 0x60800044u, 0x000c1004u, + 0x60800064u, 0x000c1004u, + 0x01002020u, 0x00000001u, + 0x00022020u, 0x00000001u, + 0x00002028u, 0x00000040u, + 0x00801000u, 0x00000020u, + 0x00800020u, 0x00000120u, + 0x00800000u, 0x00000120u, + 0x00800020u, 0x00000020u, + 0x00a10000u, 0x00002820u, + 0x00800000u, 0x00002820u, + 0x20800000u, 0x00040008u, + 0x00800010u, 0x00000020u, + 0x00002020u, 0x00000008u, + 0x00002000u, 0x00000000u, + 0x00006020u, 0x00000000u, + 0x00801000u, 0x00000008u, + 0x00800010u, 0x00000008u, + 0x21000020u, 0x00040008u, + 0x01020020u, 0x00000000u, + 0x60800044u, 0x000c000cu, + 0x60800000u, 0x000c0008u, + 0x00a10000u, 0x00000000u, + 0x60800000u, 0x000c0000u, + 0x60800004u, 0x000c0008u, + 0x60a10044u, 0x000c0004u, + 0x60800044u, 0x000c100cu, + 0x00a10000u, 0x00000028u, + 0x00800010u, 0x00000028u, + 0x00801000u, 0x00000028u, + 0x00b10000u, 0x00000020u, + 0x00804010u, 0x00000020u, + 0x00a00000u, 0x00000020u, + 0x00000000u, 0x00000020u, + 0x008003c4u, 0x00008000u, + 0x00a103c4u, 0x00008000u, + 0x00800d44u, 0x00000004u, + 0x00b10000u, 0x00000028u, + 0x00a00000u, 0x00000028u, + 0x00a90000u, 0x00000020u, + 0x00b90000u, 0x00000020u, + 0x00808024u, 0x00000020u, + 0x00800000u, 0x00002020u, + 0x00800000u, 0x00000200u, + 0x08800000u, 0x00000000u, + 0x10800000u, 0x00000000u, + 0xe0800004u, 0x000c0000u, + 0x21008000u, 0x00040000u, + 0x00a11000u, 0x00000020u, + 0x60808020u, 0x00000000u, + 0xe0800004u, 0x000c4000u, + 0x60808004u, 0x000c0000u, + 0x60800004u, 0x00000000u, + 0x00000000u, 0x00000010u, + 0x21022020u, 0x00050000u, + 0x00800000u, 0x00000100u, + 0x00800020u, 0x00002800u, + 0x00800020u, 0x00002000u, + 0x00800020u, 0x00000100u, + 0x24800000u, 0x00040000u, + 0x648003c4u, 0x000c8000u, + 0x00808020u, 0x00000008u, + 0x64800d44u, 0x000c0004u, + 0x00800010u, 0x00000100u, + 0x61008024u, 0x00040000u, + 0x00000020u, 0x00000000u, + 0x60c00004u, 0x000c0000u, + 0x21400020u, 0x00040000u, + 0xa1000020u, 0x00040000u, + 0x21000000u, 0x00040000u, + 0x00a00000u, 0x00000000u, + 0x00b10000u, 0x00000000u, + 0x00200000u, 0x00000000u, + 0x00800044u, 0x00008000u, + 0x00a10044u, 0x00008000u, + 0x00930000u, 0x00000400u, + 0x00b90000u, 0x00000000u, + 0x00a90000u, 0x00000000u, + 0x00970020u, 0x00000000u, + 0x00b30000u, 0x00000000u, + 0x01022020u, 0x00000000u, }; /* These are the main two-stage UCD tables. The fields in each record are: script (8 bits), character type (8 bits), grapheme break property (8 bits), -offset to multichar other cases or zero (8 bits), offset to other case -or zero (32 bits, signed), script extension (16 bits, signed), and a dummy -16-bit field to make the whole thing a multiple of 4 bytes. */ - -const ucd_record PRIV(ucd_records)[] = { /* 11964 bytes, record size 12 */ - { 10, 0, 2, 0, 0, 10, 256, }, /* 0 */ - { 10, 0, 2, 0, 0, 10, 0, }, /* 1 */ - { 10, 0, 1, 0, 0, 10, 0, }, /* 2 */ - { 10, 0, 0, 0, 0, 10, 0, }, /* 3 */ - { 10, 29, 12, 0, 0, 10, 0, }, /* 4 */ - { 10, 21, 12, 0, 0, 10, 0, }, /* 5 */ - { 10, 23, 12, 0, 0, 10, 0, }, /* 6 */ - { 10, 22, 12, 0, 0, 10, 0, }, /* 7 */ - { 10, 18, 12, 0, 0, 10, 0, }, /* 8 */ - { 10, 25, 12, 0, 0, 10, 0, }, /* 9 */ - { 10, 17, 12, 0, 0, 10, 0, }, /* 10 */ - { 10, 13, 12, 0, 0, 10, 0, }, /* 11 */ - { 34, 9, 12, 0, 32, 34, 0, }, /* 12 */ - { 34, 9, 12, 100, 32, 34, 0, }, /* 13 */ - { 34, 9, 12, 1, 32, 34, 0, }, /* 14 */ - { 10, 24, 12, 0, 0, 10, 0, }, /* 15 */ - { 10, 16, 12, 0, 0, 10, 0, }, /* 16 */ - { 34, 5, 12, 0, -32, 34, 0, }, /* 17 */ - { 34, 5, 12, 100, -32, 34, 0, }, /* 18 */ - { 34, 5, 12, 1, -32, 34, 0, }, /* 19 */ - { 10, 26, 12, 0, 0, 10, 0, }, /* 20 */ - { 10, 26, 14, 0, 0, 10, 0, }, /* 21 */ - { 34, 7, 12, 0, 0, 34, 0, }, /* 22 */ - { 10, 20, 12, 0, 0, 10, 0, }, /* 23 */ - { 10, 1, 2, 0, 0, 10, 0, }, /* 24 */ - { 10, 15, 12, 0, 0, 10, 0, }, /* 25 */ - { 10, 5, 12, 26, 775, 10, 0, }, /* 26 */ - { 10, 19, 12, 0, 0, 10, 0, }, /* 27 */ - { 34, 9, 12, 104, 32, 34, 0, }, /* 28 */ - { 34, 5, 12, 0, 7615, 34, 0, }, /* 29 */ - { 34, 5, 12, 104, -32, 34, 0, }, /* 30 */ - { 34, 5, 12, 0, 121, 34, 0, }, /* 31 */ - { 34, 9, 12, 0, 1, 34, 0, }, /* 32 */ - { 34, 5, 12, 0, -1, 34, 0, }, /* 33 */ - { 34, 9, 12, 0, 0, 34, 0, }, /* 34 */ - { 34, 5, 12, 0, 0, 34, 0, }, /* 35 */ - { 34, 9, 12, 0, -121, 34, 0, }, /* 36 */ - { 34, 5, 12, 1, -268, 34, 0, }, /* 37 */ - { 34, 5, 12, 0, 195, 34, 0, }, /* 38 */ - { 34, 9, 12, 0, 210, 34, 0, }, /* 39 */ - { 34, 9, 12, 0, 206, 34, 0, }, /* 40 */ - { 34, 9, 12, 0, 205, 34, 0, }, /* 41 */ - { 34, 9, 12, 0, 79, 34, 0, }, /* 42 */ - { 34, 9, 12, 0, 202, 34, 0, }, /* 43 */ - { 34, 9, 12, 0, 203, 34, 0, }, /* 44 */ - { 34, 9, 12, 0, 207, 34, 0, }, /* 45 */ - { 34, 5, 12, 0, 97, 34, 0, }, /* 46 */ - { 34, 9, 12, 0, 211, 34, 0, }, /* 47 */ - { 34, 9, 12, 0, 209, 34, 0, }, /* 48 */ - { 34, 5, 12, 0, 163, 34, 0, }, /* 49 */ - { 34, 9, 12, 0, 213, 34, 0, }, /* 50 */ - { 34, 5, 12, 0, 130, 34, 0, }, /* 51 */ - { 34, 9, 12, 0, 214, 34, 0, }, /* 52 */ - { 34, 9, 12, 0, 218, 34, 0, }, /* 53 */ - { 34, 9, 12, 0, 217, 34, 0, }, /* 54 */ - { 34, 9, 12, 0, 219, 34, 0, }, /* 55 */ - { 34, 5, 12, 0, 56, 34, 0, }, /* 56 */ - { 34, 9, 12, 5, 2, 34, 0, }, /* 57 */ - { 34, 8, 12, 5, 1, 34, 0, }, /* 58 */ - { 34, 5, 12, 5, -2, 34, 0, }, /* 59 */ - { 34, 9, 12, 9, 2, 34, 0, }, /* 60 */ - { 34, 8, 12, 9, 1, 34, 0, }, /* 61 */ - { 34, 5, 12, 9, -2, 34, 0, }, /* 62 */ - { 34, 9, 12, 13, 2, 34, 0, }, /* 63 */ - { 34, 8, 12, 13, 1, 34, 0, }, /* 64 */ - { 34, 5, 12, 13, -2, 34, 0, }, /* 65 */ - { 34, 5, 12, 0, -79, 34, 0, }, /* 66 */ - { 34, 9, 12, 17, 2, 34, 0, }, /* 67 */ - { 34, 8, 12, 17, 1, 34, 0, }, /* 68 */ - { 34, 5, 12, 17, -2, 34, 0, }, /* 69 */ - { 34, 9, 12, 0, -97, 34, 0, }, /* 70 */ - { 34, 9, 12, 0, -56, 34, 0, }, /* 71 */ - { 34, 9, 12, 0, -130, 34, 0, }, /* 72 */ - { 34, 9, 12, 0, 10795, 34, 0, }, /* 73 */ - { 34, 9, 12, 0, -163, 34, 0, }, /* 74 */ - { 34, 9, 12, 0, 10792, 34, 0, }, /* 75 */ - { 34, 5, 12, 0, 10815, 34, 0, }, /* 76 */ - { 34, 9, 12, 0, -195, 34, 0, }, /* 77 */ - { 34, 9, 12, 0, 69, 34, 0, }, /* 78 */ - { 34, 9, 12, 0, 71, 34, 0, }, /* 79 */ - { 34, 5, 12, 0, 10783, 34, 0, }, /* 80 */ - { 34, 5, 12, 0, 10780, 34, 0, }, /* 81 */ - { 34, 5, 12, 0, 10782, 34, 0, }, /* 82 */ - { 34, 5, 12, 0, -210, 34, 0, }, /* 83 */ - { 34, 5, 12, 0, -206, 34, 0, }, /* 84 */ - { 34, 5, 12, 0, -205, 34, 0, }, /* 85 */ - { 34, 5, 12, 0, -202, 34, 0, }, /* 86 */ - { 34, 5, 12, 0, -203, 34, 0, }, /* 87 */ - { 34, 5, 12, 0, 42319, 34, 0, }, /* 88 */ - { 34, 5, 12, 0, 42315, 34, 0, }, /* 89 */ - { 34, 5, 12, 0, -207, 34, 0, }, /* 90 */ - { 34, 5, 12, 0, 42280, 34, 0, }, /* 91 */ - { 34, 5, 12, 0, 42308, 34, 0, }, /* 92 */ - { 34, 5, 12, 0, -209, 34, 0, }, /* 93 */ - { 34, 5, 12, 0, -211, 34, 0, }, /* 94 */ - { 34, 5, 12, 0, 10743, 34, 0, }, /* 95 */ - { 34, 5, 12, 0, 42305, 34, 0, }, /* 96 */ - { 34, 5, 12, 0, 10749, 34, 0, }, /* 97 */ - { 34, 5, 12, 0, -213, 34, 0, }, /* 98 */ - { 34, 5, 12, 0, -214, 34, 0, }, /* 99 */ - { 34, 5, 12, 0, 10727, 34, 0, }, /* 100 */ - { 34, 5, 12, 0, -218, 34, 0, }, /* 101 */ - { 34, 5, 12, 0, 42307, 34, 0, }, /* 102 */ - { 34, 5, 12, 0, 42282, 34, 0, }, /* 103 */ - { 34, 5, 12, 0, -69, 34, 0, }, /* 104 */ - { 34, 5, 12, 0, -217, 34, 0, }, /* 105 */ - { 34, 5, 12, 0, -71, 34, 0, }, /* 106 */ - { 34, 5, 12, 0, -219, 34, 0, }, /* 107 */ - { 34, 5, 12, 0, 42261, 34, 0, }, /* 108 */ - { 34, 5, 12, 0, 42258, 34, 0, }, /* 109 */ - { 34, 6, 12, 0, 0, 34, 0, }, /* 110 */ - { 10, 6, 12, 0, 0, 10, 0, }, /* 111 */ - { 4, 24, 12, 0, 0, 4, 0, }, /* 112 */ - { 28, 12, 3, 0, 0, 28, 0, }, /* 113 */ - { 28, 12, 3, 0, 0, 20, 0, }, /* 114 */ - { 28, 12, 3, 21, 116, 20, 0, }, /* 115 */ - { 28, 12, 3, 0, 0, 34, 0, }, /* 116 */ - { 20, 9, 12, 0, 1, 20, 0, }, /* 117 */ - { 20, 5, 12, 0, -1, 20, 0, }, /* 118 */ - { 20, 24, 12, 0, 0, 20, 0, }, /* 119 */ - { 0, 2, 12, 0, 0, 0, 0, }, /* 120 */ - { 20, 6, 12, 0, 0, 20, 0, }, /* 121 */ - { 20, 5, 12, 0, 130, 20, 0, }, /* 122 */ - { 20, 9, 12, 0, 116, 20, 0, }, /* 123 */ - { 20, 9, 12, 0, 38, 20, 0, }, /* 124 */ - { 20, 9, 12, 0, 37, 20, 0, }, /* 125 */ - { 20, 9, 12, 0, 64, 20, 0, }, /* 126 */ - { 20, 9, 12, 0, 63, 20, 0, }, /* 127 */ - { 20, 5, 12, 0, 0, 20, 0, }, /* 128 */ - { 20, 9, 12, 0, 32, 20, 0, }, /* 129 */ - { 20, 9, 12, 34, 32, 20, 0, }, /* 130 */ - { 20, 9, 12, 59, 32, 20, 0, }, /* 131 */ - { 20, 9, 12, 38, 32, 20, 0, }, /* 132 */ - { 20, 9, 12, 21, 32, 20, 0, }, /* 133 */ - { 20, 9, 12, 51, 32, 20, 0, }, /* 134 */ - { 20, 9, 12, 26, 32, 20, 0, }, /* 135 */ - { 20, 9, 12, 47, 32, 20, 0, }, /* 136 */ - { 20, 9, 12, 55, 32, 20, 0, }, /* 137 */ - { 20, 9, 12, 30, 32, 20, 0, }, /* 138 */ - { 20, 9, 12, 43, 32, 20, 0, }, /* 139 */ - { 20, 9, 12, 96, 32, 20, 0, }, /* 140 */ - { 20, 5, 12, 0, -38, 20, 0, }, /* 141 */ - { 20, 5, 12, 0, -37, 20, 0, }, /* 142 */ - { 20, 5, 12, 0, -32, 20, 0, }, /* 143 */ - { 20, 5, 12, 34, -32, 20, 0, }, /* 144 */ - { 20, 5, 12, 59, -32, 20, 0, }, /* 145 */ - { 20, 5, 12, 38, -32, 20, 0, }, /* 146 */ - { 20, 5, 12, 21, -116, 20, 0, }, /* 147 */ - { 20, 5, 12, 51, -32, 20, 0, }, /* 148 */ - { 20, 5, 12, 26, -775, 20, 0, }, /* 149 */ - { 20, 5, 12, 47, -32, 20, 0, }, /* 150 */ - { 20, 5, 12, 55, -32, 20, 0, }, /* 151 */ - { 20, 5, 12, 30, 1, 20, 0, }, /* 152 */ - { 20, 5, 12, 30, -32, 20, 0, }, /* 153 */ - { 20, 5, 12, 43, -32, 20, 0, }, /* 154 */ - { 20, 5, 12, 96, -32, 20, 0, }, /* 155 */ - { 20, 5, 12, 0, -64, 20, 0, }, /* 156 */ - { 20, 5, 12, 0, -63, 20, 0, }, /* 157 */ - { 20, 9, 12, 0, 8, 20, 0, }, /* 158 */ - { 20, 5, 12, 34, -30, 20, 0, }, /* 159 */ - { 20, 5, 12, 38, -25, 20, 0, }, /* 160 */ - { 20, 9, 12, 0, 0, 20, 0, }, /* 161 */ - { 20, 5, 12, 43, -15, 20, 0, }, /* 162 */ - { 20, 5, 12, 47, -22, 20, 0, }, /* 163 */ - { 20, 5, 12, 0, -8, 20, 0, }, /* 164 */ - { 11, 9, 12, 0, 1, 11, 0, }, /* 165 */ - { 11, 5, 12, 0, -1, 11, 0, }, /* 166 */ - { 20, 5, 12, 51, -54, 20, 0, }, /* 167 */ - { 20, 5, 12, 55, -48, 20, 0, }, /* 168 */ - { 20, 5, 12, 0, 7, 20, 0, }, /* 169 */ - { 20, 5, 12, 0, -116, 20, 0, }, /* 170 */ - { 20, 9, 12, 38, -60, 20, 0, }, /* 171 */ - { 20, 5, 12, 59, -64, 20, 0, }, /* 172 */ - { 20, 25, 12, 0, 0, 20, 0, }, /* 173 */ - { 20, 9, 12, 0, -7, 20, 0, }, /* 174 */ - { 20, 9, 12, 0, -130, 20, 0, }, /* 175 */ - { 13, 9, 12, 0, 80, 13, 0, }, /* 176 */ - { 13, 9, 12, 0, 32, 13, 0, }, /* 177 */ - { 13, 9, 12, 63, 32, 13, 0, }, /* 178 */ - { 13, 9, 12, 67, 32, 13, 0, }, /* 179 */ - { 13, 9, 12, 71, 32, 13, 0, }, /* 180 */ - { 13, 9, 12, 75, 32, 13, 0, }, /* 181 */ - { 13, 9, 12, 79, 32, 13, 0, }, /* 182 */ - { 13, 9, 12, 84, 32, 13, 0, }, /* 183 */ - { 13, 5, 12, 0, -32, 13, 0, }, /* 184 */ - { 13, 5, 12, 63, -32, 13, 0, }, /* 185 */ - { 13, 5, 12, 67, -32, 13, 0, }, /* 186 */ - { 13, 5, 12, 71, -32, 13, 0, }, /* 187 */ - { 13, 5, 12, 75, -32, 13, 0, }, /* 188 */ - { 13, 5, 12, 79, -32, 13, 0, }, /* 189 */ - { 13, 5, 12, 84, -32, 13, 0, }, /* 190 */ - { 13, 5, 12, 0, -80, 13, 0, }, /* 191 */ - { 13, 9, 12, 0, 1, 13, 0, }, /* 192 */ - { 13, 5, 12, 0, -1, 13, 0, }, /* 193 */ - { 13, 9, 12, 88, 1, 13, 0, }, /* 194 */ - { 13, 5, 12, 88, -1, 13, 0, }, /* 195 */ - { 13, 26, 12, 0, 0, 13, 0, }, /* 196 */ - { 13, 12, 3, 0, 0, -34, 0, }, /* 197 */ - { 13, 12, 3, 0, 0, -28, 0, }, /* 198 */ - { 28, 12, 3, 0, 0, -31, 0, }, /* 199 */ - { 13, 11, 3, 0, 0, 13, 0, }, /* 200 */ - { 13, 9, 12, 0, 15, 13, 0, }, /* 201 */ - { 13, 5, 12, 0, -15, 13, 0, }, /* 202 */ - { 2, 9, 12, 0, 48, 2, 0, }, /* 203 */ - { 2, 6, 12, 0, 0, 2, 0, }, /* 204 */ - { 2, 21, 12, 0, 0, 2, 0, }, /* 205 */ - { 2, 5, 12, 0, 0, 2, 0, }, /* 206 */ - { 2, 5, 12, 0, -48, 2, 0, }, /* 207 */ - { 2, 17, 12, 0, 0, 2, 0, }, /* 208 */ - { 2, 26, 12, 0, 0, 2, 0, }, /* 209 */ - { 2, 23, 12, 0, 0, 2, 0, }, /* 210 */ - { 26, 12, 3, 0, 0, 26, 0, }, /* 211 */ - { 26, 17, 12, 0, 0, 26, 0, }, /* 212 */ - { 26, 21, 12, 0, 0, 26, 0, }, /* 213 */ - { 26, 7, 12, 0, 0, 26, 0, }, /* 214 */ - { 1, 1, 4, 0, 0, 1, 0, }, /* 215 */ - { 10, 1, 4, 0, 0, 10, 0, }, /* 216 */ - { 1, 25, 12, 0, 0, 1, 0, }, /* 217 */ - { 1, 21, 12, 0, 0, 1, 0, }, /* 218 */ - { 1, 23, 12, 0, 0, 1, 0, }, /* 219 */ - { 10, 21, 12, 0, 0, -143, 0, }, /* 220 */ - { 1, 26, 12, 0, 0, 1, 0, }, /* 221 */ - { 1, 12, 3, 0, 0, 1, 0, }, /* 222 */ - { 1, 1, 2, 0, 0, -82, 0, }, /* 223 */ - { 10, 21, 12, 0, 0, -164, 0, }, /* 224 */ - { 1, 7, 12, 0, 0, 1, 0, }, /* 225 */ - { 10, 6, 12, 0, 0, -181, 0, }, /* 226 */ - { 28, 12, 3, 0, 0, -10, 0, }, /* 227 */ - { 1, 13, 12, 0, 0, -86, 0, }, /* 228 */ - { 1, 21, 12, 0, 0, -4, 0, }, /* 229 */ - { 1, 6, 12, 0, 0, 1, 0, }, /* 230 */ - { 1, 13, 12, 0, 0, 1, 0, }, /* 231 */ - { 50, 21, 12, 0, 0, 50, 0, }, /* 232 */ - { 50, 1, 4, 0, 0, 50, 0, }, /* 233 */ - { 50, 7, 12, 0, 0, 50, 0, }, /* 234 */ - { 50, 12, 3, 0, 0, 50, 0, }, /* 235 */ - { 56, 7, 12, 0, 0, 56, 0, }, /* 236 */ - { 56, 12, 3, 0, 0, 56, 0, }, /* 237 */ - { 64, 13, 12, 0, 0, 64, 0, }, /* 238 */ - { 64, 7, 12, 0, 0, 64, 0, }, /* 239 */ - { 64, 12, 3, 0, 0, 64, 0, }, /* 240 */ - { 64, 6, 12, 0, 0, 64, 0, }, /* 241 */ - { 64, 26, 12, 0, 0, 64, 0, }, /* 242 */ - { 64, 21, 12, 0, 0, 64, 0, }, /* 243 */ - { 64, 23, 12, 0, 0, 64, 0, }, /* 244 */ - { 90, 7, 12, 0, 0, 90, 0, }, /* 245 */ - { 90, 12, 3, 0, 0, 90, 0, }, /* 246 */ - { 90, 6, 12, 0, 0, 90, 0, }, /* 247 */ - { 90, 21, 12, 0, 0, 90, 0, }, /* 248 */ - { 95, 7, 12, 0, 0, 95, 0, }, /* 249 */ - { 95, 12, 3, 0, 0, 95, 0, }, /* 250 */ - { 95, 21, 12, 0, 0, 95, 0, }, /* 251 */ - { 1, 24, 12, 0, 0, 1, 0, }, /* 252 */ - { 15, 12, 3, 0, 0, 15, 0, }, /* 253 */ - { 15, 10, 5, 0, 0, 15, 0, }, /* 254 */ - { 15, 7, 12, 0, 0, 15, 0, }, /* 255 */ - { 28, 12, 3, 0, 0, -216, 0, }, /* 256 */ - { 28, 12, 3, 0, 0, -203, 0, }, /* 257 */ - { 10, 21, 12, 0, 0, -259, 0, }, /* 258 */ - { 10, 21, 12, 0, 0, -280, 0, }, /* 259 */ - { 15, 13, 12, 0, 0, -132, 0, }, /* 260 */ - { 15, 21, 12, 0, 0, 15, 0, }, /* 261 */ - { 15, 6, 12, 0, 0, 15, 0, }, /* 262 */ - { 3, 7, 12, 0, 0, 3, 0, }, /* 263 */ - { 3, 12, 3, 0, 0, 3, 0, }, /* 264 */ - { 3, 10, 5, 0, 0, 3, 0, }, /* 265 */ - { 3, 10, 3, 0, 0, 3, 0, }, /* 266 */ - { 3, 13, 12, 0, 0, -90, 0, }, /* 267 */ - { 3, 23, 12, 0, 0, 3, 0, }, /* 268 */ - { 3, 15, 12, 0, 0, 3, 0, }, /* 269 */ - { 3, 26, 12, 0, 0, 3, 0, }, /* 270 */ - { 3, 21, 12, 0, 0, 3, 0, }, /* 271 */ - { 22, 12, 3, 0, 0, 22, 0, }, /* 272 */ - { 22, 10, 5, 0, 0, 22, 0, }, /* 273 */ - { 22, 7, 12, 0, 0, 22, 0, }, /* 274 */ - { 22, 13, 12, 0, 0, -61, 0, }, /* 275 */ - { 22, 21, 12, 0, 0, 22, 0, }, /* 276 */ - { 21, 12, 3, 0, 0, 21, 0, }, /* 277 */ - { 21, 10, 5, 0, 0, 21, 0, }, /* 278 */ - { 21, 7, 12, 0, 0, 21, 0, }, /* 279 */ - { 21, 13, 12, 0, 0, -58, 0, }, /* 280 */ - { 21, 21, 12, 0, 0, 21, 0, }, /* 281 */ - { 21, 23, 12, 0, 0, 21, 0, }, /* 282 */ - { 44, 12, 3, 0, 0, 44, 0, }, /* 283 */ - { 44, 10, 5, 0, 0, 44, 0, }, /* 284 */ - { 44, 7, 12, 0, 0, 44, 0, }, /* 285 */ - { 44, 10, 3, 0, 0, 44, 0, }, /* 286 */ - { 44, 13, 12, 0, 0, 44, 0, }, /* 287 */ - { 44, 26, 12, 0, 0, 44, 0, }, /* 288 */ - { 44, 15, 12, 0, 0, 44, 0, }, /* 289 */ - { 54, 12, 3, 0, 0, 54, 0, }, /* 290 */ - { 54, 7, 12, 0, 0, 54, 0, }, /* 291 */ - { 54, 10, 3, 0, 0, 54, 0, }, /* 292 */ - { 54, 10, 5, 0, 0, 54, 0, }, /* 293 */ - { 54, 13, 12, 0, 0, -55, 0, }, /* 294 */ - { 54, 15, 12, 0, 0, -55, 0, }, /* 295 */ - { 54, 26, 12, 0, 0, -55, 0, }, /* 296 */ - { 54, 26, 12, 0, 0, 54, 0, }, /* 297 */ - { 54, 23, 12, 0, 0, 54, 0, }, /* 298 */ - { 55, 12, 3, 0, 0, 55, 0, }, /* 299 */ - { 55, 10, 5, 0, 0, 55, 0, }, /* 300 */ - { 55, 7, 12, 0, 0, 55, 0, }, /* 301 */ - { 55, 13, 12, 0, 0, 55, 0, }, /* 302 */ - { 55, 21, 12, 0, 0, 55, 0, }, /* 303 */ - { 55, 15, 12, 0, 0, 55, 0, }, /* 304 */ - { 55, 26, 12, 0, 0, 55, 0, }, /* 305 */ - { 29, 7, 12, 0, 0, 29, 0, }, /* 306 */ - { 29, 12, 3, 0, 0, 29, 0, }, /* 307 */ - { 29, 10, 5, 0, 0, 29, 0, }, /* 308 */ - { 29, 21, 12, 0, 0, 29, 0, }, /* 309 */ - { 29, 10, 3, 0, 0, 29, 0, }, /* 310 */ - { 29, 13, 12, 0, 0, -70, 0, }, /* 311 */ - { 37, 12, 3, 0, 0, 37, 0, }, /* 312 */ - { 37, 10, 5, 0, 0, 37, 0, }, /* 313 */ - { 37, 7, 12, 0, 0, 37, 0, }, /* 314 */ - { 37, 10, 3, 0, 0, 37, 0, }, /* 315 */ - { 37, 7, 4, 0, 0, 37, 0, }, /* 316 */ - { 37, 26, 12, 0, 0, 37, 0, }, /* 317 */ - { 37, 15, 12, 0, 0, 37, 0, }, /* 318 */ - { 37, 13, 12, 0, 0, 37, 0, }, /* 319 */ - { 48, 12, 3, 0, 0, 48, 0, }, /* 320 */ - { 48, 10, 5, 0, 0, 48, 0, }, /* 321 */ - { 48, 7, 12, 0, 0, 48, 0, }, /* 322 */ - { 48, 10, 3, 0, 0, 48, 0, }, /* 323 */ - { 48, 13, 12, 0, 0, 48, 0, }, /* 324 */ - { 48, 21, 12, 0, 0, 48, 0, }, /* 325 */ - { 57, 7, 12, 0, 0, 57, 0, }, /* 326 */ - { 57, 12, 3, 0, 0, 57, 0, }, /* 327 */ - { 57, 7, 5, 0, 0, 57, 0, }, /* 328 */ - { 57, 6, 12, 0, 0, 57, 0, }, /* 329 */ - { 57, 21, 12, 0, 0, 57, 0, }, /* 330 */ - { 57, 13, 12, 0, 0, 57, 0, }, /* 331 */ - { 33, 7, 12, 0, 0, 33, 0, }, /* 332 */ - { 33, 12, 3, 0, 0, 33, 0, }, /* 333 */ - { 33, 7, 5, 0, 0, 33, 0, }, /* 334 */ - { 33, 6, 12, 0, 0, 33, 0, }, /* 335 */ - { 33, 13, 12, 0, 0, 33, 0, }, /* 336 */ - { 58, 7, 12, 0, 0, 58, 0, }, /* 337 */ - { 58, 26, 12, 0, 0, 58, 0, }, /* 338 */ - { 58, 21, 12, 0, 0, 58, 0, }, /* 339 */ - { 58, 12, 3, 0, 0, 58, 0, }, /* 340 */ - { 58, 13, 12, 0, 0, 58, 0, }, /* 341 */ - { 58, 15, 12, 0, 0, 58, 0, }, /* 342 */ - { 58, 22, 12, 0, 0, 58, 0, }, /* 343 */ - { 58, 18, 12, 0, 0, 58, 0, }, /* 344 */ - { 58, 10, 5, 0, 0, 58, 0, }, /* 345 */ - { 39, 7, 12, 0, 0, 39, 0, }, /* 346 */ - { 39, 10, 12, 0, 0, 39, 0, }, /* 347 */ - { 39, 12, 3, 0, 0, 39, 0, }, /* 348 */ - { 39, 10, 5, 0, 0, 39, 0, }, /* 349 */ - { 39, 13, 12, 0, 0, -94, 0, }, /* 350 */ - { 39, 21, 12, 0, 0, 39, 0, }, /* 351 */ - { 39, 13, 12, 0, 0, 39, 0, }, /* 352 */ - { 39, 26, 12, 0, 0, 39, 0, }, /* 353 */ - { 17, 9, 12, 0, 7264, 17, 0, }, /* 354 */ - { 17, 5, 12, 0, 3008, 17, 0, }, /* 355 */ - { 10, 21, 12, 0, 0, -52, 0, }, /* 356 */ - { 17, 6, 12, 0, 0, 17, 0, }, /* 357 */ - { 24, 7, 6, 0, 0, 24, 0, }, /* 358 */ - { 24, 7, 7, 0, 0, 24, 0, }, /* 359 */ - { 24, 7, 8, 0, 0, 24, 0, }, /* 360 */ - { 16, 7, 12, 0, 0, 16, 0, }, /* 361 */ - { 16, 12, 3, 0, 0, 16, 0, }, /* 362 */ - { 16, 21, 12, 0, 0, 16, 0, }, /* 363 */ - { 16, 15, 12, 0, 0, 16, 0, }, /* 364 */ - { 16, 26, 12, 0, 0, 16, 0, }, /* 365 */ - { 9, 9, 12, 0, 38864, 9, 0, }, /* 366 */ - { 9, 9, 12, 0, 8, 9, 0, }, /* 367 */ - { 9, 5, 12, 0, -8, 9, 0, }, /* 368 */ - { 8, 17, 12, 0, 0, 8, 0, }, /* 369 */ - { 8, 7, 12, 0, 0, 8, 0, }, /* 370 */ - { 8, 26, 12, 0, 0, 8, 0, }, /* 371 */ - { 8, 21, 12, 0, 0, 8, 0, }, /* 372 */ - { 41, 29, 12, 0, 0, 41, 0, }, /* 373 */ - { 41, 7, 12, 0, 0, 41, 0, }, /* 374 */ - { 41, 22, 12, 0, 0, 41, 0, }, /* 375 */ - { 41, 18, 12, 0, 0, 41, 0, }, /* 376 */ - { 46, 7, 12, 0, 0, 46, 0, }, /* 377 */ - { 46, 14, 12, 0, 0, 46, 0, }, /* 378 */ - { 51, 7, 12, 0, 0, 51, 0, }, /* 379 */ - { 51, 12, 3, 0, 0, 51, 0, }, /* 380 */ - { 51, 10, 5, 0, 0, 51, 0, }, /* 381 */ - { 25, 7, 12, 0, 0, 25, 0, }, /* 382 */ - { 25, 12, 3, 0, 0, 25, 0, }, /* 383 */ - { 25, 10, 5, 0, 0, 25, 0, }, /* 384 */ - { 10, 21, 12, 0, 0, -127, 0, }, /* 385 */ - { 7, 7, 12, 0, 0, 7, 0, }, /* 386 */ - { 7, 12, 3, 0, 0, 7, 0, }, /* 387 */ - { 52, 7, 12, 0, 0, 52, 0, }, /* 388 */ - { 52, 12, 3, 0, 0, 52, 0, }, /* 389 */ - { 32, 7, 12, 0, 0, 32, 0, }, /* 390 */ - { 32, 12, 3, 0, 0, 32, 0, }, /* 391 */ - { 32, 10, 5, 0, 0, 32, 0, }, /* 392 */ - { 32, 21, 12, 0, 0, 32, 0, }, /* 393 */ - { 32, 6, 12, 0, 0, 32, 0, }, /* 394 */ - { 32, 23, 12, 0, 0, 32, 0, }, /* 395 */ - { 32, 13, 12, 0, 0, 32, 0, }, /* 396 */ - { 32, 15, 12, 0, 0, 32, 0, }, /* 397 */ - { 38, 21, 12, 0, 0, 38, 0, }, /* 398 */ - { 10, 21, 12, 0, 0, -79, 0, }, /* 399 */ - { 38, 17, 12, 0, 0, 38, 0, }, /* 400 */ - { 38, 12, 3, 0, 0, 38, 0, }, /* 401 */ - { 38, 1, 2, 0, 0, 38, 0, }, /* 402 */ - { 38, 13, 12, 0, 0, 38, 0, }, /* 403 */ - { 38, 7, 12, 0, 0, 38, 0, }, /* 404 */ - { 38, 6, 12, 0, 0, 38, 0, }, /* 405 */ - { 35, 7, 12, 0, 0, 35, 0, }, /* 406 */ - { 35, 12, 3, 0, 0, 35, 0, }, /* 407 */ - { 35, 10, 5, 0, 0, 35, 0, }, /* 408 */ - { 35, 26, 12, 0, 0, 35, 0, }, /* 409 */ - { 35, 21, 12, 0, 0, 35, 0, }, /* 410 */ - { 35, 13, 12, 0, 0, 35, 0, }, /* 411 */ - { 53, 7, 12, 0, 0, 53, 0, }, /* 412 */ - { 40, 7, 12, 0, 0, 40, 0, }, /* 413 */ - { 40, 13, 12, 0, 0, 40, 0, }, /* 414 */ - { 40, 15, 12, 0, 0, 40, 0, }, /* 415 */ - { 40, 26, 12, 0, 0, 40, 0, }, /* 416 */ - { 32, 26, 12, 0, 0, 32, 0, }, /* 417 */ - { 6, 7, 12, 0, 0, 6, 0, }, /* 418 */ - { 6, 12, 3, 0, 0, 6, 0, }, /* 419 */ - { 6, 10, 5, 0, 0, 6, 0, }, /* 420 */ - { 6, 21, 12, 0, 0, 6, 0, }, /* 421 */ - { 91, 7, 12, 0, 0, 91, 0, }, /* 422 */ - { 91, 10, 5, 0, 0, 91, 0, }, /* 423 */ - { 91, 12, 3, 0, 0, 91, 0, }, /* 424 */ - { 91, 10, 12, 0, 0, 91, 0, }, /* 425 */ - { 91, 13, 12, 0, 0, 91, 0, }, /* 426 */ - { 91, 21, 12, 0, 0, 91, 0, }, /* 427 */ - { 91, 6, 12, 0, 0, 91, 0, }, /* 428 */ - { 28, 11, 3, 0, 0, 28, 0, }, /* 429 */ - { 62, 12, 3, 0, 0, 62, 0, }, /* 430 */ - { 62, 10, 5, 0, 0, 62, 0, }, /* 431 */ - { 62, 7, 12, 0, 0, 62, 0, }, /* 432 */ - { 62, 10, 3, 0, 0, 62, 0, }, /* 433 */ - { 62, 13, 12, 0, 0, 62, 0, }, /* 434 */ - { 62, 21, 12, 0, 0, 62, 0, }, /* 435 */ - { 62, 26, 12, 0, 0, 62, 0, }, /* 436 */ - { 76, 12, 3, 0, 0, 76, 0, }, /* 437 */ - { 76, 10, 5, 0, 0, 76, 0, }, /* 438 */ - { 76, 7, 12, 0, 0, 76, 0, }, /* 439 */ - { 76, 13, 12, 0, 0, 76, 0, }, /* 440 */ - { 93, 7, 12, 0, 0, 93, 0, }, /* 441 */ - { 93, 12, 3, 0, 0, 93, 0, }, /* 442 */ - { 93, 10, 5, 0, 0, 93, 0, }, /* 443 */ - { 93, 21, 12, 0, 0, 93, 0, }, /* 444 */ - { 70, 7, 12, 0, 0, 70, 0, }, /* 445 */ - { 70, 10, 5, 0, 0, 70, 0, }, /* 446 */ - { 70, 12, 3, 0, 0, 70, 0, }, /* 447 */ - { 70, 21, 12, 0, 0, 70, 0, }, /* 448 */ - { 70, 13, 12, 0, 0, 70, 0, }, /* 449 */ - { 73, 13, 12, 0, 0, 73, 0, }, /* 450 */ - { 73, 7, 12, 0, 0, 73, 0, }, /* 451 */ - { 73, 6, 12, 0, 0, 73, 0, }, /* 452 */ - { 73, 21, 12, 0, 0, 73, 0, }, /* 453 */ - { 13, 5, 12, 63, -6222, 13, 0, }, /* 454 */ - { 13, 5, 12, 67, -6221, 13, 0, }, /* 455 */ - { 13, 5, 12, 71, -6212, 13, 0, }, /* 456 */ - { 13, 5, 12, 75, -6210, 13, 0, }, /* 457 */ - { 13, 5, 12, 79, -6210, 13, 0, }, /* 458 */ - { 13, 5, 12, 79, -6211, 13, 0, }, /* 459 */ - { 13, 5, 12, 84, -6204, 13, 0, }, /* 460 */ - { 13, 5, 12, 88, -6180, 13, 0, }, /* 461 */ - { 13, 5, 12, 108, 35267, 13, 0, }, /* 462 */ - { 17, 9, 12, 0, -3008, 17, 0, }, /* 463 */ - { 76, 21, 12, 0, 0, 76, 0, }, /* 464 */ - { 28, 12, 3, 0, 0, -122, 0, }, /* 465 */ - { 28, 12, 3, 0, 0, 15, 0, }, /* 466 */ - { 10, 21, 12, 0, 0, -40, 0, }, /* 467 */ - { 28, 12, 3, 0, 0, -16, 0, }, /* 468 */ - { 28, 12, 3, 0, 0, -46, 0, }, /* 469 */ - { 28, 12, 3, 0, 0, -157, 0, }, /* 470 */ - { 10, 10, 5, 0, 0, -16, 0, }, /* 471 */ - { 10, 7, 12, 0, 0, -43, 0, }, /* 472 */ - { 10, 7, 12, 0, 0, -16, 0, }, /* 473 */ - { 10, 7, 12, 0, 0, 15, 0, }, /* 474 */ - { 10, 7, 12, 0, 0, -172, 0, }, /* 475 */ - { 10, 7, 12, 0, 0, -40, 0, }, /* 476 */ - { 28, 12, 3, 0, 0, -106, 0, }, /* 477 */ - { 10, 10, 5, 0, 0, 3, 0, }, /* 478 */ - { 28, 12, 3, 0, 0, -40, 0, }, /* 479 */ - { 10, 7, 12, 0, 0, 150, 0, }, /* 480 */ - { 13, 5, 12, 0, 0, 13, 0, }, /* 481 */ - { 13, 6, 12, 0, 0, 13, 0, }, /* 482 */ - { 34, 5, 12, 0, 35332, 34, 0, }, /* 483 */ - { 34, 5, 12, 0, 3814, 34, 0, }, /* 484 */ - { 34, 5, 12, 0, 35384, 34, 0, }, /* 485 */ - { 28, 12, 3, 0, 0, -37, 0, }, /* 486 */ - { 28, 12, 3, 0, 0, 50, 0, }, /* 487 */ - { 34, 9, 12, 92, 1, 34, 0, }, /* 488 */ - { 34, 5, 12, 92, -1, 34, 0, }, /* 489 */ - { 34, 5, 12, 92, -58, 34, 0, }, /* 490 */ - { 34, 9, 12, 0, -7615, 34, 0, }, /* 491 */ - { 20, 5, 12, 0, 8, 20, 0, }, /* 492 */ - { 20, 9, 12, 0, -8, 20, 0, }, /* 493 */ - { 20, 5, 12, 0, 74, 20, 0, }, /* 494 */ - { 20, 5, 12, 0, 86, 20, 0, }, /* 495 */ - { 20, 5, 12, 0, 100, 20, 0, }, /* 496 */ - { 20, 5, 12, 0, 128, 20, 0, }, /* 497 */ - { 20, 5, 12, 0, 112, 20, 0, }, /* 498 */ - { 20, 5, 12, 0, 126, 20, 0, }, /* 499 */ - { 20, 8, 12, 0, -8, 20, 0, }, /* 500 */ - { 20, 5, 12, 0, 9, 20, 0, }, /* 501 */ - { 20, 9, 12, 0, -74, 20, 0, }, /* 502 */ - { 20, 8, 12, 0, -9, 20, 0, }, /* 503 */ - { 20, 5, 12, 21, -7173, 20, 0, }, /* 504 */ - { 20, 9, 12, 0, -86, 20, 0, }, /* 505 */ - { 20, 9, 12, 0, -100, 20, 0, }, /* 506 */ - { 20, 9, 12, 0, -112, 20, 0, }, /* 507 */ - { 20, 9, 12, 0, -128, 20, 0, }, /* 508 */ - { 20, 9, 12, 0, -126, 20, 0, }, /* 509 */ - { 28, 1, 3, 0, 0, 28, 0, }, /* 510 */ - { 28, 1, 13, 0, 0, 28, 0, }, /* 511 */ - { 10, 27, 2, 0, 0, 10, 0, }, /* 512 */ - { 10, 28, 2, 0, 0, 10, 0, }, /* 513 */ - { 10, 29, 12, 0, 0, -73, 0, }, /* 514 */ - { 10, 21, 14, 0, 0, 10, 0, }, /* 515 */ - { 0, 2, 2, 0, 0, 0, 0, }, /* 516 */ - { 28, 12, 3, 0, 0, -110, 0, }, /* 517 */ - { 10, 9, 12, 0, 0, 10, 0, }, /* 518 */ - { 10, 5, 12, 0, 0, 10, 0, }, /* 519 */ - { 20, 9, 12, 96, -7517, 20, 0, }, /* 520 */ - { 34, 9, 12, 100, -8383, 34, 0, }, /* 521 */ - { 34, 9, 12, 104, -8262, 34, 0, }, /* 522 */ - { 34, 9, 12, 0, 28, 34, 0, }, /* 523 */ - { 10, 7, 12, 0, 0, 10, 0, }, /* 524 */ - { 10, 5, 14, 0, 0, 10, 0, }, /* 525 */ - { 34, 5, 12, 0, -28, 34, 0, }, /* 526 */ - { 34, 14, 12, 0, 16, 34, 0, }, /* 527 */ - { 34, 14, 12, 0, -16, 34, 0, }, /* 528 */ - { 34, 14, 12, 0, 0, 34, 0, }, /* 529 */ - { 10, 25, 14, 0, 0, 10, 0, }, /* 530 */ - { 10, 26, 12, 0, 26, 10, 0, }, /* 531 */ - { 10, 26, 14, 0, 26, 10, 0, }, /* 532 */ - { 10, 26, 12, 0, -26, 10, 0, }, /* 533 */ - { 5, 26, 12, 0, 0, 5, 0, }, /* 534 */ - { 18, 9, 12, 0, 48, 18, 0, }, /* 535 */ - { 18, 5, 12, 0, -48, 18, 0, }, /* 536 */ - { 34, 9, 12, 0, -10743, 34, 0, }, /* 537 */ - { 34, 9, 12, 0, -3814, 34, 0, }, /* 538 */ - { 34, 9, 12, 0, -10727, 34, 0, }, /* 539 */ - { 34, 5, 12, 0, -10795, 34, 0, }, /* 540 */ - { 34, 5, 12, 0, -10792, 34, 0, }, /* 541 */ - { 34, 9, 12, 0, -10780, 34, 0, }, /* 542 */ - { 34, 9, 12, 0, -10749, 34, 0, }, /* 543 */ - { 34, 9, 12, 0, -10783, 34, 0, }, /* 544 */ - { 34, 9, 12, 0, -10782, 34, 0, }, /* 545 */ - { 34, 9, 12, 0, -10815, 34, 0, }, /* 546 */ - { 11, 5, 12, 0, 0, 11, 0, }, /* 547 */ - { 11, 26, 12, 0, 0, 11, 0, }, /* 548 */ - { 11, 12, 3, 0, 0, 11, 0, }, /* 549 */ - { 11, 21, 12, 0, 0, 11, 0, }, /* 550 */ - { 11, 15, 12, 0, 0, 11, 0, }, /* 551 */ - { 17, 5, 12, 0, -7264, 17, 0, }, /* 552 */ - { 59, 7, 12, 0, 0, 59, 0, }, /* 553 */ - { 59, 6, 12, 0, 0, 59, 0, }, /* 554 */ - { 59, 21, 12, 0, 0, 59, 0, }, /* 555 */ - { 59, 12, 3, 0, 0, 59, 0, }, /* 556 */ - { 13, 12, 3, 0, 0, 13, 0, }, /* 557 */ - { 10, 21, 12, 0, 0, -28, 0, }, /* 558 */ - { 23, 26, 12, 0, 0, 23, 0, }, /* 559 */ - { 10, 21, 12, 0, 0, -150, 0, }, /* 560 */ - { 10, 21, 12, 0, 0, -137, 0, }, /* 561 */ - { 23, 6, 12, 0, 0, 23, 0, }, /* 562 */ - { 10, 7, 12, 0, 0, 23, 0, }, /* 563 */ - { 23, 14, 12, 0, 0, 23, 0, }, /* 564 */ - { 10, 22, 12, 0, 0, -150, 0, }, /* 565 */ - { 10, 18, 12, 0, 0, -150, 0, }, /* 566 */ - { 10, 26, 12, 0, 0, -137, 0, }, /* 567 */ - { 10, 17, 12, 0, 0, -137, 0, }, /* 568 */ - { 10, 22, 12, 0, 0, -137, 0, }, /* 569 */ - { 10, 18, 12, 0, 0, -137, 0, }, /* 570 */ - { 28, 12, 3, 0, 0, -19, 0, }, /* 571 */ - { 24, 10, 3, 0, 0, 24, 0, }, /* 572 */ - { 10, 17, 14, 0, 0, -137, 0, }, /* 573 */ - { 10, 6, 12, 0, 0, -67, 0, }, /* 574 */ - { 10, 7, 12, 0, 0, -114, 0, }, /* 575 */ - { 10, 21, 14, 0, 0, -114, 0, }, /* 576 */ - { 10, 26, 12, 0, 0, 23, 0, }, /* 577 */ - { 27, 7, 12, 0, 0, 27, 0, }, /* 578 */ - { 28, 12, 3, 0, 0, -67, 0, }, /* 579 */ - { 10, 24, 12, 0, 0, -67, 0, }, /* 580 */ - { 27, 6, 12, 0, 0, 27, 0, }, /* 581 */ - { 10, 17, 12, 0, 0, -67, 0, }, /* 582 */ - { 30, 7, 12, 0, 0, 30, 0, }, /* 583 */ - { 30, 6, 12, 0, 0, 30, 0, }, /* 584 */ - { 4, 7, 12, 0, 0, 4, 0, }, /* 585 */ - { 24, 7, 12, 0, 0, 24, 0, }, /* 586 */ - { 10, 15, 12, 0, 0, 23, 0, }, /* 587 */ - { 24, 26, 12, 0, 0, 24, 0, }, /* 588 */ - { 10, 26, 14, 0, 0, 23, 0, }, /* 589 */ - { 30, 26, 12, 0, 0, 30, 0, }, /* 590 */ - { 23, 7, 12, 0, 0, 23, 0, }, /* 591 */ - { 61, 7, 12, 0, 0, 61, 0, }, /* 592 */ - { 61, 6, 12, 0, 0, 61, 0, }, /* 593 */ - { 61, 26, 12, 0, 0, 61, 0, }, /* 594 */ - { 86, 7, 12, 0, 0, 86, 0, }, /* 595 */ - { 86, 6, 12, 0, 0, 86, 0, }, /* 596 */ - { 86, 21, 12, 0, 0, 86, 0, }, /* 597 */ - { 77, 7, 12, 0, 0, 77, 0, }, /* 598 */ - { 77, 6, 12, 0, 0, 77, 0, }, /* 599 */ - { 77, 21, 12, 0, 0, 77, 0, }, /* 600 */ - { 77, 13, 12, 0, 0, 77, 0, }, /* 601 */ - { 13, 9, 12, 108, 1, 13, 0, }, /* 602 */ - { 13, 5, 12, 108, -35267, 13, 0, }, /* 603 */ - { 13, 7, 12, 0, 0, 13, 0, }, /* 604 */ - { 13, 21, 12, 0, 0, 13, 0, }, /* 605 */ - { 79, 7, 12, 0, 0, 79, 0, }, /* 606 */ - { 79, 14, 12, 0, 0, 79, 0, }, /* 607 */ - { 79, 12, 3, 0, 0, 79, 0, }, /* 608 */ - { 79, 21, 12, 0, 0, 79, 0, }, /* 609 */ - { 10, 24, 12, 0, 0, -64, 0, }, /* 610 */ - { 34, 9, 12, 0, -35332, 34, 0, }, /* 611 */ - { 34, 9, 12, 0, -42280, 34, 0, }, /* 612 */ - { 34, 5, 12, 0, 48, 34, 0, }, /* 613 */ - { 34, 9, 12, 0, -42308, 34, 0, }, /* 614 */ - { 34, 9, 12, 0, -42319, 34, 0, }, /* 615 */ - { 34, 9, 12, 0, -42315, 34, 0, }, /* 616 */ - { 34, 9, 12, 0, -42305, 34, 0, }, /* 617 */ - { 34, 9, 12, 0, -42258, 34, 0, }, /* 618 */ - { 34, 9, 12, 0, -42282, 34, 0, }, /* 619 */ - { 34, 9, 12, 0, -42261, 34, 0, }, /* 620 */ - { 34, 9, 12, 0, 928, 34, 0, }, /* 621 */ - { 34, 9, 12, 0, -48, 34, 0, }, /* 622 */ - { 34, 9, 12, 0, -42307, 34, 0, }, /* 623 */ - { 34, 9, 12, 0, -35384, 34, 0, }, /* 624 */ - { 49, 7, 12, 0, 0, 49, 0, }, /* 625 */ - { 49, 12, 3, 0, 0, 49, 0, }, /* 626 */ - { 49, 10, 5, 0, 0, 49, 0, }, /* 627 */ - { 49, 26, 12, 0, 0, 49, 0, }, /* 628 */ - { 10, 15, 12, 0, 0, -244, 0, }, /* 629 */ - { 10, 15, 12, 0, 0, -230, 0, }, /* 630 */ - { 10, 26, 12, 0, 0, -191, 0, }, /* 631 */ - { 10, 23, 12, 0, 0, -191, 0, }, /* 632 */ - { 65, 7, 12, 0, 0, 65, 0, }, /* 633 */ - { 65, 21, 12, 0, 0, 65, 0, }, /* 634 */ - { 75, 10, 5, 0, 0, 75, 0, }, /* 635 */ - { 75, 7, 12, 0, 0, 75, 0, }, /* 636 */ - { 75, 12, 3, 0, 0, 75, 0, }, /* 637 */ - { 75, 21, 12, 0, 0, 75, 0, }, /* 638 */ - { 75, 13, 12, 0, 0, 75, 0, }, /* 639 */ - { 15, 12, 3, 0, 0, -16, 0, }, /* 640 */ - { 15, 7, 12, 0, 0, -49, 0, }, /* 641 */ - { 69, 13, 12, 0, 0, 69, 0, }, /* 642 */ - { 69, 7, 12, 0, 0, 69, 0, }, /* 643 */ - { 69, 12, 3, 0, 0, 69, 0, }, /* 644 */ - { 10, 21, 12, 0, 0, -118, 0, }, /* 645 */ - { 69, 21, 12, 0, 0, 69, 0, }, /* 646 */ - { 74, 7, 12, 0, 0, 74, 0, }, /* 647 */ - { 74, 12, 3, 0, 0, 74, 0, }, /* 648 */ - { 74, 10, 5, 0, 0, 74, 0, }, /* 649 */ - { 74, 21, 12, 0, 0, 74, 0, }, /* 650 */ - { 84, 12, 3, 0, 0, 84, 0, }, /* 651 */ - { 84, 10, 5, 0, 0, 84, 0, }, /* 652 */ - { 84, 7, 12, 0, 0, 84, 0, }, /* 653 */ - { 84, 21, 12, 0, 0, 84, 0, }, /* 654 */ - { 10, 6, 12, 0, 0, -22, 0, }, /* 655 */ - { 84, 13, 12, 0, 0, 84, 0, }, /* 656 */ - { 39, 6, 12, 0, 0, 39, 0, }, /* 657 */ - { 68, 7, 12, 0, 0, 68, 0, }, /* 658 */ - { 68, 12, 3, 0, 0, 68, 0, }, /* 659 */ - { 68, 10, 5, 0, 0, 68, 0, }, /* 660 */ - { 68, 13, 12, 0, 0, 68, 0, }, /* 661 */ - { 68, 21, 12, 0, 0, 68, 0, }, /* 662 */ - { 92, 7, 12, 0, 0, 92, 0, }, /* 663 */ - { 92, 12, 3, 0, 0, 92, 0, }, /* 664 */ - { 92, 6, 12, 0, 0, 92, 0, }, /* 665 */ - { 92, 21, 12, 0, 0, 92, 0, }, /* 666 */ - { 87, 7, 12, 0, 0, 87, 0, }, /* 667 */ - { 87, 10, 5, 0, 0, 87, 0, }, /* 668 */ - { 87, 12, 3, 0, 0, 87, 0, }, /* 669 */ - { 87, 21, 12, 0, 0, 87, 0, }, /* 670 */ - { 87, 6, 12, 0, 0, 87, 0, }, /* 671 */ - { 34, 5, 12, 0, -928, 34, 0, }, /* 672 */ - { 9, 5, 12, 0, -38864, 9, 0, }, /* 673 */ - { 87, 13, 12, 0, 0, 87, 0, }, /* 674 */ - { 24, 7, 9, 0, 0, 24, 0, }, /* 675 */ - { 24, 7, 10, 0, 0, 24, 0, }, /* 676 */ - { 0, 4, 12, 0, 0, 0, 0, }, /* 677 */ - { 0, 3, 12, 0, 0, 0, 0, }, /* 678 */ - { 26, 25, 12, 0, 0, 26, 0, }, /* 679 */ - { 10, 18, 12, 0, 0, -7, 0, }, /* 680 */ - { 10, 22, 12, 0, 0, -7, 0, }, /* 681 */ - { 1, 7, 12, 0, 0, -13, 0, }, /* 682 */ - { 1, 26, 12, 0, 0, -13, 0, }, /* 683 */ - { 10, 6, 3, 0, 0, -67, 0, }, /* 684 */ - { 36, 7, 12, 0, 0, 36, 0, }, /* 685 */ - { 10, 21, 12, 0, 0, -98, 0, }, /* 686 */ - { 10, 21, 12, 0, 0, -25, 0, }, /* 687 */ - { 10, 15, 12, 0, 0, -102, 0, }, /* 688 */ - { 10, 26, 12, 0, 0, -25, 0, }, /* 689 */ - { 20, 14, 12, 0, 0, 20, 0, }, /* 690 */ - { 20, 15, 12, 0, 0, 20, 0, }, /* 691 */ - { 20, 26, 12, 0, 0, 20, 0, }, /* 692 */ - { 71, 7, 12, 0, 0, 71, 0, }, /* 693 */ - { 67, 7, 12, 0, 0, 67, 0, }, /* 694 */ - { 28, 12, 3, 0, 0, -1, 0, }, /* 695 */ - { 10, 15, 12, 0, 0, -1, 0, }, /* 696 */ - { 42, 7, 12, 0, 0, 42, 0, }, /* 697 */ - { 42, 15, 12, 0, 0, 42, 0, }, /* 698 */ - { 19, 7, 12, 0, 0, 19, 0, }, /* 699 */ - { 19, 14, 12, 0, 0, 19, 0, }, /* 700 */ - { 118, 7, 12, 0, 0, 118, 0, }, /* 701 */ - { 118, 12, 3, 0, 0, 118, 0, }, /* 702 */ - { 60, 7, 12, 0, 0, 60, 0, }, /* 703 */ - { 60, 21, 12, 0, 0, 60, 0, }, /* 704 */ - { 43, 7, 12, 0, 0, 43, 0, }, /* 705 */ - { 43, 21, 12, 0, 0, 43, 0, }, /* 706 */ - { 43, 14, 12, 0, 0, 43, 0, }, /* 707 */ - { 14, 9, 12, 0, 40, 14, 0, }, /* 708 */ - { 14, 5, 12, 0, -40, 14, 0, }, /* 709 */ - { 47, 7, 12, 0, 0, 47, 0, }, /* 710 */ - { 45, 7, 12, 0, 0, 45, 0, }, /* 711 */ - { 45, 13, 12, 0, 0, 45, 0, }, /* 712 */ - { 136, 9, 12, 0, 40, 136, 0, }, /* 713 */ - { 136, 5, 12, 0, -40, 136, 0, }, /* 714 */ - { 106, 7, 12, 0, 0, 106, 0, }, /* 715 */ - { 104, 7, 12, 0, 0, 104, 0, }, /* 716 */ - { 104, 21, 12, 0, 0, 104, 0, }, /* 717 */ - { 161, 9, 12, 0, 39, 161, 0, }, /* 718 */ - { 161, 5, 12, 0, -39, 161, 0, }, /* 719 */ - { 110, 7, 12, 0, 0, 110, 0, }, /* 720 */ - { 12, 7, 12, 0, 0, 12, 0, }, /* 721 */ - { 81, 7, 12, 0, 0, 81, 0, }, /* 722 */ - { 81, 21, 12, 0, 0, 81, 0, }, /* 723 */ - { 81, 15, 12, 0, 0, 81, 0, }, /* 724 */ - { 120, 7, 12, 0, 0, 120, 0, }, /* 725 */ - { 120, 26, 12, 0, 0, 120, 0, }, /* 726 */ - { 120, 15, 12, 0, 0, 120, 0, }, /* 727 */ - { 116, 7, 12, 0, 0, 116, 0, }, /* 728 */ - { 116, 15, 12, 0, 0, 116, 0, }, /* 729 */ - { 128, 7, 12, 0, 0, 128, 0, }, /* 730 */ - { 128, 15, 12, 0, 0, 128, 0, }, /* 731 */ - { 66, 7, 12, 0, 0, 66, 0, }, /* 732 */ - { 66, 15, 12, 0, 0, 66, 0, }, /* 733 */ - { 66, 21, 12, 0, 0, 66, 0, }, /* 734 */ - { 72, 7, 12, 0, 0, 72, 0, }, /* 735 */ - { 72, 21, 12, 0, 0, 72, 0, }, /* 736 */ - { 98, 7, 12, 0, 0, 98, 0, }, /* 737 */ - { 97, 7, 12, 0, 0, 97, 0, }, /* 738 */ - { 97, 15, 12, 0, 0, 97, 0, }, /* 739 */ - { 31, 7, 12, 0, 0, 31, 0, }, /* 740 */ - { 31, 12, 3, 0, 0, 31, 0, }, /* 741 */ - { 31, 15, 12, 0, 0, 31, 0, }, /* 742 */ - { 31, 21, 12, 0, 0, 31, 0, }, /* 743 */ - { 88, 7, 12, 0, 0, 88, 0, }, /* 744 */ - { 88, 15, 12, 0, 0, 88, 0, }, /* 745 */ - { 88, 21, 12, 0, 0, 88, 0, }, /* 746 */ - { 117, 7, 12, 0, 0, 117, 0, }, /* 747 */ - { 117, 15, 12, 0, 0, 117, 0, }, /* 748 */ - { 112, 7, 12, 0, 0, 112, 0, }, /* 749 */ - { 112, 26, 12, 0, 0, 112, 0, }, /* 750 */ - { 112, 12, 3, 0, 0, 112, 0, }, /* 751 */ - { 112, 15, 12, 0, 0, 112, 0, }, /* 752 */ - { 112, 21, 12, 0, 0, 112, 0, }, /* 753 */ - { 112, 21, 12, 0, 0, -76, 0, }, /* 754 */ - { 78, 7, 12, 0, 0, 78, 0, }, /* 755 */ - { 78, 21, 12, 0, 0, 78, 0, }, /* 756 */ - { 83, 7, 12, 0, 0, 83, 0, }, /* 757 */ - { 83, 15, 12, 0, 0, 83, 0, }, /* 758 */ - { 82, 7, 12, 0, 0, 82, 0, }, /* 759 */ - { 82, 15, 12, 0, 0, 82, 0, }, /* 760 */ - { 121, 7, 12, 0, 0, 121, 0, }, /* 761 */ - { 121, 21, 12, 0, 0, 121, 0, }, /* 762 */ - { 121, 15, 12, 0, 0, 121, 0, }, /* 763 */ - { 89, 7, 12, 0, 0, 89, 0, }, /* 764 */ - { 130, 9, 12, 0, 64, 130, 0, }, /* 765 */ - { 130, 5, 12, 0, -64, 130, 0, }, /* 766 */ - { 130, 15, 12, 0, 0, 130, 0, }, /* 767 */ - { 144, 7, 12, 0, 0, 144, 0, }, /* 768 */ - { 144, 12, 3, 0, 0, 144, 0, }, /* 769 */ - { 144, 13, 12, 0, 0, 144, 0, }, /* 770 */ - { 1, 15, 12, 0, 0, 1, 0, }, /* 771 */ - { 156, 7, 12, 0, 0, 156, 0, }, /* 772 */ - { 156, 12, 3, 0, 0, 156, 0, }, /* 773 */ - { 156, 17, 12, 0, 0, 156, 0, }, /* 774 */ - { 147, 7, 12, 0, 0, 147, 0, }, /* 775 */ - { 147, 15, 12, 0, 0, 147, 0, }, /* 776 */ - { 148, 7, 12, 0, 0, 148, 0, }, /* 777 */ - { 148, 12, 3, 0, 0, 148, 0, }, /* 778 */ - { 148, 15, 12, 0, 0, 148, 0, }, /* 779 */ - { 148, 21, 12, 0, 0, 148, 0, }, /* 780 */ - { 158, 7, 12, 0, 0, 158, 0, }, /* 781 */ - { 158, 12, 3, 0, 0, 158, 0, }, /* 782 */ - { 158, 21, 12, 0, 0, 158, 0, }, /* 783 */ - { 153, 7, 12, 0, 0, 153, 0, }, /* 784 */ - { 153, 15, 12, 0, 0, 153, 0, }, /* 785 */ - { 149, 7, 12, 0, 0, 149, 0, }, /* 786 */ - { 94, 10, 5, 0, 0, 94, 0, }, /* 787 */ - { 94, 12, 3, 0, 0, 94, 0, }, /* 788 */ - { 94, 7, 12, 0, 0, 94, 0, }, /* 789 */ - { 94, 21, 12, 0, 0, 94, 0, }, /* 790 */ - { 94, 15, 12, 0, 0, 94, 0, }, /* 791 */ - { 94, 13, 12, 0, 0, 94, 0, }, /* 792 */ - { 85, 12, 3, 0, 0, 85, 0, }, /* 793 */ - { 85, 10, 5, 0, 0, 85, 0, }, /* 794 */ - { 85, 7, 12, 0, 0, 85, 0, }, /* 795 */ - { 85, 21, 12, 0, 0, 85, 0, }, /* 796 */ - { 85, 1, 4, 0, 0, 85, 0, }, /* 797 */ - { 101, 7, 12, 0, 0, 101, 0, }, /* 798 */ - { 101, 13, 12, 0, 0, 101, 0, }, /* 799 */ - { 96, 12, 3, 0, 0, 96, 0, }, /* 800 */ - { 96, 7, 12, 0, 0, 96, 0, }, /* 801 */ - { 96, 10, 5, 0, 0, 96, 0, }, /* 802 */ - { 96, 13, 12, 0, 0, 96, 0, }, /* 803 */ - { 96, 21, 12, 0, 0, 96, 0, }, /* 804 */ - { 111, 7, 12, 0, 0, 111, 0, }, /* 805 */ - { 111, 12, 3, 0, 0, 111, 0, }, /* 806 */ - { 111, 21, 12, 0, 0, 111, 0, }, /* 807 */ - { 100, 12, 3, 0, 0, 100, 0, }, /* 808 */ - { 100, 10, 5, 0, 0, 100, 0, }, /* 809 */ - { 100, 7, 12, 0, 0, 100, 0, }, /* 810 */ - { 100, 7, 4, 0, 0, 100, 0, }, /* 811 */ - { 100, 21, 12, 0, 0, 100, 0, }, /* 812 */ - { 100, 13, 12, 0, 0, 100, 0, }, /* 813 */ - { 48, 15, 12, 0, 0, 48, 0, }, /* 814 */ - { 108, 7, 12, 0, 0, 108, 0, }, /* 815 */ - { 108, 10, 5, 0, 0, 108, 0, }, /* 816 */ - { 108, 12, 3, 0, 0, 108, 0, }, /* 817 */ - { 108, 21, 12, 0, 0, 108, 0, }, /* 818 */ - { 129, 7, 12, 0, 0, 129, 0, }, /* 819 */ - { 129, 21, 12, 0, 0, 129, 0, }, /* 820 */ - { 109, 7, 12, 0, 0, 109, 0, }, /* 821 */ - { 109, 12, 3, 0, 0, 109, 0, }, /* 822 */ - { 109, 10, 5, 0, 0, 109, 0, }, /* 823 */ - { 109, 13, 12, 0, 0, 109, 0, }, /* 824 */ - { 107, 12, 3, 0, 0, 107, 0, }, /* 825 */ - { 107, 12, 3, 0, 0, -55, 0, }, /* 826 */ - { 107, 10, 5, 0, 0, 107, 0, }, /* 827 */ - { 107, 10, 5, 0, 0, -55, 0, }, /* 828 */ - { 107, 7, 12, 0, 0, 107, 0, }, /* 829 */ - { 28, 12, 3, 0, 0, -55, 0, }, /* 830 */ - { 107, 10, 3, 0, 0, 107, 0, }, /* 831 */ - { 135, 7, 12, 0, 0, 135, 0, }, /* 832 */ - { 135, 10, 5, 0, 0, 135, 0, }, /* 833 */ - { 135, 12, 3, 0, 0, 135, 0, }, /* 834 */ - { 135, 21, 12, 0, 0, 135, 0, }, /* 835 */ - { 135, 13, 12, 0, 0, 135, 0, }, /* 836 */ - { 124, 7, 12, 0, 0, 124, 0, }, /* 837 */ - { 124, 10, 3, 0, 0, 124, 0, }, /* 838 */ - { 124, 10, 5, 0, 0, 124, 0, }, /* 839 */ - { 124, 12, 3, 0, 0, 124, 0, }, /* 840 */ - { 124, 21, 12, 0, 0, 124, 0, }, /* 841 */ - { 124, 13, 12, 0, 0, 124, 0, }, /* 842 */ - { 123, 7, 12, 0, 0, 123, 0, }, /* 843 */ - { 123, 10, 3, 0, 0, 123, 0, }, /* 844 */ - { 123, 10, 5, 0, 0, 123, 0, }, /* 845 */ - { 123, 12, 3, 0, 0, 123, 0, }, /* 846 */ - { 123, 21, 12, 0, 0, 123, 0, }, /* 847 */ - { 114, 7, 12, 0, 0, 114, 0, }, /* 848 */ - { 114, 10, 5, 0, 0, 114, 0, }, /* 849 */ - { 114, 12, 3, 0, 0, 114, 0, }, /* 850 */ - { 114, 21, 12, 0, 0, 114, 0, }, /* 851 */ - { 114, 13, 12, 0, 0, 114, 0, }, /* 852 */ - { 102, 7, 12, 0, 0, 102, 0, }, /* 853 */ - { 102, 12, 3, 0, 0, 102, 0, }, /* 854 */ - { 102, 10, 5, 0, 0, 102, 0, }, /* 855 */ - { 102, 21, 12, 0, 0, 102, 0, }, /* 856 */ - { 102, 13, 12, 0, 0, 102, 0, }, /* 857 */ - { 126, 7, 12, 0, 0, 126, 0, }, /* 858 */ - { 126, 12, 3, 0, 0, 126, 0, }, /* 859 */ - { 126, 10, 12, 0, 0, 126, 0, }, /* 860 */ - { 126, 10, 5, 0, 0, 126, 0, }, /* 861 */ - { 126, 13, 12, 0, 0, 126, 0, }, /* 862 */ - { 126, 15, 12, 0, 0, 126, 0, }, /* 863 */ - { 126, 21, 12, 0, 0, 126, 0, }, /* 864 */ - { 126, 26, 12, 0, 0, 126, 0, }, /* 865 */ - { 142, 7, 12, 0, 0, 142, 0, }, /* 866 */ - { 142, 10, 5, 0, 0, 142, 0, }, /* 867 */ - { 142, 12, 3, 0, 0, 142, 0, }, /* 868 */ - { 142, 21, 12, 0, 0, 142, 0, }, /* 869 */ - { 125, 9, 12, 0, 32, 125, 0, }, /* 870 */ - { 125, 5, 12, 0, -32, 125, 0, }, /* 871 */ - { 125, 13, 12, 0, 0, 125, 0, }, /* 872 */ - { 125, 15, 12, 0, 0, 125, 0, }, /* 873 */ - { 125, 7, 12, 0, 0, 125, 0, }, /* 874 */ - { 154, 7, 12, 0, 0, 154, 0, }, /* 875 */ - { 154, 10, 3, 0, 0, 154, 0, }, /* 876 */ - { 154, 10, 5, 0, 0, 154, 0, }, /* 877 */ - { 154, 12, 3, 0, 0, 154, 0, }, /* 878 */ - { 154, 7, 4, 0, 0, 154, 0, }, /* 879 */ - { 154, 21, 12, 0, 0, 154, 0, }, /* 880 */ - { 154, 13, 12, 0, 0, 154, 0, }, /* 881 */ - { 150, 7, 12, 0, 0, 150, 0, }, /* 882 */ - { 150, 10, 5, 0, 0, 150, 0, }, /* 883 */ - { 150, 12, 3, 0, 0, 150, 0, }, /* 884 */ - { 150, 21, 12, 0, 0, 150, 0, }, /* 885 */ - { 141, 7, 12, 0, 0, 141, 0, }, /* 886 */ - { 141, 12, 3, 0, 0, 141, 0, }, /* 887 */ - { 141, 10, 5, 0, 0, 141, 0, }, /* 888 */ - { 141, 7, 4, 0, 0, 141, 0, }, /* 889 */ - { 141, 21, 12, 0, 0, 141, 0, }, /* 890 */ - { 140, 7, 12, 0, 0, 140, 0, }, /* 891 */ - { 140, 12, 3, 0, 0, 140, 0, }, /* 892 */ - { 140, 10, 5, 0, 0, 140, 0, }, /* 893 */ - { 140, 7, 4, 0, 0, 140, 0, }, /* 894 */ - { 140, 21, 12, 0, 0, 140, 0, }, /* 895 */ - { 122, 7, 12, 0, 0, 122, 0, }, /* 896 */ - { 133, 7, 12, 0, 0, 133, 0, }, /* 897 */ - { 133, 10, 5, 0, 0, 133, 0, }, /* 898 */ - { 133, 12, 3, 0, 0, 133, 0, }, /* 899 */ - { 133, 21, 12, 0, 0, 133, 0, }, /* 900 */ - { 133, 13, 12, 0, 0, 133, 0, }, /* 901 */ - { 133, 15, 12, 0, 0, 133, 0, }, /* 902 */ - { 134, 21, 12, 0, 0, 134, 0, }, /* 903 */ - { 134, 7, 12, 0, 0, 134, 0, }, /* 904 */ - { 134, 12, 3, 0, 0, 134, 0, }, /* 905 */ - { 134, 10, 5, 0, 0, 134, 0, }, /* 906 */ - { 138, 7, 12, 0, 0, 138, 0, }, /* 907 */ - { 138, 12, 3, 0, 0, 138, 0, }, /* 908 */ - { 138, 7, 4, 0, 0, 138, 0, }, /* 909 */ - { 138, 13, 12, 0, 0, 138, 0, }, /* 910 */ - { 143, 7, 12, 0, 0, 143, 0, }, /* 911 */ - { 143, 10, 5, 0, 0, 143, 0, }, /* 912 */ - { 143, 12, 3, 0, 0, 143, 0, }, /* 913 */ - { 143, 13, 12, 0, 0, 143, 0, }, /* 914 */ - { 145, 7, 12, 0, 0, 145, 0, }, /* 915 */ - { 145, 12, 3, 0, 0, 145, 0, }, /* 916 */ - { 145, 10, 5, 0, 0, 145, 0, }, /* 917 */ - { 145, 21, 12, 0, 0, 145, 0, }, /* 918 */ - { 54, 15, 12, 0, 0, 54, 0, }, /* 919 */ - { 54, 21, 12, 0, 0, 54, 0, }, /* 920 */ - { 63, 7, 12, 0, 0, 63, 0, }, /* 921 */ - { 63, 14, 12, 0, 0, 63, 0, }, /* 922 */ - { 63, 21, 12, 0, 0, 63, 0, }, /* 923 */ - { 157, 7, 12, 0, 0, 157, 0, }, /* 924 */ - { 157, 21, 12, 0, 0, 157, 0, }, /* 925 */ - { 80, 7, 12, 0, 0, 80, 0, }, /* 926 */ - { 80, 1, 2, 0, 0, 80, 0, }, /* 927 */ - { 127, 7, 12, 0, 0, 127, 0, }, /* 928 */ - { 115, 7, 12, 0, 0, 115, 0, }, /* 929 */ - { 115, 13, 12, 0, 0, 115, 0, }, /* 930 */ - { 115, 21, 12, 0, 0, 115, 0, }, /* 931 */ - { 159, 7, 12, 0, 0, 159, 0, }, /* 932 */ - { 159, 13, 12, 0, 0, 159, 0, }, /* 933 */ - { 103, 7, 12, 0, 0, 103, 0, }, /* 934 */ - { 103, 12, 3, 0, 0, 103, 0, }, /* 935 */ - { 103, 21, 12, 0, 0, 103, 0, }, /* 936 */ - { 119, 7, 12, 0, 0, 119, 0, }, /* 937 */ - { 119, 12, 3, 0, 0, 119, 0, }, /* 938 */ - { 119, 21, 12, 0, 0, 119, 0, }, /* 939 */ - { 119, 26, 12, 0, 0, 119, 0, }, /* 940 */ - { 119, 6, 12, 0, 0, 119, 0, }, /* 941 */ - { 119, 13, 12, 0, 0, 119, 0, }, /* 942 */ - { 119, 15, 12, 0, 0, 119, 0, }, /* 943 */ - { 146, 9, 12, 0, 32, 146, 0, }, /* 944 */ - { 146, 5, 12, 0, -32, 146, 0, }, /* 945 */ - { 146, 15, 12, 0, 0, 146, 0, }, /* 946 */ - { 146, 21, 12, 0, 0, 146, 0, }, /* 947 */ - { 99, 7, 12, 0, 0, 99, 0, }, /* 948 */ - { 99, 12, 3, 0, 0, 99, 0, }, /* 949 */ - { 99, 10, 5, 0, 0, 99, 0, }, /* 950 */ - { 99, 6, 12, 0, 0, 99, 0, }, /* 951 */ - { 137, 6, 12, 0, 0, 137, 0, }, /* 952 */ - { 139, 6, 12, 0, 0, 139, 0, }, /* 953 */ - { 23, 21, 12, 0, 0, 23, 0, }, /* 954 */ - { 155, 12, 3, 0, 0, 155, 0, }, /* 955 */ - { 23, 10, 5, 0, 0, 23, 0, }, /* 956 */ - { 137, 7, 12, 0, 0, 137, 0, }, /* 957 */ - { 155, 7, 12, 0, 0, 155, 0, }, /* 958 */ - { 139, 7, 12, 0, 0, 139, 0, }, /* 959 */ - { 105, 7, 12, 0, 0, 105, 0, }, /* 960 */ - { 105, 26, 12, 0, 0, 105, 0, }, /* 961 */ - { 105, 12, 3, 0, 0, 105, 0, }, /* 962 */ - { 105, 21, 12, 0, 0, 105, 0, }, /* 963 */ - { 10, 1, 2, 0, 0, 105, 0, }, /* 964 */ - { 10, 10, 3, 0, 0, 10, 0, }, /* 965 */ - { 10, 10, 5, 0, 0, 10, 0, }, /* 966 */ - { 20, 12, 3, 0, 0, 20, 0, }, /* 967 */ - { 131, 26, 12, 0, 0, 131, 0, }, /* 968 */ - { 131, 12, 3, 0, 0, 131, 0, }, /* 969 */ - { 131, 21, 12, 0, 0, 131, 0, }, /* 970 */ - { 18, 12, 3, 0, 0, 18, 0, }, /* 971 */ - { 151, 7, 12, 0, 0, 151, 0, }, /* 972 */ - { 151, 12, 3, 0, 0, 151, 0, }, /* 973 */ - { 151, 6, 12, 0, 0, 151, 0, }, /* 974 */ - { 151, 13, 12, 0, 0, 151, 0, }, /* 975 */ - { 151, 26, 12, 0, 0, 151, 0, }, /* 976 */ - { 160, 7, 12, 0, 0, 160, 0, }, /* 977 */ - { 160, 12, 3, 0, 0, 160, 0, }, /* 978 */ - { 152, 7, 12, 0, 0, 152, 0, }, /* 979 */ - { 152, 12, 3, 0, 0, 152, 0, }, /* 980 */ - { 152, 13, 12, 0, 0, 152, 0, }, /* 981 */ - { 152, 23, 12, 0, 0, 152, 0, }, /* 982 */ - { 113, 7, 12, 0, 0, 113, 0, }, /* 983 */ - { 113, 15, 12, 0, 0, 113, 0, }, /* 984 */ - { 113, 12, 3, 0, 0, 113, 0, }, /* 985 */ - { 132, 9, 12, 0, 34, 132, 0, }, /* 986 */ - { 132, 5, 12, 0, -34, 132, 0, }, /* 987 */ - { 132, 12, 3, 0, 0, 132, 0, }, /* 988 */ - { 132, 6, 12, 0, 0, 132, 0, }, /* 989 */ - { 132, 13, 12, 0, 0, 132, 0, }, /* 990 */ - { 132, 21, 12, 0, 0, 132, 0, }, /* 991 */ - { 0, 2, 14, 0, 0, 0, 0, }, /* 992 */ - { 10, 26, 11, 0, 0, 10, 0, }, /* 993 */ - { 27, 26, 12, 0, 0, 27, 0, }, /* 994 */ - { 10, 24, 3, 0, 0, 10, 0, }, /* 995 */ - { 10, 1, 3, 0, 0, 10, 0, }, /* 996 */ +offset to multichar other cases or zero (8 bits), offset to other case or zero +(32 bits, signed), bidi class (5 bits) and script extension (11 bits) packed +into a 16-bit field, and offset in binary properties table (16 bits). */ + +const ucd_record PRIV(ucd_records)[] = { /* 16908 bytes, record size 12 */ + { 69, 0, 2, 0, 0, 6144, 2, }, /* 0 */ + { 69, 0, 2, 0, 0, 43008, 4, }, /* 1 */ + { 69, 0, 1, 0, 0, 4096, 4, }, /* 2 */ + { 69, 0, 2, 0, 0, 45056, 4, }, /* 3 */ + { 69, 0, 0, 0, 0, 4096, 4, }, /* 4 */ + { 69, 0, 2, 0, 0, 4096, 2, }, /* 5 */ + { 69, 0, 2, 0, 0, 43008, 2, }, /* 6 */ + { 69, 29, 12, 0, 0, 45056, 6, }, /* 7 */ + { 69, 21, 12, 0, 0, 28672, 8, }, /* 8 */ + { 69, 21, 12, 0, 0, 28672, 10, }, /* 9 */ + { 69, 21, 12, 0, 0, 14336, 12, }, /* 10 */ + { 69, 23, 12, 0, 0, 14336, 14, }, /* 11 */ + { 69, 21, 12, 0, 0, 14336, 14, }, /* 12 */ + { 69, 21, 12, 0, 0, 28672, 14, }, /* 13 */ + { 69, 21, 12, 0, 0, 28672, 16, }, /* 14 */ + { 69, 22, 12, 0, 0, 28672, 18, }, /* 15 */ + { 69, 18, 12, 0, 0, 28672, 18, }, /* 16 */ + { 69, 21, 12, 0, 0, 28672, 12, }, /* 17 */ + { 69, 25, 12, 0, 0, 12288, 20, }, /* 18 */ + { 69, 21, 12, 0, 0, 8192, 22, }, /* 19 */ + { 69, 17, 12, 0, 0, 12288, 24, }, /* 20 */ + { 69, 21, 12, 0, 0, 8192, 26, }, /* 21 */ + { 69, 21, 12, 0, 0, 8192, 14, }, /* 22 */ + { 69, 13, 12, 0, 0, 10240, 28, }, /* 23 */ + { 69, 21, 12, 0, 0, 8192, 30, }, /* 24 */ + { 69, 21, 12, 0, 0, 28672, 22, }, /* 25 */ + { 69, 25, 12, 0, 0, 28672, 32, }, /* 26 */ + { 69, 25, 12, 0, 0, 28672, 20, }, /* 27 */ + { 0, 9, 12, 0, 32, 18432, 34, }, /* 28 */ + { 0, 9, 12, 0, 32, 18432, 36, }, /* 29 */ + { 0, 9, 12, 100, 32, 18432, 36, }, /* 30 */ + { 0, 9, 12, 1, 32, 18432, 36, }, /* 31 */ + { 69, 24, 12, 0, 0, 28672, 38, }, /* 32 */ + { 69, 16, 12, 0, 0, 28672, 40, }, /* 33 */ + { 69, 24, 12, 0, 0, 28672, 42, }, /* 34 */ + { 0, 5, 12, 0, -32, 18432, 44, }, /* 35 */ + { 0, 5, 12, 0, -32, 18432, 46, }, /* 36 */ + { 0, 5, 12, 0, -32, 18432, 48, }, /* 37 */ + { 0, 5, 12, 100, -32, 18432, 46, }, /* 38 */ + { 0, 5, 12, 1, -32, 18432, 46, }, /* 39 */ + { 69, 0, 2, 0, 0, 6144, 0, }, /* 40 */ + { 69, 0, 2, 0, 0, 4096, 50, }, /* 41 */ + { 69, 29, 12, 0, 0, 8192, 52, }, /* 42 */ + { 69, 21, 12, 0, 0, 28672, 54, }, /* 43 */ + { 69, 23, 12, 0, 0, 14336, 54, }, /* 44 */ + { 69, 26, 12, 0, 0, 28672, 54, }, /* 45 */ + { 69, 24, 12, 0, 0, 28672, 56, }, /* 46 */ + { 69, 26, 14, 0, 0, 28672, 58, }, /* 47 */ + { 0, 7, 12, 0, 0, 18432, 60, }, /* 48 */ + { 69, 20, 12, 0, 0, 28672, 62, }, /* 49 */ + { 69, 25, 12, 0, 0, 28672, 64, }, /* 50 */ + { 69, 1, 2, 0, 0, 6144, 66, }, /* 51 */ + { 69, 26, 12, 0, 0, 14336, 54, }, /* 52 */ + { 69, 25, 12, 0, 0, 14336, 64, }, /* 53 */ + { 69, 15, 12, 0, 0, 10240, 68, }, /* 54 */ + { 69, 5, 12, 26, 775, 18432, 70, }, /* 55 */ + { 69, 21, 12, 0, 0, 28672, 72, }, /* 56 */ + { 69, 19, 12, 0, 0, 28672, 62, }, /* 57 */ + { 69, 15, 12, 0, 0, 28672, 68, }, /* 58 */ + { 0, 9, 12, 0, 32, 18432, 74, }, /* 59 */ + { 0, 9, 12, 104, 32, 18432, 74, }, /* 60 */ + { 0, 5, 12, 0, 7615, 18432, 70, }, /* 61 */ + { 0, 5, 12, 0, -32, 18432, 76, }, /* 62 */ + { 0, 5, 12, 104, -32, 18432, 76, }, /* 63 */ + { 0, 5, 12, 0, 121, 18432, 76, }, /* 64 */ + { 0, 9, 12, 0, 1, 18432, 74, }, /* 65 */ + { 0, 5, 12, 0, -1, 18432, 76, }, /* 66 */ + { 0, 5, 12, 0, -1, 18432, 78, }, /* 67 */ + { 0, 9, 12, 0, 0, 18432, 74, }, /* 68 */ + { 0, 5, 12, 0, 0, 18432, 76, }, /* 69 */ + { 0, 5, 12, 0, 0, 18432, 60, }, /* 70 */ + { 0, 5, 12, 0, 0, 18432, 80, }, /* 71 */ + { 0, 9, 12, 0, -121, 18432, 74, }, /* 72 */ + { 0, 5, 12, 1, -268, 18432, 70, }, /* 73 */ + { 0, 5, 12, 0, 195, 18432, 76, }, /* 74 */ + { 0, 9, 12, 0, 210, 18432, 74, }, /* 75 */ + { 0, 9, 12, 0, 206, 18432, 74, }, /* 76 */ + { 0, 9, 12, 0, 205, 18432, 74, }, /* 77 */ + { 0, 9, 12, 0, 79, 18432, 74, }, /* 78 */ + { 0, 9, 12, 0, 202, 18432, 74, }, /* 79 */ + { 0, 9, 12, 0, 203, 18432, 74, }, /* 80 */ + { 0, 9, 12, 0, 207, 18432, 74, }, /* 81 */ + { 0, 5, 12, 0, 97, 18432, 76, }, /* 82 */ + { 0, 9, 12, 0, 211, 18432, 74, }, /* 83 */ + { 0, 9, 12, 0, 209, 18432, 74, }, /* 84 */ + { 0, 5, 12, 0, 163, 18432, 76, }, /* 85 */ + { 0, 9, 12, 0, 213, 18432, 74, }, /* 86 */ + { 0, 5, 12, 0, 130, 18432, 76, }, /* 87 */ + { 0, 9, 12, 0, 214, 18432, 74, }, /* 88 */ + { 0, 9, 12, 0, 218, 18432, 74, }, /* 89 */ + { 0, 9, 12, 0, 217, 18432, 74, }, /* 90 */ + { 0, 9, 12, 0, 219, 18432, 74, }, /* 91 */ + { 0, 7, 12, 0, 0, 18432, 82, }, /* 92 */ + { 0, 5, 12, 0, 56, 18432, 76, }, /* 93 */ + { 0, 9, 12, 5, 2, 18432, 84, }, /* 94 */ + { 0, 8, 12, 5, 1, 18432, 86, }, /* 95 */ + { 0, 5, 12, 5, -2, 18432, 76, }, /* 96 */ + { 0, 9, 12, 9, 2, 18432, 84, }, /* 97 */ + { 0, 8, 12, 9, 1, 18432, 86, }, /* 98 */ + { 0, 5, 12, 9, -2, 18432, 76, }, /* 99 */ + { 0, 9, 12, 13, 2, 18432, 84, }, /* 100 */ + { 0, 8, 12, 13, 1, 18432, 86, }, /* 101 */ + { 0, 5, 12, 13, -2, 18432, 76, }, /* 102 */ + { 0, 5, 12, 0, -79, 18432, 76, }, /* 103 */ + { 0, 9, 12, 17, 2, 18432, 84, }, /* 104 */ + { 0, 8, 12, 17, 1, 18432, 86, }, /* 105 */ + { 0, 5, 12, 17, -2, 18432, 76, }, /* 106 */ + { 0, 9, 12, 0, -97, 18432, 74, }, /* 107 */ + { 0, 9, 12, 0, -56, 18432, 74, }, /* 108 */ + { 0, 9, 12, 0, -130, 18432, 74, }, /* 109 */ + { 0, 9, 12, 0, 10795, 18432, 74, }, /* 110 */ + { 0, 9, 12, 0, -163, 18432, 74, }, /* 111 */ + { 0, 9, 12, 0, 10792, 18432, 74, }, /* 112 */ + { 0, 5, 12, 0, 10815, 18432, 76, }, /* 113 */ + { 0, 9, 12, 0, -195, 18432, 74, }, /* 114 */ + { 0, 9, 12, 0, 69, 18432, 74, }, /* 115 */ + { 0, 9, 12, 0, 71, 18432, 74, }, /* 116 */ + { 0, 5, 12, 0, 10783, 18432, 76, }, /* 117 */ + { 0, 5, 12, 0, 10780, 18432, 76, }, /* 118 */ + { 0, 5, 12, 0, 10782, 18432, 76, }, /* 119 */ + { 0, 5, 12, 0, -210, 18432, 76, }, /* 120 */ + { 0, 5, 12, 0, -206, 18432, 76, }, /* 121 */ + { 0, 5, 12, 0, -205, 18432, 76, }, /* 122 */ + { 0, 5, 12, 0, -202, 18432, 76, }, /* 123 */ + { 0, 5, 12, 0, -203, 18432, 76, }, /* 124 */ + { 0, 5, 12, 0, 42319, 18432, 76, }, /* 125 */ + { 0, 5, 12, 0, 42315, 18432, 76, }, /* 126 */ + { 0, 5, 12, 0, -207, 18432, 76, }, /* 127 */ + { 0, 5, 12, 0, 42280, 18432, 76, }, /* 128 */ + { 0, 5, 12, 0, 42308, 18432, 76, }, /* 129 */ + { 0, 5, 12, 0, -209, 18432, 78, }, /* 130 */ + { 0, 5, 12, 0, -211, 18432, 76, }, /* 131 */ + { 0, 5, 12, 0, 10743, 18432, 76, }, /* 132 */ + { 0, 5, 12, 0, 42305, 18432, 76, }, /* 133 */ + { 0, 5, 12, 0, 10749, 18432, 76, }, /* 134 */ + { 0, 5, 12, 0, -213, 18432, 76, }, /* 135 */ + { 0, 5, 12, 0, -214, 18432, 76, }, /* 136 */ + { 0, 5, 12, 0, 10727, 18432, 76, }, /* 137 */ + { 0, 5, 12, 0, -218, 18432, 76, }, /* 138 */ + { 0, 5, 12, 0, 42307, 18432, 76, }, /* 139 */ + { 0, 5, 12, 0, 42282, 18432, 76, }, /* 140 */ + { 0, 5, 12, 0, -69, 18432, 76, }, /* 141 */ + { 0, 5, 12, 0, -217, 18432, 76, }, /* 142 */ + { 0, 5, 12, 0, -71, 18432, 76, }, /* 143 */ + { 0, 5, 12, 0, -219, 18432, 76, }, /* 144 */ + { 0, 5, 12, 0, 42261, 18432, 78, }, /* 145 */ + { 0, 5, 12, 0, 42258, 18432, 76, }, /* 146 */ + { 0, 6, 12, 0, 0, 18432, 88, }, /* 147 */ + { 0, 6, 12, 0, 0, 18432, 90, }, /* 148 */ + { 69, 6, 12, 0, 0, 28672, 92, }, /* 149 */ + { 69, 6, 12, 0, 0, 18432, 92, }, /* 150 */ + { 69, 6, 12, 0, 0, 18432, 88, }, /* 151 */ + { 69, 6, 12, 0, 0, 18432, 94, }, /* 152 */ + { 22, 24, 12, 0, 0, 28672, 56, }, /* 153 */ + { 84, 12, 3, 0, 0, 26624, 96, }, /* 154 */ + { 84, 12, 3, 0, 0, 26636, 96, }, /* 155 */ + { 84, 12, 3, 21, 116, 26636, 98, }, /* 156 */ + { 84, 12, 3, 0, 0, 26624, 100, }, /* 157 */ + { 84, 12, 3, 0, 0, 26624, 102, }, /* 158 */ + { 84, 12, 3, 0, 0, 26642, 102, }, /* 159 */ + { 1, 9, 12, 0, 1, 18432, 74, }, /* 160 */ + { 1, 5, 12, 0, -1, 18432, 76, }, /* 161 */ + { 1, 24, 12, 0, 0, 28672, 56, }, /* 162 */ + { 68, 2, 12, 0, 0, 18432, 0, }, /* 163 */ + { 1, 6, 12, 0, 0, 18432, 104, }, /* 164 */ + { 1, 5, 12, 0, 130, 18432, 76, }, /* 165 */ + { 69, 21, 12, 0, 0, 28672, 106, }, /* 166 */ + { 1, 9, 12, 0, 116, 18432, 74, }, /* 167 */ + { 1, 9, 12, 0, 38, 18432, 74, }, /* 168 */ + { 69, 21, 12, 0, 0, 28672, 108, }, /* 169 */ + { 1, 9, 12, 0, 37, 18432, 74, }, /* 170 */ + { 1, 9, 12, 0, 64, 18432, 74, }, /* 171 */ + { 1, 9, 12, 0, 63, 18432, 74, }, /* 172 */ + { 1, 5, 12, 0, 0, 18432, 76, }, /* 173 */ + { 1, 9, 12, 0, 32, 18432, 74, }, /* 174 */ + { 1, 9, 12, 34, 32, 18432, 74, }, /* 175 */ + { 1, 9, 12, 59, 32, 18432, 74, }, /* 176 */ + { 1, 9, 12, 38, 32, 18432, 74, }, /* 177 */ + { 1, 9, 12, 21, 32, 18432, 74, }, /* 178 */ + { 1, 9, 12, 51, 32, 18432, 74, }, /* 179 */ + { 1, 9, 12, 26, 32, 18432, 74, }, /* 180 */ + { 1, 9, 12, 47, 32, 18432, 74, }, /* 181 */ + { 1, 9, 12, 55, 32, 18432, 74, }, /* 182 */ + { 1, 9, 12, 30, 32, 18432, 74, }, /* 183 */ + { 1, 9, 12, 43, 32, 18432, 74, }, /* 184 */ + { 1, 9, 12, 96, 32, 18432, 74, }, /* 185 */ + { 1, 5, 12, 0, -38, 18432, 76, }, /* 186 */ + { 1, 5, 12, 0, -37, 18432, 76, }, /* 187 */ + { 1, 5, 12, 0, -32, 18432, 76, }, /* 188 */ + { 1, 5, 12, 34, -32, 18432, 76, }, /* 189 */ + { 1, 5, 12, 59, -32, 18432, 76, }, /* 190 */ + { 1, 5, 12, 38, -32, 18432, 76, }, /* 191 */ + { 1, 5, 12, 21, -116, 18432, 76, }, /* 192 */ + { 1, 5, 12, 51, -32, 18432, 76, }, /* 193 */ + { 1, 5, 12, 26, -775, 18432, 76, }, /* 194 */ + { 1, 5, 12, 47, -32, 18432, 76, }, /* 195 */ + { 1, 5, 12, 55, -32, 18432, 76, }, /* 196 */ + { 1, 5, 12, 30, 1, 18432, 70, }, /* 197 */ + { 1, 5, 12, 30, -32, 18432, 76, }, /* 198 */ + { 1, 5, 12, 43, -32, 18432, 76, }, /* 199 */ + { 1, 5, 12, 96, -32, 18432, 76, }, /* 200 */ + { 1, 5, 12, 0, -64, 18432, 76, }, /* 201 */ + { 1, 5, 12, 0, -63, 18432, 76, }, /* 202 */ + { 1, 9, 12, 0, 8, 18432, 74, }, /* 203 */ + { 1, 5, 12, 34, -30, 18432, 110, }, /* 204 */ + { 1, 5, 12, 38, -25, 18432, 110, }, /* 205 */ + { 1, 9, 12, 0, 0, 18432, 112, }, /* 206 */ + { 1, 9, 12, 0, 0, 18432, 114, }, /* 207 */ + { 1, 5, 12, 43, -15, 18432, 110, }, /* 208 */ + { 1, 5, 12, 47, -22, 18432, 70, }, /* 209 */ + { 1, 5, 12, 0, -8, 18432, 76, }, /* 210 */ + { 34, 9, 12, 0, 1, 18432, 74, }, /* 211 */ + { 34, 5, 12, 0, -1, 18432, 76, }, /* 212 */ + { 1, 5, 12, 51, -54, 18432, 110, }, /* 213 */ + { 1, 5, 12, 55, -48, 18432, 110, }, /* 214 */ + { 1, 5, 12, 0, 7, 18432, 76, }, /* 215 */ + { 1, 5, 12, 0, -116, 18432, 78, }, /* 216 */ + { 1, 9, 12, 38, -60, 18432, 116, }, /* 217 */ + { 1, 5, 12, 59, -64, 18432, 110, }, /* 218 */ + { 1, 25, 12, 0, 0, 28672, 118, }, /* 219 */ + { 1, 9, 12, 0, -7, 18432, 74, }, /* 220 */ + { 1, 5, 12, 0, 0, 18432, 60, }, /* 221 */ + { 1, 9, 12, 0, -130, 18432, 74, }, /* 222 */ + { 2, 9, 12, 0, 80, 18432, 74, }, /* 223 */ + { 2, 9, 12, 0, 32, 18432, 74, }, /* 224 */ + { 2, 9, 12, 63, 32, 18432, 74, }, /* 225 */ + { 2, 9, 12, 67, 32, 18432, 74, }, /* 226 */ + { 2, 9, 12, 71, 32, 18432, 74, }, /* 227 */ + { 2, 9, 12, 75, 32, 18432, 74, }, /* 228 */ + { 2, 9, 12, 79, 32, 18432, 74, }, /* 229 */ + { 2, 9, 12, 84, 32, 18432, 74, }, /* 230 */ + { 2, 5, 12, 0, -32, 18432, 76, }, /* 231 */ + { 2, 5, 12, 63, -32, 18432, 76, }, /* 232 */ + { 2, 5, 12, 67, -32, 18432, 76, }, /* 233 */ + { 2, 5, 12, 71, -32, 18432, 76, }, /* 234 */ + { 2, 5, 12, 75, -32, 18432, 76, }, /* 235 */ + { 2, 5, 12, 79, -32, 18432, 76, }, /* 236 */ + { 2, 5, 12, 84, -32, 18432, 76, }, /* 237 */ + { 2, 5, 12, 0, -80, 18432, 76, }, /* 238 */ + { 2, 5, 12, 0, -80, 18432, 78, }, /* 239 */ + { 2, 9, 12, 0, 1, 18432, 74, }, /* 240 */ + { 2, 5, 12, 0, -1, 18432, 76, }, /* 241 */ + { 2, 9, 12, 88, 1, 18432, 74, }, /* 242 */ + { 2, 5, 12, 88, -1, 18432, 76, }, /* 243 */ + { 2, 26, 12, 0, 0, 18432, 68, }, /* 244 */ + { 2, 12, 3, 0, 0, 26684, 96, }, /* 245 */ + { 2, 12, 3, 0, 0, 26678, 96, }, /* 246 */ + { 84, 12, 3, 0, 0, 26681, 96, }, /* 247 */ + { 2, 11, 3, 0, 0, 26624, 120, }, /* 248 */ + { 2, 9, 12, 0, 15, 18432, 74, }, /* 249 */ + { 2, 5, 12, 0, -15, 18432, 76, }, /* 250 */ + { 70, 9, 12, 0, 48, 18432, 74, }, /* 251 */ + { 70, 6, 12, 0, 0, 18432, 92, }, /* 252 */ + { 70, 21, 12, 0, 0, 18432, 68, }, /* 253 */ + { 70, 21, 12, 0, 0, 18432, 122, }, /* 254 */ + { 70, 5, 12, 0, 0, 18432, 60, }, /* 255 */ + { 70, 5, 12, 0, -48, 18432, 76, }, /* 256 */ + { 70, 5, 12, 0, 0, 18432, 70, }, /* 257 */ + { 70, 21, 12, 0, 0, 18432, 124, }, /* 258 */ + { 70, 17, 12, 0, 0, 28672, 126, }, /* 259 */ + { 70, 26, 12, 0, 0, 28672, 68, }, /* 260 */ + { 70, 23, 12, 0, 0, 14336, 68, }, /* 261 */ + { 68, 2, 12, 0, 0, 34816, 0, }, /* 262 */ + { 71, 12, 3, 0, 0, 26624, 96, }, /* 263 */ + { 71, 12, 3, 0, 0, 26624, 102, }, /* 264 */ + { 71, 12, 3, 0, 0, 26624, 128, }, /* 265 */ + { 71, 17, 12, 0, 0, 34816, 126, }, /* 266 */ + { 71, 21, 12, 0, 0, 34816, 68, }, /* 267 */ + { 71, 21, 12, 0, 0, 34816, 106, }, /* 268 */ + { 71, 12, 3, 0, 0, 26624, 130, }, /* 269 */ + { 71, 7, 12, 0, 0, 34816, 82, }, /* 270 */ + { 71, 21, 12, 0, 0, 34816, 122, }, /* 271 */ + { 3, 1, 4, 0, 0, 2048, 132, }, /* 272 */ + { 69, 1, 4, 0, 0, 2048, 132, }, /* 273 */ + { 3, 25, 12, 0, 0, 28672, 118, }, /* 274 */ + { 3, 25, 12, 0, 0, 0, 118, }, /* 275 */ + { 3, 21, 12, 0, 0, 14336, 68, }, /* 276 */ + { 3, 23, 12, 0, 0, 0, 68, }, /* 277 */ + { 69, 21, 12, 0, 0, 8342, 106, }, /* 278 */ + { 3, 21, 12, 0, 0, 0, 68, }, /* 279 */ + { 3, 26, 12, 0, 0, 28672, 68, }, /* 280 */ + { 3, 12, 3, 0, 0, 26624, 130, }, /* 281 */ + { 69, 21, 12, 0, 0, 150, 106, }, /* 282 */ + { 3, 1, 2, 0, 0, 108, 134, }, /* 283 */ + { 3, 21, 12, 0, 0, 0, 124, }, /* 284 */ + { 69, 21, 12, 0, 0, 159, 124, }, /* 285 */ + { 3, 7, 12, 0, 0, 0, 82, }, /* 286 */ + { 69, 6, 12, 0, 0, 165, 136, }, /* 287 */ + { 84, 12, 3, 0, 0, 26660, 128, }, /* 288 */ + { 84, 12, 3, 0, 0, 26660, 130, }, /* 289 */ + { 3, 12, 3, 0, 0, 26624, 128, }, /* 290 */ + { 3, 12, 3, 0, 0, 26624, 96, }, /* 291 */ + { 3, 13, 12, 0, 0, 2159, 138, }, /* 292 */ + { 3, 21, 12, 0, 0, 2048, 68, }, /* 293 */ + { 3, 7, 12, 0, 0, 0, 140, }, /* 294 */ + { 3, 21, 12, 0, 0, 30, 124, }, /* 295 */ + { 3, 6, 12, 0, 0, 0, 92, }, /* 296 */ + { 3, 13, 12, 0, 0, 10240, 138, }, /* 297 */ + { 3, 26, 12, 0, 0, 0, 68, }, /* 298 */ + { 4, 21, 12, 0, 0, 0, 124, }, /* 299 */ + { 4, 21, 12, 0, 0, 0, 106, }, /* 300 */ + { 4, 21, 12, 0, 0, 0, 68, }, /* 301 */ + { 68, 2, 12, 0, 0, 0, 0, }, /* 302 */ + { 4, 1, 4, 0, 0, 0, 132, }, /* 303 */ + { 4, 7, 12, 0, 0, 0, 82, }, /* 304 */ + { 4, 12, 3, 0, 0, 26624, 130, }, /* 305 */ + { 4, 12, 3, 0, 0, 26624, 128, }, /* 306 */ + { 4, 12, 3, 0, 0, 26624, 96, }, /* 307 */ + { 5, 7, 12, 0, 0, 0, 82, }, /* 308 */ + { 5, 12, 3, 0, 0, 26624, 128, }, /* 309 */ + { 38, 13, 12, 0, 0, 34816, 138, }, /* 310 */ + { 38, 7, 12, 0, 0, 34816, 82, }, /* 311 */ + { 38, 12, 3, 0, 0, 26624, 96, }, /* 312 */ + { 38, 6, 12, 0, 0, 34816, 92, }, /* 313 */ + { 38, 26, 12, 0, 0, 28672, 68, }, /* 314 */ + { 38, 21, 12, 0, 0, 28672, 68, }, /* 315 */ + { 38, 21, 12, 0, 0, 28672, 106, }, /* 316 */ + { 38, 21, 12, 0, 0, 28672, 124, }, /* 317 */ + { 38, 6, 12, 0, 0, 34816, 136, }, /* 318 */ + { 38, 12, 3, 0, 0, 26624, 102, }, /* 319 */ + { 38, 23, 12, 0, 0, 34816, 68, }, /* 320 */ + { 110, 7, 12, 0, 0, 34816, 82, }, /* 321 */ + { 110, 12, 3, 0, 0, 26624, 130, }, /* 322 */ + { 110, 12, 3, 0, 0, 26624, 96, }, /* 323 */ + { 110, 6, 12, 0, 0, 34816, 142, }, /* 324 */ + { 110, 12, 3, 0, 0, 26624, 102, }, /* 325 */ + { 110, 21, 12, 0, 0, 34816, 106, }, /* 326 */ + { 110, 21, 12, 0, 0, 34816, 124, }, /* 327 */ + { 42, 7, 12, 0, 0, 34816, 82, }, /* 328 */ + { 42, 12, 3, 0, 0, 26624, 102, }, /* 329 */ + { 42, 21, 12, 0, 0, 34816, 106, }, /* 330 */ + { 3, 24, 12, 0, 0, 0, 122, }, /* 331 */ + { 3, 12, 3, 0, 0, 26624, 102, }, /* 332 */ + { 6, 12, 3, 0, 0, 26624, 130, }, /* 333 */ + { 6, 10, 5, 0, 0, 18432, 144, }, /* 334 */ + { 6, 7, 12, 0, 0, 18432, 82, }, /* 335 */ + { 6, 12, 3, 0, 0, 26624, 96, }, /* 336 */ + { 6, 12, 3, 0, 0, 26624, 146, }, /* 337 */ + { 84, 12, 3, 0, 0, 26798, 96, }, /* 338 */ + { 84, 12, 3, 0, 0, 26795, 96, }, /* 339 */ + { 69, 21, 12, 0, 0, 18615, 124, }, /* 340 */ + { 69, 21, 12, 0, 0, 18618, 124, }, /* 341 */ + { 6, 13, 12, 0, 0, 18576, 138, }, /* 342 */ + { 6, 21, 12, 0, 0, 18432, 68, }, /* 343 */ + { 6, 6, 12, 0, 0, 18432, 92, }, /* 344 */ + { 7, 7, 12, 0, 0, 18432, 82, }, /* 345 */ + { 7, 12, 3, 0, 0, 26624, 130, }, /* 346 */ + { 7, 10, 5, 0, 0, 18432, 144, }, /* 347 */ + { 7, 12, 3, 0, 0, 26624, 96, }, /* 348 */ + { 7, 10, 3, 0, 0, 18432, 148, }, /* 349 */ + { 7, 12, 3, 0, 0, 26624, 146, }, /* 350 */ + { 7, 13, 12, 0, 0, 18546, 138, }, /* 351 */ + { 7, 23, 12, 0, 0, 14336, 68, }, /* 352 */ + { 7, 15, 12, 0, 0, 18432, 68, }, /* 353 */ + { 7, 26, 12, 0, 0, 18432, 68, }, /* 354 */ + { 7, 21, 12, 0, 0, 18432, 68, }, /* 355 */ + { 7, 12, 3, 0, 0, 26624, 102, }, /* 356 */ + { 8, 12, 3, 0, 0, 26624, 130, }, /* 357 */ + { 8, 10, 5, 0, 0, 18432, 144, }, /* 358 */ + { 8, 7, 12, 0, 0, 18432, 82, }, /* 359 */ + { 8, 12, 3, 0, 0, 26624, 96, }, /* 360 */ + { 8, 12, 3, 0, 0, 26624, 146, }, /* 361 */ + { 8, 13, 12, 0, 0, 18519, 138, }, /* 362 */ + { 8, 21, 12, 0, 0, 18432, 68, }, /* 363 */ + { 9, 12, 3, 0, 0, 26624, 130, }, /* 364 */ + { 9, 10, 5, 0, 0, 18432, 144, }, /* 365 */ + { 9, 7, 12, 0, 0, 18432, 82, }, /* 366 */ + { 9, 12, 3, 0, 0, 26624, 96, }, /* 367 */ + { 9, 12, 3, 0, 0, 26624, 146, }, /* 368 */ + { 9, 13, 12, 0, 0, 18516, 138, }, /* 369 */ + { 9, 21, 12, 0, 0, 18432, 68, }, /* 370 */ + { 9, 23, 12, 0, 0, 14336, 68, }, /* 371 */ + { 10, 12, 3, 0, 0, 26624, 130, }, /* 372 */ + { 10, 10, 5, 0, 0, 18432, 144, }, /* 373 */ + { 10, 7, 12, 0, 0, 18432, 82, }, /* 374 */ + { 10, 12, 3, 0, 0, 26624, 96, }, /* 375 */ + { 10, 10, 3, 0, 0, 18432, 148, }, /* 376 */ + { 10, 12, 3, 0, 0, 26624, 146, }, /* 377 */ + { 10, 12, 3, 0, 0, 26624, 150, }, /* 378 */ + { 10, 13, 12, 0, 0, 18432, 138, }, /* 379 */ + { 10, 26, 12, 0, 0, 18432, 68, }, /* 380 */ + { 10, 15, 12, 0, 0, 18432, 68, }, /* 381 */ + { 11, 12, 3, 0, 0, 26624, 130, }, /* 382 */ + { 11, 7, 12, 0, 0, 18432, 82, }, /* 383 */ + { 11, 10, 3, 0, 0, 18432, 148, }, /* 384 */ + { 11, 10, 5, 0, 0, 18432, 144, }, /* 385 */ + { 11, 12, 3, 0, 0, 26624, 146, }, /* 386 */ + { 11, 13, 12, 0, 0, 18513, 138, }, /* 387 */ + { 11, 15, 12, 0, 0, 18513, 68, }, /* 388 */ + { 11, 26, 12, 0, 0, 28753, 68, }, /* 389 */ + { 11, 26, 12, 0, 0, 28672, 68, }, /* 390 */ + { 11, 23, 12, 0, 0, 14336, 68, }, /* 391 */ + { 12, 12, 3, 0, 0, 26624, 130, }, /* 392 */ + { 12, 10, 5, 0, 0, 18432, 144, }, /* 393 */ + { 12, 12, 3, 0, 0, 26624, 102, }, /* 394 */ + { 12, 7, 12, 0, 0, 18432, 82, }, /* 395 */ + { 12, 12, 3, 0, 0, 26624, 96, }, /* 396 */ + { 12, 12, 3, 0, 0, 26624, 146, }, /* 397 */ + { 12, 13, 12, 0, 0, 18432, 138, }, /* 398 */ + { 12, 21, 12, 0, 0, 18432, 68, }, /* 399 */ + { 12, 15, 12, 0, 0, 28672, 68, }, /* 400 */ + { 12, 26, 12, 0, 0, 18432, 68, }, /* 401 */ + { 13, 7, 12, 0, 0, 18432, 82, }, /* 402 */ + { 13, 12, 3, 0, 0, 26624, 130, }, /* 403 */ + { 13, 10, 5, 0, 0, 18432, 144, }, /* 404 */ + { 13, 21, 12, 0, 0, 18432, 68, }, /* 405 */ + { 13, 12, 3, 0, 0, 26624, 96, }, /* 406 */ + { 13, 12, 3, 0, 0, 18432, 130, }, /* 407 */ + { 13, 10, 3, 0, 0, 18432, 148, }, /* 408 */ + { 13, 12, 3, 0, 0, 26624, 146, }, /* 409 */ + { 13, 13, 12, 0, 0, 18528, 138, }, /* 410 */ + { 14, 12, 3, 0, 0, 26624, 130, }, /* 411 */ + { 14, 10, 5, 0, 0, 18432, 144, }, /* 412 */ + { 14, 7, 12, 0, 0, 18432, 82, }, /* 413 */ + { 14, 12, 3, 0, 0, 26624, 146, }, /* 414 */ + { 14, 10, 3, 0, 0, 18432, 148, }, /* 415 */ + { 14, 7, 4, 0, 0, 18432, 82, }, /* 416 */ + { 14, 26, 12, 0, 0, 18432, 68, }, /* 417 */ + { 14, 15, 12, 0, 0, 18432, 68, }, /* 418 */ + { 14, 13, 12, 0, 0, 18432, 138, }, /* 419 */ + { 15, 12, 3, 0, 0, 26624, 130, }, /* 420 */ + { 15, 10, 5, 0, 0, 18432, 144, }, /* 421 */ + { 15, 7, 12, 0, 0, 18432, 82, }, /* 422 */ + { 15, 12, 3, 0, 0, 26624, 146, }, /* 423 */ + { 15, 10, 3, 0, 0, 18432, 148, }, /* 424 */ + { 15, 13, 12, 0, 0, 18432, 138, }, /* 425 */ + { 15, 21, 12, 0, 0, 18432, 68, }, /* 426 */ + { 72, 7, 12, 0, 0, 18432, 82, }, /* 427 */ + { 72, 12, 3, 0, 0, 26624, 130, }, /* 428 */ + { 72, 7, 5, 0, 0, 18432, 152, }, /* 429 */ + { 72, 12, 3, 0, 0, 26624, 154, }, /* 430 */ + { 69, 23, 12, 0, 0, 14336, 68, }, /* 431 */ + { 72, 7, 12, 0, 0, 18432, 156, }, /* 432 */ + { 72, 6, 12, 0, 0, 18432, 136, }, /* 433 */ + { 72, 12, 3, 0, 0, 26624, 96, }, /* 434 */ + { 72, 21, 12, 0, 0, 18432, 68, }, /* 435 */ + { 72, 13, 12, 0, 0, 18432, 138, }, /* 436 */ + { 72, 21, 12, 0, 0, 18432, 106, }, /* 437 */ + { 73, 7, 12, 0, 0, 18432, 82, }, /* 438 */ + { 73, 12, 3, 0, 0, 26624, 130, }, /* 439 */ + { 73, 7, 5, 0, 0, 18432, 152, }, /* 440 */ + { 73, 12, 3, 0, 0, 26624, 146, }, /* 441 */ + { 73, 7, 12, 0, 0, 18432, 156, }, /* 442 */ + { 73, 6, 12, 0, 0, 18432, 136, }, /* 443 */ + { 73, 12, 3, 0, 0, 26624, 96, }, /* 444 */ + { 73, 13, 12, 0, 0, 18432, 138, }, /* 445 */ + { 74, 7, 12, 0, 0, 18432, 82, }, /* 446 */ + { 74, 26, 12, 0, 0, 18432, 68, }, /* 447 */ + { 74, 21, 12, 0, 0, 18432, 68, }, /* 448 */ + { 74, 21, 12, 0, 0, 18432, 106, }, /* 449 */ + { 74, 12, 3, 0, 0, 26624, 96, }, /* 450 */ + { 74, 13, 12, 0, 0, 18432, 138, }, /* 451 */ + { 74, 15, 12, 0, 0, 18432, 68, }, /* 452 */ + { 74, 22, 12, 0, 0, 28672, 158, }, /* 453 */ + { 74, 18, 12, 0, 0, 28672, 158, }, /* 454 */ + { 74, 10, 5, 0, 0, 18432, 160, }, /* 455 */ + { 74, 12, 3, 0, 0, 26624, 130, }, /* 456 */ + { 74, 12, 3, 0, 0, 26624, 162, }, /* 457 */ + { 74, 10, 5, 0, 0, 18432, 144, }, /* 458 */ + { 74, 12, 3, 0, 0, 26624, 146, }, /* 459 */ + { 69, 26, 12, 0, 0, 18432, 68, }, /* 460 */ + { 16, 7, 12, 0, 0, 18432, 82, }, /* 461 */ + { 16, 10, 12, 0, 0, 18432, 144, }, /* 462 */ + { 16, 12, 3, 0, 0, 26624, 130, }, /* 463 */ + { 16, 10, 5, 0, 0, 18432, 144, }, /* 464 */ + { 16, 12, 3, 0, 0, 26624, 96, }, /* 465 */ + { 16, 12, 3, 0, 0, 26624, 146, }, /* 466 */ + { 16, 13, 12, 0, 0, 18549, 138, }, /* 467 */ + { 16, 21, 12, 0, 0, 18432, 124, }, /* 468 */ + { 16, 21, 12, 0, 0, 18432, 68, }, /* 469 */ + { 16, 10, 12, 0, 0, 18432, 164, }, /* 470 */ + { 16, 12, 3, 0, 0, 26624, 128, }, /* 471 */ + { 16, 13, 12, 0, 0, 18432, 138, }, /* 472 */ + { 16, 26, 12, 0, 0, 18432, 68, }, /* 473 */ + { 17, 9, 12, 0, 7264, 18432, 74, }, /* 474 */ + { 17, 5, 12, 0, 3008, 18432, 166, }, /* 475 */ + { 69, 21, 12, 0, 0, 18510, 68, }, /* 476 */ + { 17, 6, 12, 0, 0, 18432, 142, }, /* 477 */ + { 18, 7, 6, 0, 0, 18432, 82, }, /* 478 */ + { 18, 7, 6, 0, 0, 18432, 168, }, /* 479 */ + { 18, 7, 7, 0, 0, 18432, 168, }, /* 480 */ + { 18, 7, 7, 0, 0, 18432, 82, }, /* 481 */ + { 18, 7, 8, 0, 0, 18432, 82, }, /* 482 */ + { 75, 7, 12, 0, 0, 18432, 82, }, /* 483 */ + { 75, 12, 3, 0, 0, 26624, 96, }, /* 484 */ + { 75, 21, 12, 0, 0, 18432, 68, }, /* 485 */ + { 75, 21, 12, 0, 0, 18432, 106, }, /* 486 */ + { 75, 21, 12, 0, 0, 18432, 124, }, /* 487 */ + { 75, 15, 12, 0, 0, 18432, 138, }, /* 488 */ + { 75, 15, 12, 0, 0, 18432, 68, }, /* 489 */ + { 75, 26, 12, 0, 0, 28672, 68, }, /* 490 */ + { 76, 9, 12, 0, 38864, 18432, 170, }, /* 491 */ + { 76, 9, 12, 0, 8, 18432, 170, }, /* 492 */ + { 76, 5, 12, 0, -8, 18432, 70, }, /* 493 */ + { 77, 17, 12, 0, 0, 28672, 126, }, /* 494 */ + { 77, 7, 12, 0, 0, 18432, 82, }, /* 495 */ + { 77, 26, 12, 0, 0, 18432, 68, }, /* 496 */ + { 77, 21, 12, 0, 0, 18432, 124, }, /* 497 */ + { 78, 29, 12, 0, 0, 45056, 52, }, /* 498 */ + { 78, 7, 12, 0, 0, 18432, 82, }, /* 499 */ + { 78, 22, 12, 0, 0, 28672, 158, }, /* 500 */ + { 78, 18, 12, 0, 0, 28672, 158, }, /* 501 */ + { 79, 7, 12, 0, 0, 18432, 82, }, /* 502 */ + { 69, 21, 12, 0, 0, 18432, 106, }, /* 503 */ + { 79, 14, 12, 0, 0, 18432, 82, }, /* 504 */ + { 25, 7, 12, 0, 0, 18432, 82, }, /* 505 */ + { 25, 12, 3, 0, 0, 26624, 130, }, /* 506 */ + { 25, 12, 3, 0, 0, 26624, 146, }, /* 507 */ + { 25, 10, 5, 0, 0, 18432, 172, }, /* 508 */ + { 26, 7, 12, 0, 0, 18432, 82, }, /* 509 */ + { 26, 12, 3, 0, 0, 26624, 130, }, /* 510 */ + { 26, 10, 5, 0, 0, 18432, 174, }, /* 511 */ + { 69, 21, 12, 0, 0, 18573, 124, }, /* 512 */ + { 27, 7, 12, 0, 0, 18432, 82, }, /* 513 */ + { 27, 12, 3, 0, 0, 26624, 130, }, /* 514 */ + { 28, 7, 12, 0, 0, 18432, 82, }, /* 515 */ + { 28, 12, 3, 0, 0, 26624, 130, }, /* 516 */ + { 80, 7, 12, 0, 0, 18432, 82, }, /* 517 */ + { 80, 7, 12, 0, 0, 18432, 140, }, /* 518 */ + { 80, 12, 3, 0, 0, 26624, 100, }, /* 519 */ + { 80, 10, 5, 0, 0, 18432, 144, }, /* 520 */ + { 80, 12, 3, 0, 0, 26624, 130, }, /* 521 */ + { 80, 12, 3, 0, 0, 26624, 96, }, /* 522 */ + { 80, 12, 3, 0, 0, 26624, 146, }, /* 523 */ + { 80, 21, 12, 0, 0, 18432, 106, }, /* 524 */ + { 80, 6, 12, 0, 0, 18432, 142, }, /* 525 */ + { 80, 21, 12, 0, 0, 18432, 68, }, /* 526 */ + { 80, 23, 12, 0, 0, 14336, 68, }, /* 527 */ + { 80, 13, 12, 0, 0, 18432, 138, }, /* 528 */ + { 80, 15, 12, 0, 0, 28672, 68, }, /* 529 */ + { 19, 21, 12, 0, 0, 28672, 68, }, /* 530 */ + { 69, 21, 12, 0, 0, 28777, 106, }, /* 531 */ + { 69, 21, 12, 0, 0, 28777, 124, }, /* 532 */ + { 19, 21, 12, 0, 0, 28672, 106, }, /* 533 */ + { 19, 17, 12, 0, 0, 28672, 126, }, /* 534 */ + { 19, 21, 12, 0, 0, 28672, 124, }, /* 535 */ + { 19, 21, 12, 0, 0, 28672, 176, }, /* 536 */ + { 19, 12, 3, 0, 0, 26624, 178, }, /* 537 */ + { 19, 1, 2, 0, 0, 6144, 66, }, /* 538 */ + { 19, 13, 12, 0, 0, 18432, 138, }, /* 539 */ + { 19, 7, 12, 0, 0, 18432, 82, }, /* 540 */ + { 19, 6, 12, 0, 0, 18432, 136, }, /* 541 */ + { 19, 12, 3, 0, 0, 26624, 180, }, /* 542 */ + { 19, 12, 3, 0, 0, 26624, 130, }, /* 543 */ + { 29, 7, 12, 0, 0, 18432, 82, }, /* 544 */ + { 29, 12, 3, 0, 0, 26624, 130, }, /* 545 */ + { 29, 10, 5, 0, 0, 18432, 144, }, /* 546 */ + { 29, 12, 3, 0, 0, 26624, 96, }, /* 547 */ + { 29, 26, 12, 0, 0, 28672, 68, }, /* 548 */ + { 29, 21, 12, 0, 0, 28672, 124, }, /* 549 */ + { 29, 13, 12, 0, 0, 18432, 138, }, /* 550 */ + { 30, 7, 12, 0, 0, 18432, 82, }, /* 551 */ + { 89, 7, 12, 0, 0, 18432, 82, }, /* 552 */ + { 89, 7, 12, 0, 0, 18432, 156, }, /* 553 */ + { 89, 13, 12, 0, 0, 18432, 138, }, /* 554 */ + { 89, 15, 12, 0, 0, 18432, 138, }, /* 555 */ + { 89, 26, 12, 0, 0, 28672, 68, }, /* 556 */ + { 80, 26, 12, 0, 0, 28672, 68, }, /* 557 */ + { 33, 7, 12, 0, 0, 18432, 82, }, /* 558 */ + { 33, 12, 3, 0, 0, 26624, 130, }, /* 559 */ + { 33, 10, 5, 0, 0, 18432, 144, }, /* 560 */ + { 33, 21, 12, 0, 0, 18432, 68, }, /* 561 */ + { 106, 7, 12, 0, 0, 18432, 82, }, /* 562 */ + { 106, 10, 5, 0, 0, 18432, 144, }, /* 563 */ + { 106, 12, 3, 0, 0, 26624, 130, }, /* 564 */ + { 106, 12, 3, 0, 0, 26624, 182, }, /* 565 */ + { 106, 10, 12, 0, 0, 18432, 144, }, /* 566 */ + { 106, 12, 3, 0, 0, 26624, 96, }, /* 567 */ + { 106, 13, 12, 0, 0, 18432, 138, }, /* 568 */ + { 106, 21, 12, 0, 0, 18432, 68, }, /* 569 */ + { 106, 6, 12, 0, 0, 18432, 136, }, /* 570 */ + { 106, 21, 12, 0, 0, 18432, 124, }, /* 571 */ + { 84, 11, 3, 0, 0, 26624, 184, }, /* 572 */ + { 84, 12, 3, 0, 0, 26624, 130, }, /* 573 */ + { 93, 12, 3, 0, 0, 26624, 130, }, /* 574 */ + { 93, 10, 5, 0, 0, 18432, 144, }, /* 575 */ + { 93, 7, 12, 0, 0, 18432, 82, }, /* 576 */ + { 93, 12, 3, 0, 0, 26624, 96, }, /* 577 */ + { 93, 10, 3, 0, 0, 18432, 148, }, /* 578 */ + { 93, 10, 5, 0, 0, 18432, 172, }, /* 579 */ + { 93, 13, 12, 0, 0, 18432, 138, }, /* 580 */ + { 93, 21, 12, 0, 0, 18432, 124, }, /* 581 */ + { 93, 21, 12, 0, 0, 18432, 68, }, /* 582 */ + { 93, 21, 12, 0, 0, 18432, 106, }, /* 583 */ + { 93, 26, 12, 0, 0, 18432, 68, }, /* 584 */ + { 96, 12, 3, 0, 0, 26624, 130, }, /* 585 */ + { 96, 10, 5, 0, 0, 18432, 144, }, /* 586 */ + { 96, 7, 12, 0, 0, 18432, 82, }, /* 587 */ + { 96, 10, 5, 0, 0, 18432, 172, }, /* 588 */ + { 96, 12, 3, 0, 0, 26624, 146, }, /* 589 */ + { 96, 13, 12, 0, 0, 18432, 138, }, /* 590 */ + { 119, 7, 12, 0, 0, 18432, 82, }, /* 591 */ + { 119, 12, 3, 0, 0, 26624, 102, }, /* 592 */ + { 119, 10, 5, 0, 0, 18432, 144, }, /* 593 */ + { 119, 12, 3, 0, 0, 26624, 130, }, /* 594 */ + { 119, 10, 5, 0, 0, 18432, 174, }, /* 595 */ + { 119, 21, 12, 0, 0, 18432, 68, }, /* 596 */ + { 97, 7, 12, 0, 0, 18432, 82, }, /* 597 */ + { 97, 10, 5, 0, 0, 18432, 144, }, /* 598 */ + { 97, 12, 3, 0, 0, 26624, 130, }, /* 599 */ + { 97, 12, 3, 0, 0, 26624, 186, }, /* 600 */ + { 97, 12, 3, 0, 0, 26624, 96, }, /* 601 */ + { 97, 21, 12, 0, 0, 18432, 124, }, /* 602 */ + { 97, 21, 12, 0, 0, 18432, 106, }, /* 603 */ + { 97, 13, 12, 0, 0, 18432, 138, }, /* 604 */ + { 98, 13, 12, 0, 0, 18432, 138, }, /* 605 */ + { 98, 7, 12, 0, 0, 18432, 82, }, /* 606 */ + { 98, 6, 12, 0, 0, 18432, 92, }, /* 607 */ + { 98, 6, 12, 0, 0, 18432, 94, }, /* 608 */ + { 98, 21, 12, 0, 0, 18432, 124, }, /* 609 */ + { 2, 5, 12, 63, -6222, 18432, 70, }, /* 610 */ + { 2, 5, 12, 67, -6221, 18432, 70, }, /* 611 */ + { 2, 5, 12, 71, -6212, 18432, 70, }, /* 612 */ + { 2, 5, 12, 75, -6210, 18432, 70, }, /* 613 */ + { 2, 5, 12, 79, -6210, 18432, 70, }, /* 614 */ + { 2, 5, 12, 79, -6211, 18432, 70, }, /* 615 */ + { 2, 5, 12, 84, -6204, 18432, 70, }, /* 616 */ + { 2, 5, 12, 88, -6180, 18432, 70, }, /* 617 */ + { 2, 5, 12, 108, 35267, 18432, 70, }, /* 618 */ + { 17, 9, 12, 0, -3008, 18432, 74, }, /* 619 */ + { 96, 21, 12, 0, 0, 18432, 68, }, /* 620 */ + { 84, 12, 3, 0, 0, 26762, 96, }, /* 621 */ + { 84, 12, 3, 0, 0, 26630, 96, }, /* 622 */ + { 69, 21, 12, 0, 0, 18498, 188, }, /* 623 */ + { 84, 12, 3, 0, 0, 26666, 96, }, /* 624 */ + { 84, 12, 3, 0, 0, 26696, 96, }, /* 625 */ + { 84, 12, 3, 0, 0, 26780, 96, }, /* 626 */ + { 69, 10, 5, 0, 0, 18474, 160, }, /* 627 */ + { 69, 7, 12, 0, 0, 18501, 82, }, /* 628 */ + { 69, 7, 12, 0, 0, 18474, 82, }, /* 629 */ + { 69, 7, 12, 0, 0, 18438, 82, }, /* 630 */ + { 69, 7, 12, 0, 0, 18594, 82, }, /* 631 */ + { 69, 7, 12, 0, 0, 18498, 82, }, /* 632 */ + { 84, 12, 3, 0, 0, 26750, 96, }, /* 633 */ + { 69, 10, 5, 0, 0, 18435, 160, }, /* 634 */ + { 84, 12, 3, 0, 0, 26690, 96, }, /* 635 */ + { 69, 7, 12, 0, 0, 18453, 82, }, /* 636 */ + { 2, 5, 12, 0, 0, 18432, 60, }, /* 637 */ + { 1, 6, 12, 0, 0, 18432, 88, }, /* 638 */ + { 2, 6, 12, 0, 0, 18432, 190, }, /* 639 */ + { 0, 5, 12, 0, 35332, 18432, 76, }, /* 640 */ + { 0, 5, 12, 0, 3814, 18432, 76, }, /* 641 */ + { 0, 5, 12, 0, 35384, 18432, 76, }, /* 642 */ + { 0, 5, 12, 0, 0, 18432, 192, }, /* 643 */ + { 0, 6, 12, 0, 0, 18432, 190, }, /* 644 */ + { 0, 6, 12, 0, 0, 18432, 194, }, /* 645 */ + { 1, 6, 12, 0, 0, 18432, 190, }, /* 646 */ + { 84, 12, 3, 0, 0, 26636, 102, }, /* 647 */ + { 84, 12, 3, 0, 0, 26687, 96, }, /* 648 */ + { 84, 12, 3, 0, 0, 26648, 96, }, /* 649 */ + { 0, 9, 12, 92, 1, 18432, 74, }, /* 650 */ + { 0, 5, 12, 92, -1, 18432, 76, }, /* 651 */ + { 0, 5, 12, 0, 0, 18432, 70, }, /* 652 */ + { 0, 5, 12, 92, -58, 18432, 70, }, /* 653 */ + { 0, 9, 12, 0, -7615, 18432, 74, }, /* 654 */ + { 1, 5, 12, 0, 8, 18432, 76, }, /* 655 */ + { 1, 9, 12, 0, -8, 18432, 74, }, /* 656 */ + { 1, 5, 12, 0, 74, 18432, 76, }, /* 657 */ + { 1, 5, 12, 0, 86, 18432, 76, }, /* 658 */ + { 1, 5, 12, 0, 100, 18432, 76, }, /* 659 */ + { 1, 5, 12, 0, 128, 18432, 76, }, /* 660 */ + { 1, 5, 12, 0, 112, 18432, 76, }, /* 661 */ + { 1, 5, 12, 0, 126, 18432, 76, }, /* 662 */ + { 1, 5, 12, 0, 8, 18432, 70, }, /* 663 */ + { 1, 8, 12, 0, -8, 18432, 86, }, /* 664 */ + { 1, 5, 12, 0, 0, 18432, 70, }, /* 665 */ + { 1, 5, 12, 0, 9, 18432, 70, }, /* 666 */ + { 1, 9, 12, 0, -74, 18432, 74, }, /* 667 */ + { 1, 8, 12, 0, -9, 18432, 86, }, /* 668 */ + { 1, 5, 12, 21, -7173, 18432, 76, }, /* 669 */ + { 1, 9, 12, 0, -86, 18432, 74, }, /* 670 */ + { 1, 9, 12, 0, -100, 18432, 74, }, /* 671 */ + { 1, 9, 12, 0, -112, 18432, 74, }, /* 672 */ + { 1, 9, 12, 0, -128, 18432, 74, }, /* 673 */ + { 1, 9, 12, 0, -126, 18432, 74, }, /* 674 */ + { 69, 29, 12, 0, 0, 45056, 52, }, /* 675 */ + { 84, 1, 3, 0, 0, 6144, 196, }, /* 676 */ + { 84, 1, 13, 0, 0, 6144, 198, }, /* 677 */ + { 69, 1, 2, 0, 0, 18432, 200, }, /* 678 */ + { 69, 1, 2, 0, 0, 34816, 200, }, /* 679 */ + { 69, 17, 12, 0, 0, 28672, 202, }, /* 680 */ + { 69, 21, 12, 0, 0, 28672, 64, }, /* 681 */ + { 69, 20, 12, 0, 0, 28672, 204, }, /* 682 */ + { 69, 19, 12, 0, 0, 28672, 204, }, /* 683 */ + { 69, 22, 12, 0, 0, 28672, 206, }, /* 684 */ + { 69, 20, 12, 0, 0, 28672, 206, }, /* 685 */ + { 69, 19, 12, 0, 0, 28672, 206, }, /* 686 */ + { 69, 21, 12, 0, 0, 28672, 208, }, /* 687 */ + { 69, 27, 2, 0, 0, 45056, 50, }, /* 688 */ + { 69, 28, 2, 0, 0, 4096, 50, }, /* 689 */ + { 69, 1, 2, 0, 0, 20480, 134, }, /* 690 */ + { 69, 1, 2, 0, 0, 36864, 134, }, /* 691 */ + { 69, 1, 2, 0, 0, 30720, 134, }, /* 692 */ + { 69, 1, 2, 0, 0, 24576, 134, }, /* 693 */ + { 69, 1, 2, 0, 0, 40960, 134, }, /* 694 */ + { 69, 29, 12, 0, 0, 8291, 52, }, /* 695 */ + { 69, 21, 12, 0, 0, 14336, 54, }, /* 696 */ + { 69, 21, 12, 0, 0, 14336, 64, }, /* 697 */ + { 69, 21, 14, 0, 0, 28672, 210, }, /* 698 */ + { 69, 21, 12, 0, 0, 28672, 212, }, /* 699 */ + { 69, 16, 12, 0, 0, 28672, 138, }, /* 700 */ + { 69, 16, 12, 0, 0, 28672, 214, }, /* 701 */ + { 69, 25, 12, 0, 0, 8192, 64, }, /* 702 */ + { 69, 22, 12, 0, 0, 28672, 216, }, /* 703 */ + { 69, 18, 12, 0, 0, 28672, 216, }, /* 704 */ + { 69, 21, 12, 0, 0, 28672, 202, }, /* 705 */ + { 69, 1, 2, 0, 0, 6144, 218, }, /* 706 */ + { 68, 2, 2, 0, 0, 6144, 220, }, /* 707 */ + { 69, 1, 2, 0, 0, 22528, 134, }, /* 708 */ + { 69, 1, 2, 0, 0, 38912, 134, }, /* 709 */ + { 69, 1, 2, 0, 0, 16384, 134, }, /* 710 */ + { 69, 1, 2, 0, 0, 32768, 134, }, /* 711 */ + { 69, 1, 2, 0, 0, 6144, 222, }, /* 712 */ + { 69, 25, 12, 0, 0, 12288, 118, }, /* 713 */ + { 69, 25, 12, 0, 0, 12288, 224, }, /* 714 */ + { 69, 25, 12, 0, 0, 28672, 118, }, /* 715 */ + { 69, 22, 12, 0, 0, 28672, 226, }, /* 716 */ + { 69, 18, 12, 0, 0, 28672, 226, }, /* 717 */ + { 68, 2, 12, 0, 0, 14336, 0, }, /* 718 */ + { 84, 12, 3, 0, 0, 26624, 228, }, /* 719 */ + { 84, 11, 3, 0, 0, 26624, 120, }, /* 720 */ + { 84, 11, 3, 0, 0, 26624, 230, }, /* 721 */ + { 84, 12, 3, 0, 0, 26753, 102, }, /* 722 */ + { 69, 26, 12, 0, 0, 28672, 68, }, /* 723 */ + { 69, 9, 12, 0, 0, 18432, 112, }, /* 724 */ + { 69, 5, 12, 0, 0, 18432, 232, }, /* 725 */ + { 69, 25, 12, 0, 0, 28672, 234, }, /* 726 */ + { 69, 26, 14, 0, 0, 28672, 236, }, /* 727 */ + { 1, 9, 12, 96, -7517, 18432, 74, }, /* 728 */ + { 69, 26, 12, 0, 0, 28672, 118, }, /* 729 */ + { 0, 9, 12, 100, -8383, 18432, 74, }, /* 730 */ + { 0, 9, 12, 104, -8262, 18432, 74, }, /* 731 */ + { 69, 26, 12, 0, 0, 14336, 238, }, /* 732 */ + { 0, 9, 12, 0, 28, 18432, 74, }, /* 733 */ + { 69, 7, 12, 0, 0, 18432, 240, }, /* 734 */ + { 69, 5, 14, 0, 0, 18432, 242, }, /* 735 */ + { 69, 5, 12, 0, 0, 18432, 244, }, /* 736 */ + { 0, 5, 12, 0, -28, 18432, 76, }, /* 737 */ + { 0, 14, 12, 0, 16, 18432, 74, }, /* 738 */ + { 0, 14, 12, 0, -16, 18432, 76, }, /* 739 */ + { 0, 14, 12, 0, 0, 18432, 82, }, /* 740 */ + { 69, 25, 14, 0, 0, 28672, 246, }, /* 741 */ + { 69, 26, 14, 0, 0, 28672, 246, }, /* 742 */ + { 69, 26, 12, 0, 0, 28672, 64, }, /* 743 */ + { 69, 25, 12, 0, 0, 28672, 248, }, /* 744 */ + { 69, 25, 12, 0, 0, 12288, 250, }, /* 745 */ + { 69, 22, 12, 0, 0, 28672, 248, }, /* 746 */ + { 69, 18, 12, 0, 0, 28672, 248, }, /* 747 */ + { 69, 26, 14, 0, 0, 28672, 252, }, /* 748 */ + { 69, 22, 12, 0, 0, 28672, 254, }, /* 749 */ + { 69, 18, 12, 0, 0, 28672, 254, }, /* 750 */ + { 69, 26, 12, 0, 0, 18432, 54, }, /* 751 */ + { 69, 26, 14, 0, 0, 28672, 256, }, /* 752 */ + { 68, 2, 12, 0, 0, 18432, 258, }, /* 753 */ + { 69, 26, 12, 0, 26, 18432, 260, }, /* 754 */ + { 69, 26, 14, 0, 26, 18432, 262, }, /* 755 */ + { 69, 26, 12, 0, -26, 18432, 264, }, /* 756 */ + { 69, 25, 14, 0, 0, 28672, 266, }, /* 757 */ + { 69, 26, 14, 0, 0, 28672, 268, }, /* 758 */ + { 69, 26, 14, 0, 0, 28672, 270, }, /* 759 */ + { 69, 25, 14, 0, 0, 28672, 268, }, /* 760 */ + { 69, 26, 14, 0, 0, 18432, 256, }, /* 761 */ + { 69, 26, 14, 0, 0, 28672, 272, }, /* 762 */ + { 88, 26, 12, 0, 0, 18432, 54, }, /* 763 */ + { 69, 26, 12, 0, 0, 28672, 216, }, /* 764 */ + { 35, 9, 12, 0, 48, 18432, 74, }, /* 765 */ + { 35, 5, 12, 0, -48, 18432, 76, }, /* 766 */ + { 0, 9, 12, 0, -10743, 18432, 74, }, /* 767 */ + { 0, 9, 12, 0, -3814, 18432, 74, }, /* 768 */ + { 0, 9, 12, 0, -10727, 18432, 74, }, /* 769 */ + { 0, 5, 12, 0, -10795, 18432, 76, }, /* 770 */ + { 0, 5, 12, 0, -10792, 18432, 76, }, /* 771 */ + { 0, 9, 12, 0, -10780, 18432, 74, }, /* 772 */ + { 0, 9, 12, 0, -10749, 18432, 74, }, /* 773 */ + { 0, 9, 12, 0, -10783, 18432, 74, }, /* 774 */ + { 0, 9, 12, 0, -10782, 18432, 74, }, /* 775 */ + { 0, 9, 12, 0, -10815, 18432, 74, }, /* 776 */ + { 34, 5, 12, 0, 0, 18432, 60, }, /* 777 */ + { 34, 26, 12, 0, 0, 28672, 68, }, /* 778 */ + { 34, 12, 3, 0, 0, 26624, 96, }, /* 779 */ + { 34, 21, 12, 0, 0, 28672, 68, }, /* 780 */ + { 34, 15, 12, 0, 0, 28672, 68, }, /* 781 */ + { 17, 5, 12, 0, -7264, 18432, 76, }, /* 782 */ + { 90, 7, 12, 0, 0, 18432, 82, }, /* 783 */ + { 90, 6, 12, 0, 0, 18432, 142, }, /* 784 */ + { 90, 21, 12, 0, 0, 18432, 68, }, /* 785 */ + { 90, 12, 3, 0, 0, 26624, 182, }, /* 786 */ + { 2, 12, 3, 0, 0, 26624, 130, }, /* 787 */ + { 69, 20, 12, 0, 0, 28672, 216, }, /* 788 */ + { 69, 19, 12, 0, 0, 28672, 216, }, /* 789 */ + { 69, 6, 12, 0, 0, 28672, 274, }, /* 790 */ + { 69, 21, 12, 0, 0, 28672, 276, }, /* 791 */ + { 69, 21, 12, 0, 0, 28726, 54, }, /* 792 */ + { 23, 26, 12, 0, 0, 28672, 278, }, /* 793 */ + { 69, 26, 12, 0, 0, 28672, 280, }, /* 794 */ + { 69, 26, 12, 0, 0, 28672, 282, }, /* 795 */ + { 69, 21, 12, 0, 0, 28825, 276, }, /* 796 */ + { 69, 21, 12, 0, 0, 28825, 212, }, /* 797 */ + { 69, 21, 12, 0, 0, 28819, 54, }, /* 798 */ + { 23, 6, 12, 0, 0, 18432, 136, }, /* 799 */ + { 69, 7, 12, 0, 0, 18447, 284, }, /* 800 */ + { 23, 14, 12, 0, 0, 18432, 284, }, /* 801 */ + { 69, 22, 12, 0, 0, 28825, 216, }, /* 802 */ + { 69, 18, 12, 0, 0, 28825, 216, }, /* 803 */ + { 69, 22, 12, 0, 0, 28825, 62, }, /* 804 */ + { 69, 18, 12, 0, 0, 28825, 62, }, /* 805 */ + { 69, 26, 12, 0, 0, 28819, 54, }, /* 806 */ + { 69, 17, 12, 0, 0, 28819, 202, }, /* 807 */ + { 69, 22, 12, 0, 0, 28819, 206, }, /* 808 */ + { 69, 18, 12, 0, 0, 28819, 206, }, /* 809 */ + { 84, 12, 3, 0, 0, 26669, 96, }, /* 810 */ + { 18, 10, 3, 0, 0, 18432, 286, }, /* 811 */ + { 69, 17, 14, 0, 0, 28819, 288, }, /* 812 */ + { 69, 6, 12, 0, 0, 18525, 136, }, /* 813 */ + { 69, 26, 12, 0, 0, 28819, 68, }, /* 814 */ + { 23, 6, 12, 0, 0, 18432, 142, }, /* 815 */ + { 69, 7, 12, 0, 0, 18564, 82, }, /* 816 */ + { 69, 21, 14, 0, 0, 28804, 236, }, /* 817 */ + { 69, 26, 12, 0, 0, 28687, 68, }, /* 818 */ + { 20, 7, 12, 0, 0, 18432, 82, }, /* 819 */ + { 84, 12, 3, 0, 0, 26717, 96, }, /* 820 */ + { 69, 24, 12, 0, 0, 28765, 290, }, /* 821 */ + { 20, 6, 12, 0, 0, 18432, 136, }, /* 822 */ + { 69, 17, 12, 0, 0, 28765, 126, }, /* 823 */ + { 21, 7, 12, 0, 0, 18432, 82, }, /* 824 */ + { 69, 21, 12, 0, 0, 28825, 68, }, /* 825 */ + { 69, 6, 12, 0, 0, 18525, 94, }, /* 826 */ + { 21, 6, 12, 0, 0, 18432, 136, }, /* 827 */ + { 22, 7, 12, 0, 0, 18432, 82, }, /* 828 */ + { 18, 7, 12, 0, 0, 18432, 82, }, /* 829 */ + { 18, 7, 12, 0, 0, 18432, 168, }, /* 830 */ + { 69, 26, 12, 0, 0, 18447, 68, }, /* 831 */ + { 69, 15, 12, 0, 0, 18447, 68, }, /* 832 */ + { 18, 26, 12, 0, 0, 18432, 68, }, /* 833 */ + { 18, 26, 12, 0, 0, 28672, 68, }, /* 834 */ + { 69, 15, 12, 0, 0, 18432, 68, }, /* 835 */ + { 69, 26, 14, 0, 0, 18447, 236, }, /* 836 */ + { 21, 26, 12, 0, 0, 18432, 68, }, /* 837 */ + { 23, 7, 12, 0, 0, 18432, 292, }, /* 838 */ + { 24, 7, 12, 0, 0, 18432, 82, }, /* 839 */ + { 24, 6, 12, 0, 0, 18432, 136, }, /* 840 */ + { 24, 26, 12, 0, 0, 28672, 68, }, /* 841 */ + { 111, 7, 12, 0, 0, 18432, 82, }, /* 842 */ + { 111, 6, 12, 0, 0, 18432, 142, }, /* 843 */ + { 111, 21, 12, 0, 0, 18432, 106, }, /* 844 */ + { 111, 21, 12, 0, 0, 18432, 124, }, /* 845 */ + { 99, 7, 12, 0, 0, 18432, 82, }, /* 846 */ + { 99, 6, 12, 0, 0, 18432, 136, }, /* 847 */ + { 99, 21, 12, 0, 0, 28672, 106, }, /* 848 */ + { 99, 21, 12, 0, 0, 28672, 124, }, /* 849 */ + { 99, 13, 12, 0, 0, 18432, 138, }, /* 850 */ + { 2, 9, 12, 108, 1, 18432, 74, }, /* 851 */ + { 2, 5, 12, 108, -35267, 18432, 76, }, /* 852 */ + { 2, 7, 12, 0, 0, 18432, 82, }, /* 853 */ + { 2, 21, 12, 0, 0, 28672, 68, }, /* 854 */ + { 2, 12, 3, 0, 0, 26624, 96, }, /* 855 */ + { 2, 6, 12, 0, 0, 28672, 92, }, /* 856 */ + { 2, 6, 12, 0, 0, 18432, 88, }, /* 857 */ + { 112, 7, 12, 0, 0, 18432, 82, }, /* 858 */ + { 112, 14, 12, 0, 0, 18432, 82, }, /* 859 */ + { 112, 12, 3, 0, 0, 26624, 96, }, /* 860 */ + { 112, 21, 12, 0, 0, 18432, 68, }, /* 861 */ + { 112, 21, 12, 0, 0, 18432, 124, }, /* 862 */ + { 112, 21, 12, 0, 0, 18432, 106, }, /* 863 */ + { 69, 24, 12, 0, 0, 28762, 56, }, /* 864 */ + { 0, 9, 12, 0, -35332, 18432, 74, }, /* 865 */ + { 69, 24, 12, 0, 0, 18432, 56, }, /* 866 */ + { 0, 9, 12, 0, -42280, 18432, 74, }, /* 867 */ + { 0, 5, 12, 0, 48, 18432, 76, }, /* 868 */ + { 0, 9, 12, 0, -42308, 18432, 74, }, /* 869 */ + { 0, 9, 12, 0, -42319, 18432, 74, }, /* 870 */ + { 0, 9, 12, 0, -42315, 18432, 74, }, /* 871 */ + { 0, 9, 12, 0, -42305, 18432, 74, }, /* 872 */ + { 0, 9, 12, 0, -42258, 18432, 74, }, /* 873 */ + { 0, 9, 12, 0, -42282, 18432, 74, }, /* 874 */ + { 0, 9, 12, 0, -42261, 18432, 74, }, /* 875 */ + { 0, 9, 12, 0, 928, 18432, 74, }, /* 876 */ + { 0, 9, 12, 0, -48, 18432, 74, }, /* 877 */ + { 0, 9, 12, 0, -42307, 18432, 74, }, /* 878 */ + { 0, 9, 12, 0, -35384, 18432, 74, }, /* 879 */ + { 0, 6, 12, 0, 0, 18432, 142, }, /* 880 */ + { 36, 7, 12, 0, 0, 18432, 82, }, /* 881 */ + { 36, 12, 3, 0, 0, 26624, 130, }, /* 882 */ + { 36, 12, 3, 0, 0, 26624, 182, }, /* 883 */ + { 36, 10, 5, 0, 0, 18432, 144, }, /* 884 */ + { 36, 26, 12, 0, 0, 28672, 68, }, /* 885 */ + { 69, 15, 12, 0, 0, 18612, 68, }, /* 886 */ + { 69, 15, 12, 0, 0, 18609, 68, }, /* 887 */ + { 69, 26, 12, 0, 0, 18600, 68, }, /* 888 */ + { 69, 23, 12, 0, 0, 14504, 68, }, /* 889 */ + { 69, 26, 12, 0, 0, 14504, 68, }, /* 890 */ + { 37, 7, 12, 0, 0, 18432, 82, }, /* 891 */ + { 37, 21, 12, 0, 0, 28672, 68, }, /* 892 */ + { 37, 21, 12, 0, 0, 28672, 124, }, /* 893 */ + { 100, 10, 5, 0, 0, 18432, 144, }, /* 894 */ + { 100, 7, 12, 0, 0, 18432, 82, }, /* 895 */ + { 100, 12, 3, 0, 0, 26624, 146, }, /* 896 */ + { 100, 12, 3, 0, 0, 26624, 130, }, /* 897 */ + { 100, 21, 12, 0, 0, 18432, 124, }, /* 898 */ + { 100, 13, 12, 0, 0, 18432, 138, }, /* 899 */ + { 6, 12, 3, 0, 0, 26666, 96, }, /* 900 */ + { 6, 7, 12, 0, 0, 18507, 82, }, /* 901 */ + { 39, 13, 12, 0, 0, 18432, 138, }, /* 902 */ + { 39, 7, 12, 0, 0, 18432, 82, }, /* 903 */ + { 39, 12, 3, 0, 0, 26624, 130, }, /* 904 */ + { 39, 12, 3, 0, 0, 26624, 96, }, /* 905 */ + { 69, 21, 12, 0, 0, 18567, 188, }, /* 906 */ + { 39, 21, 12, 0, 0, 18432, 124, }, /* 907 */ + { 101, 7, 12, 0, 0, 18432, 82, }, /* 908 */ + { 101, 12, 3, 0, 0, 26624, 130, }, /* 909 */ + { 101, 10, 5, 0, 0, 18432, 144, }, /* 910 */ + { 101, 10, 5, 0, 0, 18432, 172, }, /* 911 */ + { 101, 21, 12, 0, 0, 18432, 68, }, /* 912 */ + { 40, 12, 3, 0, 0, 26624, 130, }, /* 913 */ + { 40, 10, 5, 0, 0, 18432, 144, }, /* 914 */ + { 40, 7, 12, 0, 0, 18432, 82, }, /* 915 */ + { 40, 12, 3, 0, 0, 26624, 96, }, /* 916 */ + { 40, 10, 5, 0, 0, 18432, 172, }, /* 917 */ + { 40, 21, 12, 0, 0, 18432, 68, }, /* 918 */ + { 40, 21, 12, 0, 0, 18432, 106, }, /* 919 */ + { 40, 21, 12, 0, 0, 18432, 124, }, /* 920 */ + { 69, 6, 12, 0, 0, 18480, 136, }, /* 921 */ + { 40, 13, 12, 0, 0, 18432, 138, }, /* 922 */ + { 16, 6, 12, 0, 0, 18432, 136, }, /* 923 */ + { 105, 7, 12, 0, 0, 18432, 82, }, /* 924 */ + { 105, 12, 3, 0, 0, 26624, 130, }, /* 925 */ + { 105, 10, 5, 0, 0, 18432, 144, }, /* 926 */ + { 105, 13, 12, 0, 0, 18432, 138, }, /* 927 */ + { 105, 21, 12, 0, 0, 18432, 68, }, /* 928 */ + { 105, 21, 12, 0, 0, 18432, 124, }, /* 929 */ + { 107, 7, 12, 0, 0, 18432, 82, }, /* 930 */ + { 107, 12, 3, 0, 0, 26624, 130, }, /* 931 */ + { 107, 7, 12, 0, 0, 18432, 156, }, /* 932 */ + { 107, 12, 3, 0, 0, 26624, 96, }, /* 933 */ + { 107, 7, 12, 0, 0, 18432, 294, }, /* 934 */ + { 107, 6, 12, 0, 0, 18432, 136, }, /* 935 */ + { 107, 21, 12, 0, 0, 18432, 68, }, /* 936 */ + { 107, 21, 12, 0, 0, 18432, 106, }, /* 937 */ + { 113, 7, 12, 0, 0, 18432, 82, }, /* 938 */ + { 113, 10, 5, 0, 0, 18432, 144, }, /* 939 */ + { 113, 12, 3, 0, 0, 26624, 130, }, /* 940 */ + { 113, 21, 12, 0, 0, 18432, 124, }, /* 941 */ + { 113, 6, 12, 0, 0, 18432, 136, }, /* 942 */ + { 113, 12, 3, 0, 0, 26624, 146, }, /* 943 */ + { 0, 5, 12, 0, -928, 18432, 76, }, /* 944 */ + { 0, 6, 12, 0, 0, 18432, 92, }, /* 945 */ + { 76, 5, 12, 0, -38864, 18432, 70, }, /* 946 */ + { 113, 10, 5, 0, 0, 18432, 160, }, /* 947 */ + { 113, 13, 12, 0, 0, 18432, 138, }, /* 948 */ + { 18, 7, 9, 0, 0, 18432, 82, }, /* 949 */ + { 18, 7, 10, 0, 0, 18432, 82, }, /* 950 */ + { 68, 4, 12, 0, 0, 18432, 0, }, /* 951 */ + { 68, 3, 12, 0, 0, 18432, 0, }, /* 952 */ + { 23, 7, 12, 0, 0, 18432, 284, }, /* 953 */ + { 71, 25, 12, 0, 0, 12288, 118, }, /* 954 */ + { 3, 7, 12, 0, 0, 0, 296, }, /* 955 */ + { 69, 18, 12, 0, 0, 28705, 54, }, /* 956 */ + { 69, 22, 12, 0, 0, 28705, 54, }, /* 957 */ + { 68, 2, 12, 0, 0, 6144, 298, }, /* 958 */ + { 3, 7, 12, 0, 0, 39, 82, }, /* 959 */ + { 3, 26, 12, 0, 0, 28711, 68, }, /* 960 */ + { 84, 12, 3, 0, 0, 26624, 178, }, /* 961 */ + { 84, 12, 3, 0, 0, 26624, 300, }, /* 962 */ + { 69, 21, 12, 0, 0, 28672, 68, }, /* 963 */ + { 69, 21, 12, 0, 0, 28672, 122, }, /* 964 */ + { 69, 22, 12, 0, 0, 28672, 68, }, /* 965 */ + { 69, 18, 12, 0, 0, 28672, 68, }, /* 966 */ + { 69, 17, 12, 0, 0, 28672, 126, }, /* 967 */ + { 69, 22, 12, 0, 0, 28672, 302, }, /* 968 */ + { 69, 18, 12, 0, 0, 28672, 302, }, /* 969 */ + { 69, 21, 12, 0, 0, 8192, 106, }, /* 970 */ + { 69, 21, 12, 0, 0, 8192, 304, }, /* 971 */ + { 69, 21, 12, 0, 0, 8192, 306, }, /* 972 */ + { 69, 21, 12, 0, 0, 28672, 124, }, /* 973 */ + { 69, 22, 12, 0, 0, 28672, 158, }, /* 974 */ + { 69, 18, 12, 0, 0, 28672, 158, }, /* 975 */ + { 69, 21, 12, 0, 0, 14336, 68, }, /* 976 */ + { 69, 21, 12, 0, 0, 28672, 118, }, /* 977 */ + { 69, 17, 12, 0, 0, 12288, 224, }, /* 978 */ + { 69, 25, 12, 0, 0, 28672, 226, }, /* 979 */ + { 69, 21, 12, 0, 0, 28672, 302, }, /* 980 */ + { 69, 21, 12, 0, 0, 28672, 308, }, /* 981 */ + { 69, 17, 12, 0, 0, 12288, 126, }, /* 982 */ + { 69, 21, 12, 0, 0, 8192, 68, }, /* 983 */ + { 69, 13, 12, 0, 0, 10240, 310, }, /* 984 */ + { 0, 9, 12, 0, 32, 18432, 312, }, /* 985 */ + { 69, 24, 12, 0, 0, 28672, 314, }, /* 986 */ + { 0, 5, 12, 0, -32, 18432, 316, }, /* 987 */ + { 69, 21, 12, 0, 0, 28825, 124, }, /* 988 */ + { 69, 22, 12, 0, 0, 28825, 318, }, /* 989 */ + { 69, 18, 12, 0, 0, 28825, 318, }, /* 990 */ + { 69, 21, 12, 0, 0, 28825, 106, }, /* 991 */ + { 69, 6, 3, 0, 0, 18525, 320, }, /* 992 */ + { 69, 1, 2, 0, 0, 28672, 322, }, /* 993 */ + { 31, 7, 12, 0, 0, 18432, 82, }, /* 994 */ + { 69, 21, 12, 0, 0, 18552, 68, }, /* 995 */ + { 69, 21, 12, 0, 0, 28792, 68, }, /* 996 */ + { 69, 21, 12, 0, 0, 18483, 68, }, /* 997 */ + { 69, 15, 12, 0, 0, 18555, 68, }, /* 998 */ + { 69, 26, 12, 0, 0, 18483, 68, }, /* 999 */ + { 1, 14, 12, 0, 0, 28672, 82, }, /* 1000 */ + { 1, 15, 12, 0, 0, 28672, 68, }, /* 1001 */ + { 1, 26, 12, 0, 0, 28672, 68, }, /* 1002 */ + { 1, 26, 12, 0, 0, 18432, 68, }, /* 1003 */ + { 102, 7, 12, 0, 0, 18432, 82, }, /* 1004 */ + { 103, 7, 12, 0, 0, 18432, 82, }, /* 1005 */ + { 84, 12, 3, 0, 0, 26651, 96, }, /* 1006 */ + { 69, 15, 12, 0, 0, 10267, 68, }, /* 1007 */ + { 81, 7, 12, 0, 0, 18432, 82, }, /* 1008 */ + { 81, 15, 12, 0, 0, 18432, 68, }, /* 1009 */ + { 82, 7, 12, 0, 0, 18432, 82, }, /* 1010 */ + { 82, 14, 12, 0, 0, 18432, 82, }, /* 1011 */ + { 53, 7, 12, 0, 0, 18432, 82, }, /* 1012 */ + { 53, 12, 3, 0, 0, 26624, 130, }, /* 1013 */ + { 85, 7, 12, 0, 0, 18432, 82, }, /* 1014 */ + { 85, 21, 12, 0, 0, 18432, 106, }, /* 1015 */ + { 91, 7, 12, 0, 0, 18432, 82, }, /* 1016 */ + { 91, 21, 12, 0, 0, 18432, 106, }, /* 1017 */ + { 91, 14, 12, 0, 0, 18432, 82, }, /* 1018 */ + { 83, 9, 12, 0, 40, 18432, 74, }, /* 1019 */ + { 83, 5, 12, 0, -40, 18432, 76, }, /* 1020 */ + { 86, 7, 12, 0, 0, 18432, 82, }, /* 1021 */ + { 87, 7, 12, 0, 0, 18432, 82, }, /* 1022 */ + { 87, 13, 12, 0, 0, 18432, 138, }, /* 1023 */ + { 145, 9, 12, 0, 40, 18432, 74, }, /* 1024 */ + { 145, 5, 12, 0, -40, 18432, 76, }, /* 1025 */ + { 127, 7, 12, 0, 0, 18432, 82, }, /* 1026 */ + { 125, 7, 12, 0, 0, 18432, 82, }, /* 1027 */ + { 125, 21, 12, 0, 0, 18432, 68, }, /* 1028 */ + { 161, 9, 12, 0, 39, 18432, 74, }, /* 1029 */ + { 161, 5, 12, 0, -39, 18432, 76, }, /* 1030 */ + { 49, 7, 12, 0, 0, 18432, 82, }, /* 1031 */ + { 0, 6, 12, 0, 0, 18432, 94, }, /* 1032 */ + { 32, 7, 12, 0, 0, 34816, 82, }, /* 1033 */ + { 114, 7, 12, 0, 0, 34816, 82, }, /* 1034 */ + { 114, 21, 12, 0, 0, 34816, 106, }, /* 1035 */ + { 114, 15, 12, 0, 0, 34816, 68, }, /* 1036 */ + { 133, 7, 12, 0, 0, 34816, 82, }, /* 1037 */ + { 133, 26, 12, 0, 0, 34816, 68, }, /* 1038 */ + { 133, 15, 12, 0, 0, 34816, 68, }, /* 1039 */ + { 132, 7, 12, 0, 0, 34816, 82, }, /* 1040 */ + { 132, 15, 12, 0, 0, 34816, 68, }, /* 1041 */ + { 139, 7, 12, 0, 0, 34816, 82, }, /* 1042 */ + { 139, 15, 12, 0, 0, 34816, 68, }, /* 1043 */ + { 95, 7, 12, 0, 0, 34816, 82, }, /* 1044 */ + { 95, 15, 12, 0, 0, 34816, 68, }, /* 1045 */ + { 95, 21, 12, 0, 0, 28672, 106, }, /* 1046 */ + { 104, 7, 12, 0, 0, 34816, 82, }, /* 1047 */ + { 104, 21, 12, 0, 0, 34816, 68, }, /* 1048 */ + { 122, 7, 12, 0, 0, 34816, 82, }, /* 1049 */ + { 121, 7, 12, 0, 0, 34816, 82, }, /* 1050 */ + { 121, 15, 12, 0, 0, 34816, 68, }, /* 1051 */ + { 92, 7, 12, 0, 0, 34816, 82, }, /* 1052 */ + { 92, 12, 3, 0, 0, 26624, 130, }, /* 1053 */ + { 92, 12, 3, 0, 0, 26624, 102, }, /* 1054 */ + { 92, 12, 3, 0, 0, 26624, 182, }, /* 1055 */ + { 92, 15, 12, 0, 0, 34816, 68, }, /* 1056 */ + { 92, 21, 12, 0, 0, 34816, 68, }, /* 1057 */ + { 92, 21, 12, 0, 0, 34816, 124, }, /* 1058 */ + { 115, 7, 12, 0, 0, 34816, 82, }, /* 1059 */ + { 115, 15, 12, 0, 0, 34816, 68, }, /* 1060 */ + { 115, 21, 12, 0, 0, 34816, 68, }, /* 1061 */ + { 131, 7, 12, 0, 0, 34816, 82, }, /* 1062 */ + { 131, 15, 12, 0, 0, 34816, 68, }, /* 1063 */ + { 51, 7, 12, 0, 0, 34816, 82, }, /* 1064 */ + { 51, 26, 12, 0, 0, 34816, 68, }, /* 1065 */ + { 51, 12, 3, 0, 0, 26624, 96, }, /* 1066 */ + { 51, 15, 12, 0, 0, 34816, 68, }, /* 1067 */ + { 51, 21, 12, 0, 0, 34816, 106, }, /* 1068 */ + { 51, 21, 12, 0, 0, 34918, 106, }, /* 1069 */ + { 51, 21, 12, 0, 0, 34816, 68, }, /* 1070 */ + { 108, 7, 12, 0, 0, 34816, 82, }, /* 1071 */ + { 108, 21, 12, 0, 0, 28672, 68, }, /* 1072 */ + { 108, 21, 12, 0, 0, 28672, 106, }, /* 1073 */ + { 116, 7, 12, 0, 0, 34816, 82, }, /* 1074 */ + { 116, 15, 12, 0, 0, 34816, 68, }, /* 1075 */ + { 117, 7, 12, 0, 0, 34816, 82, }, /* 1076 */ + { 117, 15, 12, 0, 0, 34816, 68, }, /* 1077 */ + { 54, 7, 12, 0, 0, 34816, 82, }, /* 1078 */ + { 54, 21, 12, 0, 0, 34816, 106, }, /* 1079 */ + { 54, 15, 12, 0, 0, 34816, 68, }, /* 1080 */ + { 118, 7, 12, 0, 0, 34816, 82, }, /* 1081 */ + { 140, 9, 12, 0, 64, 34816, 74, }, /* 1082 */ + { 140, 5, 12, 0, -64, 34816, 76, }, /* 1083 */ + { 140, 15, 12, 0, 0, 34816, 68, }, /* 1084 */ + { 62, 7, 12, 0, 0, 0, 82, }, /* 1085 */ + { 62, 7, 12, 0, 0, 0, 294, }, /* 1086 */ + { 62, 12, 3, 0, 0, 26624, 128, }, /* 1087 */ + { 62, 13, 12, 0, 0, 2048, 138, }, /* 1088 */ + { 3, 15, 12, 0, 0, 2048, 68, }, /* 1089 */ + { 65, 7, 12, 0, 0, 34816, 82, }, /* 1090 */ + { 65, 12, 3, 0, 0, 26624, 130, }, /* 1091 */ + { 65, 17, 12, 0, 0, 34816, 126, }, /* 1092 */ + { 152, 7, 12, 0, 0, 34816, 82, }, /* 1093 */ + { 152, 15, 12, 0, 0, 34816, 68, }, /* 1094 */ + { 63, 7, 12, 0, 0, 0, 82, }, /* 1095 */ + { 63, 12, 3, 0, 0, 26624, 96, }, /* 1096 */ + { 63, 15, 12, 0, 0, 0, 68, }, /* 1097 */ + { 63, 21, 12, 0, 0, 0, 124, }, /* 1098 */ + { 67, 7, 12, 0, 0, 34816, 82, }, /* 1099 */ + { 67, 12, 3, 0, 0, 26624, 96, }, /* 1100 */ + { 67, 21, 12, 0, 0, 34816, 124, }, /* 1101 */ + { 156, 7, 12, 0, 0, 34816, 82, }, /* 1102 */ + { 156, 15, 12, 0, 0, 34816, 68, }, /* 1103 */ + { 153, 7, 12, 0, 0, 34816, 82, }, /* 1104 */ + { 120, 10, 5, 0, 0, 18432, 144, }, /* 1105 */ + { 120, 12, 3, 0, 0, 26624, 130, }, /* 1106 */ + { 120, 7, 12, 0, 0, 18432, 82, }, /* 1107 */ + { 120, 12, 3, 0, 0, 26624, 146, }, /* 1108 */ + { 120, 21, 12, 0, 0, 18432, 124, }, /* 1109 */ + { 120, 21, 12, 0, 0, 18432, 106, }, /* 1110 */ + { 120, 15, 12, 0, 0, 28672, 68, }, /* 1111 */ + { 120, 13, 12, 0, 0, 18432, 138, }, /* 1112 */ + { 120, 12, 3, 0, 0, 26624, 182, }, /* 1113 */ + { 41, 12, 3, 0, 0, 26624, 102, }, /* 1114 */ + { 41, 10, 5, 0, 0, 18432, 144, }, /* 1115 */ + { 41, 7, 12, 0, 0, 18432, 82, }, /* 1116 */ + { 41, 12, 3, 0, 0, 26624, 130, }, /* 1117 */ + { 41, 12, 3, 0, 0, 26624, 146, }, /* 1118 */ + { 41, 12, 3, 0, 0, 26624, 96, }, /* 1119 */ + { 41, 21, 12, 0, 0, 18432, 68, }, /* 1120 */ + { 41, 1, 4, 0, 0, 18432, 132, }, /* 1121 */ + { 41, 21, 12, 0, 0, 18432, 124, }, /* 1122 */ + { 124, 7, 12, 0, 0, 18432, 82, }, /* 1123 */ + { 124, 13, 12, 0, 0, 18432, 138, }, /* 1124 */ + { 43, 12, 3, 0, 0, 26624, 130, }, /* 1125 */ + { 43, 7, 12, 0, 0, 18432, 82, }, /* 1126 */ + { 43, 10, 5, 0, 0, 18432, 144, }, /* 1127 */ + { 43, 12, 3, 0, 0, 26624, 146, }, /* 1128 */ + { 43, 13, 12, 0, 0, 18432, 138, }, /* 1129 */ + { 43, 21, 12, 0, 0, 18432, 68, }, /* 1130 */ + { 43, 21, 12, 0, 0, 18432, 124, }, /* 1131 */ + { 50, 7, 12, 0, 0, 18432, 82, }, /* 1132 */ + { 50, 12, 3, 0, 0, 26624, 96, }, /* 1133 */ + { 50, 21, 12, 0, 0, 18432, 68, }, /* 1134 */ + { 44, 12, 3, 0, 0, 26624, 130, }, /* 1135 */ + { 44, 10, 5, 0, 0, 18432, 144, }, /* 1136 */ + { 44, 7, 12, 0, 0, 18432, 82, }, /* 1137 */ + { 44, 10, 5, 0, 0, 18432, 172, }, /* 1138 */ + { 44, 7, 4, 0, 0, 18432, 82, }, /* 1139 */ + { 44, 21, 12, 0, 0, 18432, 124, }, /* 1140 */ + { 44, 21, 12, 0, 0, 18432, 68, }, /* 1141 */ + { 44, 12, 3, 0, 0, 26624, 102, }, /* 1142 */ + { 44, 12, 3, 0, 0, 26624, 96, }, /* 1143 */ + { 44, 13, 12, 0, 0, 18432, 138, }, /* 1144 */ + { 15, 15, 12, 0, 0, 18432, 68, }, /* 1145 */ + { 48, 7, 12, 0, 0, 18432, 82, }, /* 1146 */ + { 48, 10, 5, 0, 0, 18432, 144, }, /* 1147 */ + { 48, 12, 3, 0, 0, 26624, 130, }, /* 1148 */ + { 48, 10, 5, 0, 0, 18432, 172, }, /* 1149 */ + { 48, 12, 3, 0, 0, 26624, 96, }, /* 1150 */ + { 48, 21, 12, 0, 0, 18432, 124, }, /* 1151 */ + { 48, 21, 12, 0, 0, 18432, 106, }, /* 1152 */ + { 48, 21, 12, 0, 0, 18432, 68, }, /* 1153 */ + { 57, 7, 12, 0, 0, 18432, 82, }, /* 1154 */ + { 57, 21, 12, 0, 0, 18432, 124, }, /* 1155 */ + { 55, 7, 12, 0, 0, 18432, 82, }, /* 1156 */ + { 55, 12, 3, 0, 0, 26624, 130, }, /* 1157 */ + { 55, 10, 5, 0, 0, 18432, 144, }, /* 1158 */ + { 55, 12, 3, 0, 0, 26624, 96, }, /* 1159 */ + { 55, 12, 3, 0, 0, 26624, 146, }, /* 1160 */ + { 55, 13, 12, 0, 0, 18432, 138, }, /* 1161 */ + { 47, 12, 3, 0, 0, 26624, 130, }, /* 1162 */ + { 47, 12, 3, 0, 0, 26705, 130, }, /* 1163 */ + { 47, 10, 5, 0, 0, 18432, 144, }, /* 1164 */ + { 47, 10, 5, 0, 0, 18513, 144, }, /* 1165 */ + { 47, 7, 12, 0, 0, 18432, 82, }, /* 1166 */ + { 84, 12, 3, 0, 0, 26705, 102, }, /* 1167 */ + { 47, 12, 3, 0, 0, 26705, 96, }, /* 1168 */ + { 47, 10, 3, 0, 0, 18432, 148, }, /* 1169 */ + { 47, 10, 5, 0, 0, 18432, 172, }, /* 1170 */ + { 47, 7, 12, 0, 0, 18432, 324, }, /* 1171 */ + { 47, 12, 3, 0, 0, 26624, 96, }, /* 1172 */ + { 144, 7, 12, 0, 0, 18432, 82, }, /* 1173 */ + { 144, 10, 5, 0, 0, 18432, 144, }, /* 1174 */ + { 144, 12, 3, 0, 0, 26624, 130, }, /* 1175 */ + { 144, 12, 3, 0, 0, 26624, 146, }, /* 1176 */ + { 144, 12, 3, 0, 0, 26624, 96, }, /* 1177 */ + { 144, 21, 12, 0, 0, 18432, 124, }, /* 1178 */ + { 144, 21, 12, 0, 0, 18432, 106, }, /* 1179 */ + { 144, 21, 12, 0, 0, 18432, 68, }, /* 1180 */ + { 144, 13, 12, 0, 0, 18432, 138, }, /* 1181 */ + { 144, 12, 3, 0, 0, 26624, 102, }, /* 1182 */ + { 56, 7, 12, 0, 0, 18432, 82, }, /* 1183 */ + { 56, 10, 3, 0, 0, 18432, 148, }, /* 1184 */ + { 56, 10, 5, 0, 0, 18432, 144, }, /* 1185 */ + { 56, 12, 3, 0, 0, 26624, 130, }, /* 1186 */ + { 56, 12, 3, 0, 0, 26624, 146, }, /* 1187 */ + { 56, 12, 3, 0, 0, 26624, 96, }, /* 1188 */ + { 56, 21, 12, 0, 0, 18432, 68, }, /* 1189 */ + { 56, 13, 12, 0, 0, 18432, 138, }, /* 1190 */ + { 135, 7, 12, 0, 0, 18432, 82, }, /* 1191 */ + { 135, 10, 3, 0, 0, 18432, 148, }, /* 1192 */ + { 135, 10, 5, 0, 0, 18432, 144, }, /* 1193 */ + { 135, 12, 3, 0, 0, 26624, 130, }, /* 1194 */ + { 135, 12, 3, 0, 0, 26624, 146, }, /* 1195 */ + { 135, 12, 3, 0, 0, 26624, 96, }, /* 1196 */ + { 135, 21, 12, 0, 0, 18432, 68, }, /* 1197 */ + { 135, 21, 12, 0, 0, 18432, 124, }, /* 1198 */ + { 135, 21, 12, 0, 0, 18432, 106, }, /* 1199 */ + { 135, 21, 12, 0, 0, 18432, 176, }, /* 1200 */ + { 52, 7, 12, 0, 0, 18432, 82, }, /* 1201 */ + { 52, 10, 5, 0, 0, 18432, 144, }, /* 1202 */ + { 52, 12, 3, 0, 0, 26624, 130, }, /* 1203 */ + { 52, 12, 3, 0, 0, 26624, 146, }, /* 1204 */ + { 52, 21, 12, 0, 0, 18432, 124, }, /* 1205 */ + { 52, 21, 12, 0, 0, 18432, 68, }, /* 1206 */ + { 52, 13, 12, 0, 0, 18432, 138, }, /* 1207 */ + { 45, 7, 12, 0, 0, 18432, 82, }, /* 1208 */ + { 45, 12, 3, 0, 0, 26624, 130, }, /* 1209 */ + { 45, 10, 5, 0, 0, 18432, 144, }, /* 1210 */ + { 45, 10, 5, 0, 0, 18432, 172, }, /* 1211 */ + { 45, 12, 3, 0, 0, 26624, 96, }, /* 1212 */ + { 45, 21, 12, 0, 0, 18432, 68, }, /* 1213 */ + { 45, 13, 12, 0, 0, 18432, 138, }, /* 1214 */ + { 137, 7, 12, 0, 0, 18432, 82, }, /* 1215 */ + { 137, 12, 3, 0, 0, 26624, 130, }, /* 1216 */ + { 137, 10, 12, 0, 0, 18432, 144, }, /* 1217 */ + { 137, 10, 5, 0, 0, 18432, 144, }, /* 1218 */ + { 137, 12, 3, 0, 0, 26624, 146, }, /* 1219 */ + { 137, 13, 12, 0, 0, 18432, 138, }, /* 1220 */ + { 137, 15, 12, 0, 0, 18432, 68, }, /* 1221 */ + { 137, 21, 12, 0, 0, 18432, 124, }, /* 1222 */ + { 137, 26, 12, 0, 0, 18432, 68, }, /* 1223 */ + { 60, 7, 12, 0, 0, 18432, 82, }, /* 1224 */ + { 60, 10, 5, 0, 0, 18432, 144, }, /* 1225 */ + { 60, 12, 3, 0, 0, 26624, 130, }, /* 1226 */ + { 60, 12, 3, 0, 0, 26624, 146, }, /* 1227 */ + { 60, 12, 3, 0, 0, 26624, 96, }, /* 1228 */ + { 60, 21, 12, 0, 0, 18432, 68, }, /* 1229 */ + { 136, 9, 12, 0, 32, 18432, 74, }, /* 1230 */ + { 136, 5, 12, 0, -32, 18432, 76, }, /* 1231 */ + { 136, 13, 12, 0, 0, 18432, 138, }, /* 1232 */ + { 136, 15, 12, 0, 0, 18432, 68, }, /* 1233 */ + { 136, 7, 12, 0, 0, 18432, 82, }, /* 1234 */ + { 157, 7, 12, 0, 0, 18432, 82, }, /* 1235 */ + { 157, 10, 3, 0, 0, 18432, 148, }, /* 1236 */ + { 157, 10, 5, 0, 0, 18432, 144, }, /* 1237 */ + { 157, 12, 3, 0, 0, 26624, 130, }, /* 1238 */ + { 157, 10, 5, 0, 0, 18432, 172, }, /* 1239 */ + { 157, 12, 3, 0, 0, 26624, 146, }, /* 1240 */ + { 157, 7, 4, 0, 0, 18432, 82, }, /* 1241 */ + { 157, 12, 3, 0, 0, 26624, 96, }, /* 1242 */ + { 157, 21, 12, 0, 0, 18432, 124, }, /* 1243 */ + { 157, 21, 12, 0, 0, 18432, 68, }, /* 1244 */ + { 157, 13, 12, 0, 0, 18432, 138, }, /* 1245 */ + { 64, 7, 12, 0, 0, 18432, 82, }, /* 1246 */ + { 64, 10, 5, 0, 0, 18432, 144, }, /* 1247 */ + { 64, 12, 3, 0, 0, 26624, 130, }, /* 1248 */ + { 64, 12, 3, 0, 0, 26624, 146, }, /* 1249 */ + { 64, 21, 12, 0, 0, 18432, 68, }, /* 1250 */ + { 149, 7, 12, 0, 0, 18432, 82, }, /* 1251 */ + { 149, 12, 3, 0, 0, 26624, 130, }, /* 1252 */ + { 149, 12, 3, 0, 0, 18432, 130, }, /* 1253 */ + { 149, 12, 3, 0, 0, 26624, 102, }, /* 1254 */ + { 149, 12, 3, 0, 0, 26624, 146, }, /* 1255 */ + { 149, 10, 5, 0, 0, 18432, 144, }, /* 1256 */ + { 149, 7, 4, 0, 0, 18432, 82, }, /* 1257 */ + { 149, 21, 12, 0, 0, 18432, 68, }, /* 1258 */ + { 149, 21, 12, 0, 0, 18432, 124, }, /* 1259 */ + { 148, 7, 12, 0, 0, 18432, 82, }, /* 1260 */ + { 148, 12, 3, 0, 0, 26624, 130, }, /* 1261 */ + { 148, 10, 5, 0, 0, 18432, 144, }, /* 1262 */ + { 148, 7, 4, 0, 0, 18432, 82, }, /* 1263 */ + { 148, 12, 3, 0, 0, 26624, 326, }, /* 1264 */ + { 148, 12, 3, 0, 0, 26624, 146, }, /* 1265 */ + { 148, 21, 12, 0, 0, 18432, 68, }, /* 1266 */ + { 148, 21, 12, 0, 0, 18432, 124, }, /* 1267 */ + { 148, 21, 12, 0, 0, 18432, 106, }, /* 1268 */ + { 134, 7, 12, 0, 0, 18432, 82, }, /* 1269 */ + { 142, 7, 12, 0, 0, 18432, 82, }, /* 1270 */ + { 142, 10, 5, 0, 0, 18432, 144, }, /* 1271 */ + { 142, 12, 3, 0, 0, 26624, 130, }, /* 1272 */ + { 142, 12, 3, 0, 0, 18432, 146, }, /* 1273 */ + { 142, 21, 12, 0, 0, 18432, 124, }, /* 1274 */ + { 142, 21, 12, 0, 0, 18432, 106, }, /* 1275 */ + { 142, 21, 12, 0, 0, 18432, 68, }, /* 1276 */ + { 142, 13, 12, 0, 0, 18432, 138, }, /* 1277 */ + { 142, 15, 12, 0, 0, 18432, 68, }, /* 1278 */ + { 143, 21, 12, 0, 0, 18432, 68, }, /* 1279 */ + { 143, 21, 12, 0, 0, 18432, 106, }, /* 1280 */ + { 143, 7, 12, 0, 0, 18432, 82, }, /* 1281 */ + { 143, 12, 3, 0, 0, 26624, 130, }, /* 1282 */ + { 143, 10, 5, 0, 0, 18432, 144, }, /* 1283 */ + { 59, 7, 12, 0, 0, 18432, 82, }, /* 1284 */ + { 59, 12, 3, 0, 0, 26624, 130, }, /* 1285 */ + { 59, 12, 3, 0, 0, 26624, 96, }, /* 1286 */ + { 59, 12, 3, 0, 0, 26624, 146, }, /* 1287 */ + { 59, 7, 4, 0, 0, 18432, 82, }, /* 1288 */ + { 59, 13, 12, 0, 0, 18432, 138, }, /* 1289 */ + { 61, 7, 12, 0, 0, 18432, 82, }, /* 1290 */ + { 61, 10, 5, 0, 0, 18432, 144, }, /* 1291 */ + { 61, 12, 3, 0, 0, 26624, 130, }, /* 1292 */ + { 61, 12, 3, 0, 0, 26624, 146, }, /* 1293 */ + { 61, 13, 12, 0, 0, 18432, 138, }, /* 1294 */ + { 150, 7, 12, 0, 0, 18432, 82, }, /* 1295 */ + { 150, 12, 3, 0, 0, 26624, 130, }, /* 1296 */ + { 150, 10, 5, 0, 0, 18432, 144, }, /* 1297 */ + { 150, 21, 12, 0, 0, 18432, 124, }, /* 1298 */ + { 11, 15, 12, 0, 0, 18432, 68, }, /* 1299 */ + { 11, 21, 12, 0, 0, 18432, 68, }, /* 1300 */ + { 94, 7, 12, 0, 0, 18432, 82, }, /* 1301 */ + { 94, 14, 12, 0, 0, 18432, 82, }, /* 1302 */ + { 94, 21, 12, 0, 0, 18432, 106, }, /* 1303 */ + { 66, 7, 12, 0, 0, 18432, 82, }, /* 1304 */ + { 66, 21, 12, 0, 0, 18432, 68, }, /* 1305 */ + { 109, 7, 12, 0, 0, 18432, 82, }, /* 1306 */ + { 109, 1, 2, 0, 0, 18432, 322, }, /* 1307 */ + { 138, 7, 12, 0, 0, 18432, 82, }, /* 1308 */ + { 130, 7, 12, 0, 0, 18432, 82, }, /* 1309 */ + { 130, 13, 12, 0, 0, 18432, 138, }, /* 1310 */ + { 130, 21, 12, 0, 0, 18432, 124, }, /* 1311 */ + { 159, 7, 12, 0, 0, 18432, 82, }, /* 1312 */ + { 159, 13, 12, 0, 0, 18432, 138, }, /* 1313 */ + { 126, 7, 12, 0, 0, 18432, 82, }, /* 1314 */ + { 126, 12, 3, 0, 0, 26624, 96, }, /* 1315 */ + { 126, 21, 12, 0, 0, 18432, 124, }, /* 1316 */ + { 128, 7, 12, 0, 0, 18432, 82, }, /* 1317 */ + { 128, 12, 3, 0, 0, 26624, 96, }, /* 1318 */ + { 128, 21, 12, 0, 0, 18432, 124, }, /* 1319 */ + { 128, 21, 12, 0, 0, 18432, 106, }, /* 1320 */ + { 128, 21, 12, 0, 0, 18432, 68, }, /* 1321 */ + { 128, 26, 12, 0, 0, 18432, 68, }, /* 1322 */ + { 128, 6, 12, 0, 0, 18432, 142, }, /* 1323 */ + { 128, 6, 12, 0, 0, 18432, 136, }, /* 1324 */ + { 128, 13, 12, 0, 0, 18432, 138, }, /* 1325 */ + { 128, 15, 12, 0, 0, 18432, 68, }, /* 1326 */ + { 151, 9, 12, 0, 32, 18432, 74, }, /* 1327 */ + { 151, 5, 12, 0, -32, 18432, 76, }, /* 1328 */ + { 151, 15, 12, 0, 0, 18432, 68, }, /* 1329 */ + { 151, 21, 12, 0, 0, 18432, 106, }, /* 1330 */ + { 151, 21, 12, 0, 0, 18432, 124, }, /* 1331 */ + { 151, 21, 12, 0, 0, 18432, 68, }, /* 1332 */ + { 123, 7, 12, 0, 0, 18432, 82, }, /* 1333 */ + { 123, 12, 3, 0, 0, 26624, 130, }, /* 1334 */ + { 123, 10, 5, 0, 0, 18432, 144, }, /* 1335 */ + { 123, 12, 3, 0, 0, 26624, 128, }, /* 1336 */ + { 123, 6, 12, 0, 0, 18432, 92, }, /* 1337 */ + { 146, 6, 12, 0, 0, 18432, 136, }, /* 1338 */ + { 147, 6, 12, 0, 0, 18432, 136, }, /* 1339 */ + { 23, 21, 12, 0, 0, 28672, 68, }, /* 1340 */ + { 158, 12, 3, 0, 0, 26624, 328, }, /* 1341 */ + { 23, 10, 5, 0, 0, 18432, 164, }, /* 1342 */ + { 146, 7, 12, 0, 0, 18432, 284, }, /* 1343 */ + { 158, 7, 12, 0, 0, 18432, 284, }, /* 1344 */ + { 21, 6, 12, 0, 0, 18432, 92, }, /* 1345 */ + { 147, 7, 12, 0, 0, 18432, 284, }, /* 1346 */ + { 46, 7, 12, 0, 0, 18432, 82, }, /* 1347 */ + { 46, 26, 12, 0, 0, 18432, 68, }, /* 1348 */ + { 46, 12, 3, 0, 0, 26624, 102, }, /* 1349 */ + { 46, 12, 3, 0, 0, 26624, 130, }, /* 1350 */ + { 46, 21, 12, 0, 0, 18432, 124, }, /* 1351 */ + { 69, 1, 2, 0, 0, 6153, 66, }, /* 1352 */ + { 69, 10, 3, 0, 0, 18432, 330, }, /* 1353 */ + { 69, 10, 5, 0, 0, 18432, 138, }, /* 1354 */ + { 69, 10, 5, 0, 0, 18432, 160, }, /* 1355 */ + { 69, 10, 3, 0, 0, 18432, 286, }, /* 1356 */ + { 1, 12, 3, 0, 0, 26624, 102, }, /* 1357 */ + { 69, 25, 12, 0, 0, 18432, 118, }, /* 1358 */ + { 69, 13, 12, 0, 0, 10240, 214, }, /* 1359 */ + { 141, 26, 12, 0, 0, 18432, 68, }, /* 1360 */ + { 141, 12, 3, 0, 0, 26624, 102, }, /* 1361 */ + { 141, 21, 12, 0, 0, 18432, 106, }, /* 1362 */ + { 141, 21, 12, 0, 0, 18432, 124, }, /* 1363 */ + { 141, 21, 12, 0, 0, 18432, 68, }, /* 1364 */ + { 35, 12, 3, 0, 0, 26624, 130, }, /* 1365 */ + { 154, 7, 12, 0, 0, 18432, 82, }, /* 1366 */ + { 154, 12, 3, 0, 0, 26624, 96, }, /* 1367 */ + { 154, 6, 12, 0, 0, 18432, 142, }, /* 1368 */ + { 154, 6, 12, 0, 0, 18432, 136, }, /* 1369 */ + { 154, 13, 12, 0, 0, 18432, 138, }, /* 1370 */ + { 154, 26, 12, 0, 0, 18432, 68, }, /* 1371 */ + { 160, 7, 12, 0, 0, 18432, 82, }, /* 1372 */ + { 160, 12, 3, 0, 0, 26624, 96, }, /* 1373 */ + { 155, 7, 12, 0, 0, 18432, 82, }, /* 1374 */ + { 155, 12, 3, 0, 0, 26624, 96, }, /* 1375 */ + { 155, 13, 12, 0, 0, 18432, 138, }, /* 1376 */ + { 155, 23, 12, 0, 0, 14336, 68, }, /* 1377 */ + { 129, 7, 12, 0, 0, 34816, 82, }, /* 1378 */ + { 129, 15, 12, 0, 0, 34816, 68, }, /* 1379 */ + { 129, 12, 3, 0, 0, 26624, 96, }, /* 1380 */ + { 58, 9, 12, 0, 34, 34816, 74, }, /* 1381 */ + { 58, 5, 12, 0, -34, 34816, 76, }, /* 1382 */ + { 58, 12, 3, 0, 0, 26624, 150, }, /* 1383 */ + { 58, 12, 3, 0, 0, 26624, 130, }, /* 1384 */ + { 58, 12, 3, 0, 0, 26624, 96, }, /* 1385 */ + { 58, 6, 12, 0, 0, 34816, 142, }, /* 1386 */ + { 58, 13, 12, 0, 0, 34816, 138, }, /* 1387 */ + { 58, 21, 12, 0, 0, 34816, 68, }, /* 1388 */ + { 69, 15, 12, 0, 0, 0, 68, }, /* 1389 */ + { 69, 26, 12, 0, 0, 0, 68, }, /* 1390 */ + { 69, 23, 12, 0, 0, 0, 68, }, /* 1391 */ + { 3, 7, 12, 0, 0, 0, 240, }, /* 1392 */ + { 69, 26, 14, 0, 0, 28672, 332, }, /* 1393 */ + { 69, 26, 14, 0, 0, 28672, 334, }, /* 1394 */ + { 68, 2, 14, 0, 0, 18432, 336, }, /* 1395 */ + { 69, 26, 12, 0, 0, 18432, 338, }, /* 1396 */ + { 69, 26, 14, 0, 0, 18432, 340, }, /* 1397 */ + { 69, 26, 14, 0, 0, 18432, 334, }, /* 1398 */ + { 69, 26, 11, 0, 0, 18432, 342, }, /* 1399 */ + { 20, 26, 12, 0, 0, 18432, 68, }, /* 1400 */ + { 69, 26, 14, 0, 0, 18432, 236, }, /* 1401 */ + { 69, 26, 14, 0, 0, 18447, 334, }, /* 1402 */ + { 69, 26, 14, 0, 0, 28672, 344, }, /* 1403 */ + { 69, 26, 14, 0, 0, 28672, 346, }, /* 1404 */ + { 69, 24, 3, 0, 0, 28672, 348, }, /* 1405 */ + { 69, 26, 14, 0, 0, 28672, 350, }, /* 1406 */ + { 69, 13, 12, 0, 0, 10240, 138, }, /* 1407 */ + { 69, 1, 3, 0, 0, 6144, 352, }, /* 1408 */ }; const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ @@ -1201,3419 +1841,3549 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, /* U+0800 */ 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 41, 41, 42, 43, 44, 45, /* U+1000 */ 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, /* U+1800 */ - 62, 63, 64, 65, 66, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, /* U+2000 */ - 77, 77, 78, 79, 66, 66, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, /* U+2800 */ - 90, 91, 92, 93, 94, 95, 96, 97, 98, 98, 98, 98, 98, 98, 98, 98, /* U+3000 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+3800 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+4000 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 99, 98, 98, 98, 98, /* U+4800 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+5000 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+5800 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+6000 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+6800 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+7000 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+7800 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+8000 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+8800 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+9000 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+9800 */ -100,101,101,101,101,101,101,101,101,102,103,103,104,105,106,107, /* U+A000 */ -108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,116, /* U+A800 */ -117,118,119,120,121,122,116,117,118,119,120,121,122,116,117,118, /* U+B000 */ -119,120,121,122,116,117,118,119,120,121,122,116,117,118,119,120, /* U+B800 */ -121,122,116,117,118,119,120,121,122,116,117,118,119,120,121,122, /* U+C000 */ -116,117,118,119,120,121,122,116,117,118,119,120,121,122,116,117, /* U+C800 */ -118,119,120,121,122,116,117,118,119,120,121,122,116,117,118,123, /* U+D000 */ -124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, /* U+D800 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+E000 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+E800 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F000 */ -125,125, 98, 98,126,127,128,129,130,130,131,132,133,134,135,136, /* U+F800 */ -137,138,139,140,141,142,143,144,145,146,147,148,149,149,150,151, /* U+10000 */ -152,153,154,155,156,157,158,159,160,161,162,141,163,164,165,166, /* U+10800 */ -167,168,169,170,171,172,173,141,174,175,141,176,177,178,179,141, /* U+11000 */ -180,181,182,183,184,185,141,141,186,187,188,189,141,190,141,191, /* U+11800 */ -192,192,192,192,192,192,192,193,194,192,195,141,141,141,141,141, /* U+12000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,196, /* U+12800 */ -197,197,197,197,197,197,197,197,198,141,141,141,141,141,141,141, /* U+13000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+13800 */ -141,141,141,141,141,141,141,141,199,199,199,199,200,141,141,141, /* U+14000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+14800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+15000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+15800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+16000 */ -201,201,201,201,202,203,204,205,141,141,141,141,206,207,208,209, /* U+16800 */ -210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210, /* U+17000 */ -210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210, /* U+17800 */ -210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,211, /* U+18000 */ -210,210,210,210,210,210,212,212,212,213,214,141,141,141,141,141, /* U+18800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+19000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+19800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+1A000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,215, /* U+1A800 */ -216,217,218,219,219,220,141,141,141,141,141,141,141,141,141,141, /* U+1B000 */ -141,141,141,141,141,141,141,141,221,222,141,141,141,141,141,141, /* U+1B800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+1C000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,223,224, /* U+1C800 */ - 71,225,226,227,228,229,230,141,231,232,233,234,235,236,237,238, /* U+1D000 */ -239,239,239,239,240,241,141,141,141,141,141,141,141,141,242,141, /* U+1D800 */ -243,141,244,141,141,245,141,141,141,141,141,141,141,141,141,246, /* U+1E000 */ -247,248,249,141,141,141,141,141,250,251,252,141,253,254,141,141, /* U+1E800 */ -255,256,257,258,259,260,261,262,261,261,263,261,264,265,266,267, /* U+1F000 */ -268,269,270,261,271,272, 71,273,260,260,260,260,260,260,260,274, /* U+1F800 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+20000 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+20800 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+21000 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+21800 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+22000 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+22800 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+23000 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+23800 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+24000 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+24800 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+25000 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+25800 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+26000 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+26800 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+27000 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+27800 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+28000 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+28800 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+29000 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+29800 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,275, 98, 98, /* U+2A000 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+2A800 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,276, 98, /* U+2B000 */ -277, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+2B800 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+2C000 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,278, 98, 98, /* U+2C800 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+2D000 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+2D800 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+2E000 */ - 98, 98, 98, 98, 98, 98, 98,279,141,141,141,141,141,141,141,141, /* U+2E800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+2F000 */ - 98, 98, 98, 98,280,141,141,141,141,141,141,141,141,141,141,141, /* U+2F800 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+30000 */ - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+30800 */ - 98, 98, 98, 98, 98, 98,281,141,141,141,141,141,141,141,141,141, /* U+31000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+31800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+32000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+32800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+33000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+33800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+34000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+34800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+35000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+35800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+36000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+36800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+37000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+37800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+38000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+38800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+39000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+39800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3A000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3A800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3B000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3B800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3C000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3C800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3D000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3D800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3E000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3E800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3F000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3F800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+40000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+40800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+41000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+41800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+42000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+42800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+43000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+43800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+44000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+44800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+45000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+45800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+46000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+46800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+47000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+47800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+48000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+48800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+49000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+49800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4A000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4A800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4B000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4B800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4C000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4C800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4D000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4D800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4E000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4E800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4F000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4F800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+50000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+50800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+51000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+51800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+52000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+52800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+53000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+53800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+54000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+54800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+55000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+55800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+56000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+56800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+57000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+57800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+58000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+58800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+59000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+59800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5A000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5A800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5B000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5B800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5C000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5C800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5D000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5D800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5E000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5E800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5F000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5F800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+60000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+60800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+61000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+61800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+62000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+62800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+63000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+63800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+64000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+64800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+65000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+65800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+66000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+66800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+67000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+67800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+68000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+68800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+69000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+69800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6A000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6A800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6B000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6B800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6C000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6C800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6D000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6D800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6E000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6E800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6F000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6F800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+70000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+70800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+71000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+71800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+72000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+72800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+73000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+73800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+74000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+74800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+75000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+75800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+76000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+76800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+77000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+77800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+78000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+78800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+79000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+79800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7A000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7A800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7B000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7B800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7C000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7C800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7D000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7D800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7E000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7E800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7F000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7F800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+80000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+80800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+81000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+81800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+82000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+82800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+83000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+83800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+84000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+84800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+85000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+85800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+86000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+86800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+87000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+87800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+88000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+88800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+89000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+89800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8A000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8A800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8B000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8B800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8C000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8C800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8D000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8D800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8E000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8E800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8F000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8F800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+90000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+90800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+91000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+91800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+92000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+92800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+93000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+93800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+94000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+94800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+95000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+95800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+96000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+96800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+97000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+97800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+98000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+98800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+99000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+99800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9A000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9A800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9B000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9B800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9C000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9C800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9D000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9D800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9E000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9E800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9F000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9F800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A0000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A0800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A1000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A1800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A2000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A2800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A3000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A3800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A4000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A4800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A5000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A5800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A6000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A6800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A7000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A7800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A8000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A8800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A9000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A9800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AA000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AA800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AB000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AB800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AC000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AC800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AD000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AD800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AE000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AE800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AF000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AF800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B0000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B0800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B1000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B1800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B2000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B2800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B3000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B3800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B4000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B4800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B5000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B5800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B6000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B6800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B7000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B7800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B8000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B8800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B9000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B9800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BA000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BA800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BB000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BB800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BC000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BC800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BD000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BD800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BE000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BE800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BF000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BF800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C0000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C0800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C1000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C1800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C2000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C2800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C3000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C3800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C4000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C4800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C5000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C5800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C6000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C6800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C7000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C7800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C8000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C8800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C9000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C9800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CA000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CA800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CB000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CB800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CC000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CC800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CD000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CD800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CE000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CE800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CF000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CF800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D0000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D0800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D1000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D1800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D2000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D2800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D3000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D3800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D4000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D4800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D5000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D5800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D6000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D6800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D7000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D7800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D8000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D8800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D9000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D9800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DA000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DA800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DB000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DB800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DC000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DC800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DD000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DD800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DE000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DE800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DF000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DF800 */ -282,283,284,285,283,283,283,283,283,283,283,283,283,283,283,283, /* U+E0000 */ -283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283, /* U+E0800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E1000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E1800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E2000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E2800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E3000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E3800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E4000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E4800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E5000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E5800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E6000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E6800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E7000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E7800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E8000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E8800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E9000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E9800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EA000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EA800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EB000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EB800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EC000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EC800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+ED000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+ED800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EE000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EE800 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EF000 */ -141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EF800 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F0000 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F0800 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F1000 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F1800 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F2000 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F2800 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F3000 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F3800 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F4000 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F4800 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F5000 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F5800 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F6000 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F6800 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F7000 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F7800 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F8000 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F8800 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F9000 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F9800 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FA000 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FA800 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FB000 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FB800 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FC000 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FC800 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FD000 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FD800 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FE000 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FE800 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FF000 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,286, /* U+FF800 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+100000 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+100800 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+101000 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+101800 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+102000 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+102800 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+103000 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+103800 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+104000 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+104800 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+105000 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+105800 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+106000 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+106800 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+107000 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+107800 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+108000 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+108800 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+109000 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+109800 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10A000 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10A800 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10B000 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10B800 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10C000 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10C800 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10D000 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10D800 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10E000 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10E800 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10F000 */ -125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,286, /* U+10F800 */ + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, /* U+2000 */ + 78, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, /* U+2800 */ + 93, 94, 95, 96, 97, 98, 99,100,101,101,101,101,101,101,101,101, /* U+3000 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+3800 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+4000 */ +101,101,101,101,101,101,101,101,101,101,101,102,101,101,101,101, /* U+4800 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+5000 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+5800 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+6000 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+6800 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+7000 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+7800 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+8000 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+8800 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+9000 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+9800 */ +103,104,104,104,104,104,104,104,104,105,106,106,107,108,109,110, /* U+A000 */ +111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,119, /* U+A800 */ +120,121,122,123,124,125,119,120,121,122,123,124,125,119,120,121, /* U+B000 */ +122,123,124,125,119,120,121,122,123,124,125,119,120,121,122,123, /* U+B800 */ +124,125,119,120,121,122,123,124,125,119,120,121,122,123,124,125, /* U+C000 */ +119,120,121,122,123,124,125,119,120,121,122,123,124,125,119,120, /* U+C800 */ +121,122,123,124,125,119,120,121,122,123,124,125,119,120,121,126, /* U+D000 */ +127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127, /* U+D800 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+E000 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+E800 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F000 */ +128,128,129,129,130,131,132,133,134,135,136,137,138,139,140,141, /* U+F800 */ +142,143,144,145,146,147,148,149,150,151,152,153,154,154,155,156, /* U+10000 */ +157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172, /* U+10800 */ +173,174,175,176,177,178,179,146,180,181,146,182,183,184,185,146, /* U+11000 */ +186,187,188,189,190,191,146,146,192,193,194,195,146,196,146,197, /* U+11800 */ +198,198,198,198,198,198,198,199,200,198,201,146,146,146,146,146, /* U+12000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,202, /* U+12800 */ +203,203,203,203,203,203,203,203,204,146,146,146,146,146,146,146, /* U+13000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+13800 */ +146,146,146,146,146,146,146,146,205,205,205,205,206,146,146,146, /* U+14000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+14800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+15000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+15800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+16000 */ +207,207,207,207,208,209,210,211,146,146,146,146,212,213,214,215, /* U+16800 */ +216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216, /* U+17000 */ +216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216, /* U+17800 */ +216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,217, /* U+18000 */ +216,216,216,216,216,216,218,218,218,219,220,146,146,146,146,146, /* U+18800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+19000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+19800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+1A000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,221, /* U+1A800 */ +222,223,224,225,225,226,146,146,146,146,146,146,146,146,146,146, /* U+1B000 */ +146,146,146,146,146,146,146,146,227,228,146,146,146,146,146,146, /* U+1B800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+1C000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,229,230, /* U+1C800 */ +231,232,233,234,235,236,237,146,238,239,240,241,242,243,244,245, /* U+1D000 */ +246,246,246,246,247,248,146,146,146,146,146,146,146,146,249,146, /* U+1D800 */ +250,146,251,146,146,252,146,146,146,146,146,146,146,146,146,253, /* U+1E000 */ +254,255,256,168,168,168,168,168,257,258,259,168,260,261,168,168, /* U+1E800 */ +262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277, /* U+1F000 */ +278,279,280,281,282,283,284,285,267,267,267,267,267,267,267,286, /* U+1F800 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+20000 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+20800 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+21000 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+21800 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+22000 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+22800 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+23000 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+23800 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+24000 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+24800 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+25000 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+25800 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+26000 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+26800 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+27000 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+27800 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+28000 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+28800 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+29000 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+29800 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,287,101,101, /* U+2A000 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+2A800 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,101,288,101, /* U+2B000 */ +289,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+2B800 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+2C000 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,290,101,101, /* U+2C800 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+2D000 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+2D800 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+2E000 */ +101,101,101,101,101,101,101,291,146,146,146,146,146,146,146,146, /* U+2E800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+2F000 */ +129,129,129,129,292,146,146,146,146,146,146,146,146,146,146,293, /* U+2F800 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+30000 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+30800 */ +101,101,101,101,101,101,294,146,146,146,146,146,146,146,146,146, /* U+31000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+31800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+32000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+32800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+33000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+33800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+34000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+34800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+35000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+35800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+36000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+36800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+37000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+37800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+38000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+38800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+39000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+39800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+3A000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+3A800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+3B000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+3B800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+3C000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+3C800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+3D000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+3D800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+3E000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+3E800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+3F000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,293, /* U+3F800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+40000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+40800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+41000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+41800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+42000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+42800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+43000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+43800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+44000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+44800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+45000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+45800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+46000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+46800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+47000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+47800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+48000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+48800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+49000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+49800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+4A000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+4A800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+4B000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+4B800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+4C000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+4C800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+4D000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+4D800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+4E000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+4E800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+4F000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,293, /* U+4F800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+50000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+50800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+51000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+51800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+52000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+52800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+53000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+53800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+54000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+54800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+55000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+55800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+56000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+56800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+57000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+57800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+58000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+58800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+59000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+59800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+5A000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+5A800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+5B000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+5B800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+5C000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+5C800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+5D000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+5D800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+5E000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+5E800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+5F000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,293, /* U+5F800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+60000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+60800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+61000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+61800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+62000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+62800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+63000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+63800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+64000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+64800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+65000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+65800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+66000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+66800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+67000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+67800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+68000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+68800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+69000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+69800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+6A000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+6A800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+6B000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+6B800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+6C000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+6C800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+6D000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+6D800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+6E000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+6E800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+6F000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,293, /* U+6F800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+70000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+70800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+71000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+71800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+72000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+72800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+73000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+73800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+74000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+74800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+75000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+75800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+76000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+76800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+77000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+77800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+78000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+78800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+79000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+79800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+7A000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+7A800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+7B000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+7B800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+7C000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+7C800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+7D000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+7D800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+7E000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+7E800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+7F000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,293, /* U+7F800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+80000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+80800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+81000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+81800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+82000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+82800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+83000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+83800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+84000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+84800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+85000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+85800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+86000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+86800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+87000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+87800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+88000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+88800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+89000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+89800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+8A000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+8A800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+8B000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+8B800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+8C000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+8C800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+8D000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+8D800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+8E000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+8E800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+8F000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,293, /* U+8F800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+90000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+90800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+91000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+91800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+92000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+92800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+93000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+93800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+94000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+94800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+95000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+95800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+96000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+96800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+97000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+97800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+98000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+98800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+99000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+99800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+9A000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+9A800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+9B000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+9B800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+9C000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+9C800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+9D000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+9D800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+9E000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+9E800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+9F000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,293, /* U+9F800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A0000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A0800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A1000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A1800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A2000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A2800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A3000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A3800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A4000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A4800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A5000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A5800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A6000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A6800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A7000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A7800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A8000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A8800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A9000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A9800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+AA000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+AA800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+AB000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+AB800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+AC000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+AC800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+AD000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+AD800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+AE000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+AE800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+AF000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,293, /* U+AF800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B0000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B0800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B1000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B1800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B2000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B2800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B3000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B3800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B4000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B4800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B5000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B5800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B6000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B6800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B7000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B7800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B8000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B8800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B9000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B9800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+BA000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+BA800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+BB000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+BB800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+BC000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+BC800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+BD000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+BD800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+BE000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+BE800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+BF000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,293, /* U+BF800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C0000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C0800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C1000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C1800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C2000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C2800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C3000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C3800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C4000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C4800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C5000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C5800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C6000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C6800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C7000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C7800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C8000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C8800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C9000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C9800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+CA000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+CA800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+CB000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+CB800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+CC000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+CC800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+CD000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+CD800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+CE000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+CE800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+CF000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,293, /* U+CF800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D0000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D0800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D1000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D1800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D2000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D2800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D3000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D3800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D4000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D4800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D5000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D5800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D6000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D6800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D7000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D7800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D8000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D8800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D9000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D9800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+DA000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+DA800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+DB000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+DB800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+DC000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+DC800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+DD000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+DD800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+DE000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+DE800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+DF000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,293, /* U+DF800 */ +295,296,297,298,296,296,296,296,296,296,296,296,296,296,296,296, /* U+E0000 */ +296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296, /* U+E0800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+E1000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+E1800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+E2000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+E2800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+E3000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+E3800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+E4000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+E4800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+E5000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+E5800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+E6000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+E6800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+E7000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+E7800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+E8000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+E8800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+E9000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+E9800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+EA000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+EA800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+EB000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+EB800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+EC000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+EC800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+ED000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+ED800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+EE000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+EE800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+EF000 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,293, /* U+EF800 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F0000 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F0800 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F1000 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F1800 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F2000 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F2800 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F3000 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F3800 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F4000 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F4800 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F5000 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F5800 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F6000 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F6800 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F7000 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F7800 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F8000 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F8800 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F9000 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F9800 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+FA000 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+FA800 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+FB000 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+FB800 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+FC000 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+FC800 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+FD000 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+FD800 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+FE000 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+FE800 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+FF000 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,299, /* U+FF800 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+100000 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+100800 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+101000 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+101800 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+102000 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+102800 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+103000 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+103800 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+104000 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+104800 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+105000 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+105800 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+106000 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+106800 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+107000 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+107800 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+108000 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+108800 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+109000 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+109800 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+10A000 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+10A800 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+10B000 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+10B800 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+10C000 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+10C800 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+10D000 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+10D800 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+10E000 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+10E800 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+10F000 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,299, /* U+10F800 */ }; -const uint16_t PRIV(ucd_stage2)[] = { /* 73472 bytes, block = 128 */ +const uint16_t PRIV(ucd_stage2)[] = { /* 76800 bytes, block = 128 */ + /* block 0 */ - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 3, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 4, 5, 5, 5, 6, 5, 5, 5, 7, 8, 5, 9, 5, 10, 5, 5, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 5, 5, 9, 9, 9, 5, - 5, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 12, 12, 12, 12, - 12, 12, 12, 14, 12, 12, 12, 12, 12, 12, 12, 7, 5, 8, 15, 16, - 15, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 17, 17, 17, 17, - 17, 17, 17, 19, 17, 17, 17, 17, 17, 17, 17, 7, 9, 8, 9, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 24, 25, 26, 27, 26, 8, + 13, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 30, 29, 29, 29, 29, + 29, 29, 29, 31, 29, 29, 29, 29, 29, 29, 29, 15, 13, 16, 32, 33, + 34, 35, 35, 35, 35, 35, 35, 36, 36, 37, 37, 38, 36, 36, 36, 36, + 36, 36, 36, 39, 36, 36, 36, 36, 36, 36, 36, 15, 27, 16, 27, 0, /* block 1 */ - 1, 1, 1, 1, 1, 1, 1, 1, 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, 5, 6, 6, 6, 6, 20, 5, 15, 21, 22, 23, 9, 24, 21, 15, - 20, 9, 25, 25, 15, 26, 5, 5, 15, 25, 22, 27, 25, 25, 25, 5, - 12, 12, 12, 12, 12, 28, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 9, 12, 12, 12, 12, 12, 12, 12, 29, - 17, 17, 17, 17, 17, 30, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 9, 17, 17, 17, 17, 17, 17, 17, 31, + 40, 40, 40, 40, 40, 41, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 42, 43, 44, 44, 44, 44, 45, 43, 46, 47, 48, 49, 50, 51, 47, 46, + 52, 53, 54, 54, 46, 55, 43, 56, 46, 54, 48, 57, 58, 58, 58, 43, + 59, 59, 59, 59, 59, 60, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 50, 59, 59, 59, 59, 59, 59, 59, 61, + 62, 62, 62, 62, 62, 63, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 50, 62, 62, 62, 62, 62, 62, 62, 64, /* block 2 */ - 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, - 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, - 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, - 34, 35, 32, 33, 32, 33, 32, 33, 35, 32, 33, 32, 33, 32, 33, 32, - 33, 32, 33, 32, 33, 32, 33, 32, 33, 35, 32, 33, 32, 33, 32, 33, - 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, - 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, - 32, 33, 32, 33, 32, 33, 32, 33, 36, 32, 33, 32, 33, 32, 33, 37, + 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, + 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, + 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 67, + 68, 69, 65, 66, 65, 66, 65, 66, 70, 65, 66, 65, 66, 65, 66, 65, + 66, 65, 66, 65, 66, 65, 66, 65, 66, 71, 65, 66, 65, 66, 65, 66, + 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, + 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, + 65, 66, 65, 66, 65, 66, 65, 66, 72, 65, 66, 65, 66, 65, 66, 73, /* block 3 */ - 38, 39, 32, 33, 32, 33, 40, 32, 33, 41, 41, 32, 33, 35, 42, 43, - 44, 32, 33, 41, 45, 46, 47, 48, 32, 33, 49, 35, 47, 50, 51, 52, - 32, 33, 32, 33, 32, 33, 53, 32, 33, 53, 35, 35, 32, 33, 53, 32, - 33, 54, 54, 32, 33, 32, 33, 55, 32, 33, 35, 22, 32, 33, 35, 56, - 22, 22, 22, 22, 57, 58, 59, 60, 61, 62, 63, 64, 65, 32, 33, 32, - 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 66, 32, 33, - 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, - 35, 67, 68, 69, 32, 33, 70, 71, 32, 33, 32, 33, 32, 33, 32, 33, + 74, 75, 65, 66, 65, 66, 76, 65, 66, 77, 77, 65, 66, 70, 78, 79, + 80, 65, 66, 77, 81, 82, 83, 84, 65, 66, 85, 70, 83, 86, 87, 88, + 65, 66, 65, 66, 65, 66, 89, 65, 66, 89, 70, 70, 65, 66, 89, 65, + 66, 90, 90, 65, 66, 65, 66, 91, 65, 66, 70, 92, 65, 66, 70, 93, + 92, 92, 92, 92, 94, 95, 96, 97, 98, 99,100,101,102, 65, 66, 65, + 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,103, 65, 66, + 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, + 69,104,105,106, 65, 66,107,108, 65, 66, 65, 66, 65, 66, 65, 66, /* block 4 */ - 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, - 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, - 72, 35, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, - 32, 33, 32, 33, 35, 35, 35, 35, 35, 35, 73, 32, 33, 74, 75, 76, - 76, 32, 33, 77, 78, 79, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, - 80, 81, 82, 83, 84, 35, 85, 85, 35, 86, 35, 87, 88, 35, 35, 35, - 85, 89, 35, 90, 35, 91, 92, 35, 93, 94, 92, 95, 96, 35, 35, 94, - 35, 97, 98, 35, 35, 99, 35, 35, 35, 35, 35, 35, 35,100, 35, 35, + 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, + 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, +109, 70, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, + 65, 66, 65, 66, 70, 70, 70, 70, 70, 70,110, 65, 66,111,112,113, +113, 65, 66,114,115,116, 65, 66, 65, 67, 65, 66, 65, 66, 65, 66, +117,118,119,120,121, 70,122,122, 70,123, 70,124,125, 70, 70, 70, +122,126, 70,127, 70,128,129, 70,130,131,129,132,133, 70, 70,131, + 70,134,135, 70, 70,136, 70, 70, 70, 70, 70, 70, 70,137, 70, 70, /* block 5 */ -101, 35,102,101, 35, 35, 35,103,101,104,105,105,106, 35, 35, 35, - 35, 35,107, 35, 22, 35, 35, 35, 35, 35, 35, 35, 35,108,109, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, -110,110,110,110,110,110,110,110,110,111,111,111,111,111,111,111, -111,111, 15, 15, 15, 15,111,111,111,111,111,111,111,111,111,111, -111,111, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, -110,110,110,110,110, 15, 15, 15, 15, 15,112,112,111, 15,111, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, +138, 70,139,138, 70, 70, 70,140,138,141,142,142,143, 70, 70, 70, + 70, 70,144, 70, 92, 70, 70, 70, 70, 70, 70, 70, 70,145,146, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, +147,147,148,147,147,147,147,147,147,149,149,150,150,150,150,150, +151,151, 46, 46, 46, 46,149,149,149,149,149,149,149,149,149,149, +152,152, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, +147,147,147,147,147, 46, 46, 46, 46, 46,153,153,149, 46,150, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, /* block 6 */ -113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, -113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, -113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, -113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, -113,113,114,113,113,115,113,113,113,113,113,113,113,113,113,113, -113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, -113,113,113,116,116,116,116,116,116,116,116,116,116,116,116,116, -117,118,117,118,111,119,117,118,120,120,121,122,122,122, 5,123, +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,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,154,154,156,154,154,154,154,154,154,154,154,154,157, +154,154,154,154,154,154,154,154,158,158,158,158,158,154,154,154, +154,154,154,159,159,159,159,159,159,159,159,159,159,159,159,159, +160,161,160,161,149,162,160,161,163,163,164,165,165,165,166,167, /* block 7 */ -120,120,120,120,119, 15,124, 5,125,125,125,120,126,120,127,127, -128,129,130,129,129,131,129,129,132,133,134,129,135,129,129,129, -136,137,120,138,129,129,139,129,129,140,129,129,141,142,142,142, -128,143,144,143,143,145,143,143,146,147,148,143,149,143,143,143, -150,151,152,153,143,143,154,143,143,155,143,143,156,157,157,158, -159,160,161,161,161,162,163,164,117,118,117,118,117,118,117,118, -117,118,165,166,165,166,165,166,165,166,165,166,165,166,165,166, -167,168,169,170,171,172,173,117,118,174,117,118,128,175,175,175, +163,163,163,163,162, 46,168,169,170,170,170,163,171,163,172,172, +173,174,175,174,174,176,174,174,177,178,179,174,180,174,174,174, +181,182,163,183,174,174,184,174,174,185,174,174,186,187,187,187, +173,188,189,188,188,190,188,188,191,192,193,188,194,188,188,188, +195,196,197,198,188,188,199,188,188,200,188,188,201,202,202,203, +204,205,206,207,207,208,209,210,160,161,160,161,160,161,160,161, +160,161,211,212,211,212,211,212,211,212,211,212,211,212,211,212, +213,214,215,216,217,218,219,160,161,220,160,161,221,222,222,222, /* block 8 */ -176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176, -177,177,178,177,179,177,177,177,177,177,177,177,177,177,180,177, -177,181,182,177,177,177,177,177,177,177,183,177,177,177,177,177, -184,184,185,184,186,184,184,184,184,184,184,184,184,184,187,184, -184,188,189,184,184,184,184,184,184,184,190,184,184,184,184,184, -191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191, -192,193,194,195,192,193,192,193,192,193,192,193,192,193,192,193, -192,193,192,193,192,193,192,193,192,193,192,193,192,193,192,193, +223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223, +224,224,225,224,226,224,224,224,224,224,224,224,224,224,227,224, +224,228,229,224,224,224,224,224,224,224,230,224,224,224,224,224, +231,231,232,231,233,231,231,231,231,231,231,231,231,231,234,231, +231,235,236,231,231,231,231,231,231,231,237,231,231,231,231,231, +238,238,238,238,238,238,239,238,239,238,238,238,238,238,238,238, +240,241,242,243,240,241,240,241,240,241,240,241,240,241,240,241, +240,241,240,241,240,241,240,241,240,241,240,241,240,241,240,241, /* block 9 */ -192,193,196,197,198,199,199,198,200,200,192,193,192,193,192,193, -192,193,192,193,192,193,192,193,192,193,192,193,192,193,192,193, -192,193,192,193,192,193,192,193,192,193,192,193,192,193,192,193, -192,193,192,193,192,193,192,193,192,193,192,193,192,193,192,193, -201,192,193,192,193,192,193,192,193,192,193,192,193,192,193,202, -192,193,192,193,192,193,192,193,192,193,192,193,192,193,192,193, -192,193,192,193,192,193,192,193,192,193,192,193,192,193,192,193, -192,193,192,193,192,193,192,193,192,193,192,193,192,193,192,193, +240,241,244,245,246,247,247,246,248,248,240,241,240,241,240,241, +240,241,240,241,240,241,240,241,240,241,240,241,240,241,240,241, +240,241,240,241,240,241,240,241,240,241,240,241,240,241,240,241, +240,241,240,241,240,241,240,241,240,241,240,241,240,241,240,241, +249,240,241,240,241,240,241,240,241,240,241,240,241,240,241,250, +240,241,240,241,240,241,240,241,240,241,240,241,240,241,240,241, +240,241,240,241,240,241,240,241,240,241,240,241,240,241,240,241, +240,241,240,241,240,241,240,241,240,241,240,241,240,241,240,241, /* block 10 */ -192,193,192,193,192,193,192,193,192,193,192,193,192,193,192,193, -192,193,192,193,192,193,192,193,192,193,192,193,192,193,192,193, -192,193,192,193,192,193,192,193,192,193,192,193,192,193,192,193, -120,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203, -203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203, -203,203,203,203,203,203,203,120,120,204,205,205,205,205,205,205, -206,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207, -207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207, +240,241,240,241,240,241,240,241,240,241,240,241,240,241,240,241, +240,241,240,241,240,241,240,241,240,241,240,241,240,241,240,241, +240,241,240,241,240,241,240,241,240,241,240,241,240,241,240,241, +163,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251, +251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251, +251,251,251,251,251,251,251,163,163,252,253,253,253,253,253,254, +255,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256, +256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256, /* block 11 */ -207,207,207,207,207,207,207,206,206,205,208,120,120,209,209,210, -120,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211, -211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211, -211,211,211,211,211,211,211,211,211,211,211,211,211,211,212,211, -213,211,211,213,211,211,213,211,120,120,120,120,120,120,120,120, -214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214, -214,214,214,214,214,214,214,214,214,214,214,120,120,120,120,214, -214,214,214,213,213,120,120,120,120,120,120,120,120,120,120,120, +256,256,256,256,256,256,256,257,255,258,259,163,163,260,260,261, +262,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263, +263,263,264,263,263,263,263,263,263,263,263,263,263,263,263,263, +265,265,265,265,265,265,265,265,265,265,265,265,265,265,266,265, +267,265,265,268,265,269,267,269,262,262,262,262,262,262,262,262, +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,262,262,262,262,270, +270,270,270,267,271,262,262,262,262,262,262,262,262,262,262,262, /* block 12 */ -215,215,215,215,215,216,217,217,217,218,218,219,220,218,221,221, -222,222,222,222,222,222,222,222,222,222,222,220,223,218,218,224, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -226,225,225,225,225,225,225,225,225,225,225,227,227,227,227,227, -227,227,227,227,227,227,222,222,222,222,222,222,222,222,222,222, -228,228,228,228,228,228,228,228,228,228,218,218,218,218,225,225, -227,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +272,272,272,272,272,273,274,274,275,276,276,277,278,279,280,280, +281,281,281,281,281,281,281,281,281,281,281,282,283,284,284,285, +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, +287,286,286,286,286,286,286,286,286,286,286,288,288,288,288,288, +288,288,288,289,289,289,281,290,291,281,281,281,281,281,281,281, +292,292,292,292,292,292,292,292,292,292,276,293,293,279,286,286, +289,286,286,294,286,286,286,286,286,286,286,286,286,286,286,286, /* block 13 */ -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,229,225,222,222,222,222,222,222,222,216,221,222, -222,222,222,222,222,230,230,222,222,221,222,222,222,222,225,225, -231,231,231,231,231,231,231,231,231,231,225,225,225,221,221,225, +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,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,286,286,286,286,286,286,286,286,286,286, +286,286,286,286,295,286,281,281,281,281,281,281,281,273,280,291, +291,281,281,281,281,296,296,281,281,280,291,291,291,281,286,286, +297,297,297,297,297,297,297,297,297,297,286,286,286,298,298,286, /* block 14 */ -232,232,232,232,232,232,232,232,232,232,232,232,232,232,120,233, -234,235,234,234,234,234,234,234,234,234,234,234,234,234,234,234, -234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234, -235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235, -235,235,235,235,235,235,235,235,235,235,235,120,120,234,234,234, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +299,299,299,300,300,300,300,300,300,300,300,301,300,301,302,303, +304,305,304,304,304,304,304,304,304,304,304,304,304,304,304,304, +304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304, +306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306, +307,307,307,307,307,307,307,307,307,307,307,302,302,304,304,304, +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,286,286,286,286,286,286,286,286,286,286,286,286,286, /* block 15 */ -236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236, -236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236, -236,236,236,236,236,236,237,237,237,237,237,237,237,237,237,237, -237,236,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -238,238,238,238,238,238,238,238,238,238,239,239,239,239,239,239, -239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239, -239,239,239,239,239,239,239,239,239,239,239,240,240,240,240,240, -240,240,240,240,241,241,242,243,243,243,241,120,120,240,244,244, +308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308, +308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308, +308,308,308,308,308,308,309,309,309,309,309,309,309,309,309,309, +309,308,302,302,302,302,302,302,302,302,302,302,302,302,302,302, +310,310,310,310,310,310,310,310,310,310,311,311,311,311,311,311, +311,311,311,311,311,311,311,311,311,311,311,311,311,311,311,311, +311,311,311,311,311,311,311,311,311,311,311,312,312,312,312,312, +312,312,312,312,313,313,314,315,316,317,318,262,262,319,320,320, /* block 16 */ -245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245, -245,245,245,245,245,245,246,246,246,246,247,246,246,246,246,246, -246,246,246,246,247,246,246,246,247,246,246,246,246,246,120,120, -248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,120, -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,250,250,250,120,120,251,120, -234,234,234,234,234,234,234,234,234,234,234,120,120,120,120,120, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, +321,321,321,321,321,321,322,322,323,323,324,322,322,322,322,322, +322,322,322,322,324,322,322,322,324,322,322,322,322,325,262,262, +326,326,326,326,326,326,326,327,326,327,326,326,326,327,327,262, +328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328, +328,328,328,328,328,328,328,328,328,329,329,329,262,262,330,262, +304,304,304,304,304,304,304,304,304,304,304,302,302,302,302,302, +286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286, /* block 17 */ -225,225,225,225,225,225,225,225,252,225,225,225,225,225,225,120, -215,215,120,120,120,120,120,120,222,222,222,222,222,222,222,222, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,230,222,222,222,222,222,222, -222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222, -222,222,216,222,222,222,222,222,222,222,222,222,222,222,222,222, -222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222, +286,286,286,286,286,286,286,286,331,286,286,286,286,286,286,302, +272,272,302,302,302,302,302,302,291,291,291,291,291,291,291,291, +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,286,286,286,286,286,286,296,291,291,291,291,291,291, +291,291,291,332,281,281,281,281,281,281,281,281,281,281,281,281, +332,332,273,290,290,290,290,290,290,290,291,291,291,291,291,291, +290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,281, /* block 18 */ -253,253,253,254,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,253,254,253,255,254,254, -254,253,253,253,253,253,253,253,253,254,254,254,254,253,254,254, -255,256,257,113,113,253,253,253,255,255,255,255,255,255,255,255, -255,255,253,253,258,259,260,260,260,260,260,260,260,260,260,260, -261,262,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +333,333,333,334,335,335,335,335,335,335,335,335,335,335,335,335, +335,335,335,335,335,335,335,335,335,335,335,335,335,335,335,335, +335,335,335,335,335,335,335,335,335,335,335,335,335,335,335,335, +335,335,335,335,335,335,335,335,335,335,333,334,336,335,334,334, +334,333,333,333,333,333,333,333,333,334,334,334,334,337,334,334, +335,338,339,154,154,333,333,333,335,335,335,335,335,335,335,335, +335,335,333,333,340,341,342,342,342,342,342,342,342,342,342,342, +343,344,335,335,335,335,335,335,335,335,335,335,335,335,335,335, /* block 19 */ -263,264,265,265,120,263,263,263,263,263,263,263,263,120,120,263, -263,120,120,263,263,263,263,263,263,263,263,263,263,263,263,263, -263,263,263,263,263,263,263,263,263,120,263,263,263,263,263,263, -263,120,263,120,120,120,263,263,263,263,120,120,264,263,266,265, -265,264,264,264,264,120,120,265,265,120,120,265,265,264,263,120, -120,120,120,120,120,120,120,266,120,120,120,120,263,263,120,263, -263,263,264,264,120,120,267,267,267,267,267,267,267,267,267,267, -263,263,268,268,269,269,269,269,269,269,270,268,263,271,264,120, +345,346,347,347,163,345,345,345,345,345,345,345,345,163,163,345, +345,163,163,345,345,345,345,345,345,345,345,345,345,345,345,345, +345,345,345,345,345,345,345,345,345,163,345,345,345,345,345,345, +345,163,345,163,163,163,345,345,345,345,163,163,348,345,349,347, +347,346,346,346,346,163,163,347,347,163,163,347,347,350,345,163, +163,163,163,163,163,163,163,349,163,163,163,163,345,345,163,345, +345,345,346,346,163,163,351,351,351,351,351,351,351,351,351,351, +345,345,352,352,353,353,353,353,353,353,354,352,345,355,356,163, /* block 20 */ -120,272,272,273,120,274,274,274,274,274,274,120,120,120,120,274, -274,120,120,274,274,274,274,274,274,274,274,274,274,274,274,274, -274,274,274,274,274,274,274,274,274,120,274,274,274,274,274,274, -274,120,274,274,120,274,274,120,274,274,120,120,272,120,273,273, -273,272,272,120,120,120,120,272,272,120,120,272,272,272,120,120, -120,272,120,120,120,120,120,120,120,274,274,274,274,120,274,120, -120,120,120,120,120,120,275,275,275,275,275,275,275,275,275,275, -272,272,274,274,274,272,276,120,120,120,120,120,120,120,120,120, +163,357,357,358,163,359,359,359,359,359,359,163,163,163,163,359, +359,163,163,359,359,359,359,359,359,359,359,359,359,359,359,359, +359,359,359,359,359,359,359,359,359,163,359,359,359,359,359,359, +359,163,359,359,163,359,359,163,359,359,163,163,360,163,358,358, +358,357,357,163,163,163,163,357,357,163,163,357,357,361,163,163, +163,357,163,163,163,163,163,163,163,359,359,359,359,163,359,163, +163,163,163,163,163,163,362,362,362,362,362,362,362,362,362,362, +357,357,359,359,359,357,363,163,163,163,163,163,163,163,163,163, /* block 21 */ -120,277,277,278,120,279,279,279,279,279,279,279,279,279,120,279, -279,279,120,279,279,279,279,279,279,279,279,279,279,279,279,279, -279,279,279,279,279,279,279,279,279,120,279,279,279,279,279,279, -279,120,279,279,120,279,279,279,279,279,120,120,277,279,278,278, -278,277,277,277,277,277,120,277,277,278,120,278,278,277,120,120, -279,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -279,279,277,277,120,120,280,280,280,280,280,280,280,280,280,280, -281,282,120,120,120,120,120,120,120,279,277,277,277,277,277,277, +163,364,364,365,163,366,366,366,366,366,366,366,366,366,163,366, +366,366,163,366,366,366,366,366,366,366,366,366,366,366,366,366, +366,366,366,366,366,366,366,366,366,163,366,366,366,366,366,366, +366,163,366,366,163,366,366,366,366,366,163,163,367,366,365,365, +365,364,364,364,364,364,163,364,364,365,163,365,365,368,163,163, +366,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +366,366,364,364,163,163,369,369,369,369,369,369,369,369,369,369, +370,371,163,163,163,163,163,163,163,366,364,364,364,367,367,367, /* block 22 */ -120,283,284,284,120,285,285,285,285,285,285,285,285,120,120,285, -285,120,120,285,285,285,285,285,285,285,285,285,285,285,285,285, -285,285,285,285,285,285,285,285,285,120,285,285,285,285,285,285, -285,120,285,285,120,285,285,285,285,285,120,120,283,285,286,283, -284,283,283,283,283,120,120,284,284,120,120,284,284,283,120,120, -120,120,120,120,120,283,283,286,120,120,120,120,285,285,120,285, -285,285,283,283,120,120,287,287,287,287,287,287,287,287,287,287, -288,285,289,289,289,289,289,289,120,120,120,120,120,120,120,120, +163,372,373,373,163,374,374,374,374,374,374,374,374,163,163,374, +374,163,163,374,374,374,374,374,374,374,374,374,374,374,374,374, +374,374,374,374,374,374,374,374,374,163,374,374,374,374,374,374, +374,163,374,374,163,374,374,374,374,374,163,163,375,374,376,372, +373,372,372,372,372,163,163,373,373,163,163,373,373,377,163,163, +163,163,163,163,163,378,372,376,163,163,163,163,374,374,163,374, +374,374,372,372,163,163,379,379,379,379,379,379,379,379,379,379, +380,374,381,381,381,381,381,381,163,163,163,163,163,163,163,163, /* block 23 */ -120,120,290,291,120,291,291,291,291,291,291,120,120,120,291,291, -291,120,291,291,291,291,120,120,120,291,291,120,291,120,291,291, -120,120,120,291,291,120,120,120,291,291,291,120,120,120,291,291, -291,291,291,291,291,291,291,291,291,291,120,120,120,120,292,293, -290,293,293,120,120,120,293,293,293,120,293,293,293,290,120,120, -291,120,120,120,120,120,120,292,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,294,294,294,294,294,294,294,294,294,294, -295,295,295,296,297,297,297,297,297,298,297,120,120,120,120,120, +163,163,382,383,163,383,383,383,383,383,383,163,163,163,383,383, +383,163,383,383,383,383,163,163,163,383,383,163,383,163,383,383, +163,163,163,383,383,163,163,163,383,383,383,163,163,163,383,383, +383,383,383,383,383,383,383,383,383,383,163,163,163,163,384,385, +382,385,385,163,163,163,385,385,385,163,385,385,385,386,163,163, +383,163,163,163,163,163,163,384,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,387,387,387,387,387,387,387,387,387,387, +388,388,388,389,390,390,390,390,390,391,390,163,163,163,163,163, /* block 24 */ -299,300,300,300,299,301,301,301,301,301,301,301,301,120,301,301, -301,120,301,301,301,301,301,301,301,301,301,301,301,301,301,301, -301,301,301,301,301,301,301,301,301,120,301,301,301,301,301,301, -301,301,301,301,301,301,301,301,301,301,120,120,299,301,299,299, -299,300,300,300,300,120,299,299,299,120,299,299,299,299,120,120, -120,120,120,120,120,299,299,120,301,301,301,120,120,301,120,120, -301,301,299,299,120,120,302,302,302,302,302,302,302,302,302,302, -120,120,120,120,120,120,120,303,304,304,304,304,304,304,304,305, +392,393,393,393,394,395,395,395,395,395,395,395,395,163,395,395, +395,163,395,395,395,395,395,395,395,395,395,395,395,395,395,395, +395,395,395,395,395,395,395,395,395,163,395,395,395,395,395,395, +395,395,395,395,395,395,395,395,395,395,163,163,396,395,392,392, +392,393,393,393,393,163,392,392,392,163,392,392,392,397,163,163, +163,163,163,163,163,392,392,163,395,395,395,163,163,395,163,163, +395,395,392,392,163,163,398,398,398,398,398,398,398,398,398,398, +163,163,163,163,163,163,163,399,400,400,400,400,400,400,400,401, /* block 25 */ -306,307,308,308,309,306,306,306,306,306,306,306,306,120,306,306, -306,120,306,306,306,306,306,306,306,306,306,306,306,306,306,306, -306,306,306,306,306,306,306,306,306,120,306,306,306,306,306,306, -306,306,306,306,120,306,306,306,306,306,120,120,307,306,308,307, -308,308,310,308,308,120,307,308,308,120,308,308,307,307,120,120, -120,120,120,120,120,310,310,120,120,120,120,120,120,306,306,120, -306,306,307,307,120,120,311,311,311,311,311,311,311,311,311,311, -120,306,306,120,120,120,120,120,120,120,120,120,120,120,120,120, +402,403,404,404,405,402,402,402,402,402,402,402,402,163,402,402, +402,163,402,402,402,402,402,402,402,402,402,402,402,402,402,402, +402,402,402,402,402,402,402,402,402,163,402,402,402,402,402,402, +402,402,402,402,163,402,402,402,402,402,163,163,406,402,404,407, +404,404,408,404,404,163,407,404,404,163,404,404,403,409,163,163, +163,163,163,163,163,408,408,163,163,163,163,163,163,402,402,163, +402,402,403,403,163,163,410,410,410,410,410,410,410,410,410,410, +163,402,402,163,163,163,163,163,163,163,163,163,163,163,163,163, /* block 26 */ -312,312,313,313,314,314,314,314,314,314,314,314,314,120,314,314, -314,120,314,314,314,314,314,314,314,314,314,314,314,314,314,314, -314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314, -314,314,314,314,314,314,314,314,314,314,314,312,312,314,315,313, -313,312,312,312,312,120,313,313,313,120,313,313,313,312,316,317, -120,120,120,120,314,314,314,315,318,318,318,318,318,318,318,314, -314,314,312,312,120,120,319,319,319,319,319,319,319,319,319,319, -318,318,318,318,318,318,318,318,318,317,314,314,314,314,314,314, +411,411,412,412,413,413,413,413,413,413,413,413,413,163,413,413, +413,163,413,413,413,413,413,413,413,413,413,413,413,413,413,413, +413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413, +413,413,413,413,413,413,413,413,413,413,413,414,414,413,415,412, +412,411,411,411,411,163,412,412,412,163,412,412,412,414,416,417, +163,163,163,163,413,413,413,415,418,418,418,418,418,418,418,413, +413,413,411,411,163,163,419,419,419,419,419,419,419,419,419,419, +418,418,418,418,418,418,418,418,418,417,413,413,413,413,413,413, /* block 27 */ -120,320,321,321,120,322,322,322,322,322,322,322,322,322,322,322, -322,322,322,322,322,322,322,120,120,120,322,322,322,322,322,322, -322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322, -322,322,120,322,322,322,322,322,322,322,322,322,120,322,120,120, -322,322,322,322,322,322,322,120,120,120,320,120,120,120,120,323, -321,321,320,320,320,120,320,120,321,321,321,321,321,321,321,323, -120,120,120,120,120,120,324,324,324,324,324,324,324,324,324,324, -120,120,321,321,325,120,120,120,120,120,120,120,120,120,120,120, +163,420,421,421,163,422,422,422,422,422,422,422,422,422,422,422, +422,422,422,422,422,422,422,163,163,163,422,422,422,422,422,422, +422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422, +422,422,163,422,422,422,422,422,422,422,422,422,163,422,163,163, +422,422,422,422,422,422,422,163,163,163,423,163,163,163,163,424, +421,421,420,420,420,163,420,163,421,421,421,421,421,421,421,424, +163,163,163,163,163,163,425,425,425,425,425,425,425,425,425,425, +163,163,421,421,426,163,163,163,163,163,163,163,163,163,163,163, /* block 28 */ -120,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326, -326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326, -326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326, -326,327,326,328,327,327,327,327,327,327,327,120,120,120,120, 6, -326,326,326,326,326,326,329,327,327,327,327,327,327,327,327,330, -331,331,331,331,331,331,331,331,331,331,330,330,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +163,427,427,427,427,427,427,427,427,427,427,427,427,427,427,427, +427,427,427,427,427,427,427,427,427,427,427,427,427,427,427,427, +427,427,427,427,427,427,427,427,427,427,427,427,427,427,427,427, +427,428,427,429,428,428,428,428,428,428,430,163,163,163,163,431, +432,432,432,432,432,427,433,434,434,434,434,434,434,428,434,435, +436,436,436,436,436,436,436,436,436,436,437,437,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, /* block 29 */ -120,332,332,120,332,120,332,332,332,332,332,120,332,332,332,332, -332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332, -332,332,332,332,120,332,120,332,332,332,332,332,332,332,332,332, -332,333,332,334,333,333,333,333,333,333,333,333,333,332,120,120, -332,332,332,332,332,120,335,120,333,333,333,333,333,333,120,120, -336,336,336,336,336,336,336,336,336,336,120,120,332,332,332,332, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +163,438,438,163,438,163,438,438,438,438,438,163,438,438,438,438, +438,438,438,438,438,438,438,438,438,438,438,438,438,438,438,438, +438,438,438,438,163,438,163,438,438,438,438,438,438,438,438,438, +438,439,438,440,439,439,439,439,439,439,441,439,439,438,163,163, +442,442,442,442,442,163,443,163,444,444,444,444,444,439,163,163, +445,445,445,445,445,445,445,445,445,445,163,163,438,438,438,438, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, /* block 30 */ -337,338,338,338,339,339,339,339,339,339,339,339,339,339,339,339, -339,339,339,338,339,338,338,338,340,340,338,338,338,338,338,338, -341,341,341,341,341,341,341,341,341,341,342,342,342,342,342,342, -342,342,342,342,338,340,338,340,338,340,343,344,343,344,345,345, -337,337,337,337,337,337,337,337,120,337,337,337,337,337,337,337, -337,337,337,337,337,337,337,337,337,337,337,337,337,337,337,337, -337,337,337,337,337,337,337,337,337,337,337,337,337,120,120,120, -120,340,340,340,340,340,340,340,340,340,340,340,340,340,340,345, +446,447,447,447,448,448,448,448,449,448,448,448,448,449,449,449, +449,449,449,447,448,447,447,447,450,450,447,447,447,447,447,447, +451,451,451,451,451,451,451,451,451,451,452,452,452,452,452,452, +452,452,452,452,447,450,447,450,447,450,453,454,453,454,455,455, +446,446,446,446,446,446,446,446,163,446,446,446,446,446,446,446, +446,446,446,446,446,446,446,446,446,446,446,446,446,446,446,446, +446,446,446,446,446,446,446,446,446,446,446,446,446,163,163,163, +163,456,456,456,456,456,456,457,456,457,456,456,456,456,456,458, /* block 31 */ -340,340,340,340,340,339,340,340,337,337,337,337,337,340,340,340, -340,340,340,340,340,340,340,340,120,340,340,340,340,340,340,340, -340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340, -340,340,340,340,340,340,340,340,340,340,340,340,340,120,338,338, -338,338,338,338,338,338,340,338,338,338,338,338,338,120,338,338, -339,339,339,339,339, 20, 20, 20, 20,339,339,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +456,456,450,450,459,448,450,450,446,446,446,446,446,456,456,456, +456,456,456,456,456,456,456,456,163,456,456,456,456,456,456,456, +456,456,456,456,456,456,456,456,456,456,456,456,456,456,456,456, +456,456,456,456,456,456,456,456,456,456,456,456,456,163,447,447, +447,447,447,447,447,447,450,447,447,447,447,447,447,163,447,447, +448,448,448,448,448,460,460,460,460,448,448,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, /* block 32 */ -346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346, -346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346, -346,346,346,346,346,346,346,346,346,346,346,347,347,348,348,348, -348,349,348,348,348,348,348,348,347,348,348,349,349,348,348,346, -350,350,350,350,350,350,350,350,350,350,351,351,351,351,351,351, -346,346,346,346,346,346,349,349,348,348,346,346,346,346,348,348, -348,346,347,347,347,346,346,347,347,347,347,347,347,347,346,346, -346,348,348,348,348,346,346,346,346,346,346,346,346,346,346,346, +461,461,461,461,461,461,461,461,461,461,461,461,461,461,461,461, +461,461,461,461,461,461,461,461,461,461,461,461,461,461,461,461, +461,461,461,461,461,461,461,461,461,461,461,462,462,463,463,463, +463,464,463,463,463,463,463,465,462,466,466,464,464,463,463,461, +467,467,467,467,467,467,467,467,467,467,468,468,469,469,469,469, +461,461,461,461,461,461,464,464,463,463,461,461,461,461,463,463, +463,461,462,470,470,461,461,462,462,470,470,470,470,470,461,461, +461,463,463,463,463,461,461,461,461,461,461,461,461,461,461,461, /* block 33 */ -346,346,348,347,349,348,348,347,347,347,347,347,347,348,346,347, -352,352,352,352,352,352,352,352,352,352,347,347,347,348,353,353, -354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354, -354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354, -354,354,354,354,354,354,120,354,120,120,120,120,120,354,120,120, -355,355,355,355,355,355,355,355,355,355,355,355,355,355,355,355, -355,355,355,355,355,355,355,355,355,355,355,355,355,355,355,355, -355,355,355,355,355,355,355,355,355,355,355,356,357,355,355,355, +461,461,463,462,464,463,463,470,470,470,470,470,470,471,461,470, +472,472,472,472,472,472,472,472,472,472,470,470,462,463,473,473, +474,474,474,474,474,474,474,474,474,474,474,474,474,474,474,474, +474,474,474,474,474,474,474,474,474,474,474,474,474,474,474,474, +474,474,474,474,474,474,163,474,163,163,163,163,163,474,163,163, +475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475, +475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475, +475,475,475,475,475,475,475,475,475,475,475,476,477,475,475,475, /* block 34 */ -358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358, -358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358, -358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358, -358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358, -358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358, -358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358, -359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359, -359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359, +478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,478, +478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,478, +478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,478, +478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,478, +478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,478, +478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,479, +480,481,481,481,481,481,481,481,481,481,481,481,481,481,481,481, +481,481,481,481,481,481,481,481,481,481,481,481,481,481,481,481, /* block 35 */ -359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359, -359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359, -359,359,359,359,359,359,359,359,360,360,360,360,360,360,360,360, -360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360, -360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360, -360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360, -360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360, -360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360, +481,481,481,481,481,481,481,481,481,481,481,481,481,481,481,481, +481,481,481,481,481,481,481,481,481,481,481,481,481,481,481,481, +481,481,481,481,481,481,481,481,482,482,482,482,482,482,482,482, +482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,482, +482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,482, +482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,482, +482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,482, +482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,482, /* block 36 */ -361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361, -361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361, -361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361, -361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361, -361,361,361,361,361,361,361,361,361,120,361,361,361,361,120,120, -361,361,361,361,361,361,361,120,361,120,361,361,361,361,120,120, -361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361, -361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361, +483,483,483,483,483,483,483,483,483,483,483,483,483,483,483,483, +483,483,483,483,483,483,483,483,483,483,483,483,483,483,483,483, +483,483,483,483,483,483,483,483,483,483,483,483,483,483,483,483, +483,483,483,483,483,483,483,483,483,483,483,483,483,483,483,483, +483,483,483,483,483,483,483,483,483,163,483,483,483,483,163,163, +483,483,483,483,483,483,483,163,483,163,483,483,483,483,163,163, +483,483,483,483,483,483,483,483,483,483,483,483,483,483,483,483, +483,483,483,483,483,483,483,483,483,483,483,483,483,483,483,483, /* block 37 */ -361,361,361,361,361,361,361,361,361,120,361,361,361,361,120,120, -361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361, -361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361, -361,120,361,361,361,361,120,120,361,361,361,361,361,361,361,120, -361,120,361,361,361,361,120,120,361,361,361,361,361,361,361,361, -361,361,361,361,361,361,361,120,361,361,361,361,361,361,361,361, -361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361, -361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361, +483,483,483,483,483,483,483,483,483,163,483,483,483,483,163,163, +483,483,483,483,483,483,483,483,483,483,483,483,483,483,483,483, +483,483,483,483,483,483,483,483,483,483,483,483,483,483,483,483, +483,163,483,483,483,483,163,163,483,483,483,483,483,483,483,163, +483,163,483,483,483,483,163,163,483,483,483,483,483,483,483,483, +483,483,483,483,483,483,483,163,483,483,483,483,483,483,483,483, +483,483,483,483,483,483,483,483,483,483,483,483,483,483,483,483, +483,483,483,483,483,483,483,483,483,483,483,483,483,483,483,483, /* block 38 */ -361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361, -361,120,361,361,361,361,120,120,361,361,361,361,361,361,361,361, -361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361, -361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361, -361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361, -361,361,361,361,361,361,361,361,361,361,361,120,120,362,362,362, -363,363,363,363,363,363,363,363,363,364,364,364,364,364,364,364, -364,364,364,364,364,364,364,364,364,364,364,364,364,120,120,120, +483,483,483,483,483,483,483,483,483,483,483,483,483,483,483,483, +483,163,483,483,483,483,163,163,483,483,483,483,483,483,483,483, +483,483,483,483,483,483,483,483,483,483,483,483,483,483,483,483, +483,483,483,483,483,483,483,483,483,483,483,483,483,483,483,483, +483,483,483,483,483,483,483,483,483,483,483,483,483,483,483,483, +483,483,483,483,483,483,483,483,483,483,483,163,163,484,484,484, +485,486,487,486,486,486,486,487,487,488,488,488,488,488,488,488, +488,488,489,489,489,489,489,489,489,489,489,489,489,163,163,163, /* block 39 */ -361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361, -365,365,365,365,365,365,365,365,365,365,120,120,120,120,120,120, -366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366, -366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366, -366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366, -366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366, -366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366, -367,367,367,367,367,367,120,120,368,368,368,368,368,368,120,120, +483,483,483,483,483,483,483,483,483,483,483,483,483,483,483,483, +490,490,490,490,490,490,490,490,490,490,163,163,163,163,163,163, +491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491, +491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491, +491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491, +491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491, +491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491, +492,492,492,492,492,492,163,163,493,493,493,493,493,493,163,163, /* block 40 */ -369,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, -370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, -370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, -370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, -370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, -370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, -370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, -370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, +494,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495, +495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495, +495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495, +495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495, +495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495, +495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495, +495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495, +495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495, /* block 41 */ -370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, -370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, -370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, -370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, -370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, -370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, -370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, -370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, +495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495, +495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495, +495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495, +495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495, +495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495, +495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495, +495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495, +495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495, /* block 42 */ -370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, -370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, -370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, -370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, -370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, -370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, -370,370,370,370,370,370,370,370,370,370,370,370,370,371,372,370, -370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, +495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495, +495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495, +495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495, +495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495, +495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495, +495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495, +495,495,495,495,495,495,495,495,495,495,495,495,495,496,497,495, +495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495, /* block 43 */ -373,374,374,374,374,374,374,374,374,374,374,374,374,374,374,374, -374,374,374,374,374,374,374,374,374,374,374,375,376,120,120,120, -377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,377, -377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,377, -377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,377, -377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,377, -377,377,377,377,377,377,377,377,377,377,377, 5, 5, 5,378,378, -378,377,377,377,377,377,377,377,377,120,120,120,120,120,120,120, +498,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499, +499,499,499,499,499,499,499,499,499,499,499,500,501,163,163,163, +502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502, +502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502, +502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502, +502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502, +502,502,502,502,502,502,502,502,502,502,502,503,503,503,504,504, +504,502,502,502,502,502,502,502,502,163,163,163,163,163,163,163, /* block 44 */ -379,379,379,379,379,379,379,379,379,379,379,379,379,379,379,379, -379,379,380,380,380,381,120,120,120,120,120,120,120,120,120,379, -382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382, -382,382,383,383,384,385,385,120,120,120,120,120,120,120,120,120, -386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386, -386,386,387,387,120,120,120,120,120,120,120,120,120,120,120,120, -388,388,388,388,388,388,388,388,388,388,388,388,388,120,388,388, -388,120,389,389,120,120,120,120,120,120,120,120,120,120,120,120, +505,505,505,505,505,505,505,505,505,505,505,505,505,505,505,505, +505,505,506,506,507,508,163,163,163,163,163,163,163,163,163,505, +509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,509, +509,509,510,510,511,512,512,163,163,163,163,163,163,163,163,163, +513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513, +513,513,514,514,163,163,163,163,163,163,163,163,163,163,163,163, +515,515,515,515,515,515,515,515,515,515,515,515,515,163,515,515, +515,163,516,516,163,163,163,163,163,163,163,163,163,163,163,163, /* block 45 */ -390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390, -390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390, -390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390, -390,390,390,390,391,391,392,391,391,391,391,391,391,391,392,392, -392,392,392,392,392,392,391,392,392,391,391,391,391,391,391,391, -391,391,391,391,393,393,393,394,393,393,393,395,390,391,120,120, -396,396,396,396,396,396,396,396,396,396,120,120,120,120,120,120, -397,397,397,397,397,397,397,397,397,397,120,120,120,120,120,120, +517,517,517,517,517,517,517,517,517,517,517,517,517,517,517,517, +517,517,517,517,517,517,517,517,517,517,517,517,517,517,517,517, +517,517,517,518,518,517,517,517,517,517,517,517,517,517,517,517, +517,517,517,517,519,519,520,521,521,521,521,521,521,521,520,520, +520,520,520,520,520,520,521,520,520,522,522,522,522,522,522,522, +522,522,523,522,524,524,524,525,526,526,524,527,517,522,163,163, +528,528,528,528,528,528,528,528,528,528,163,163,163,163,163,163, +529,529,529,529,529,529,529,529,529,529,163,163,163,163,163,163, /* block 46 */ -398,398,399,399,398,399,400,398,398,398,398,401,401,401,402,401, -403,403,403,403,403,403,403,403,403,403,120,120,120,120,120,120, -404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404, -404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404, -404,404,404,405,404,404,404,404,404,404,404,404,404,404,404,404, -404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404, -404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404, -404,404,404,404,404,404,404,404,404,120,120,120,120,120,120,120, +530,530,531,532,533,531,534,530,533,535,536,537,537,537,538,537, +539,539,539,539,539,539,539,539,539,539,163,163,163,163,163,163, +540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540, +540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540, +540,540,540,541,540,540,540,540,540,540,540,540,540,540,540,540, +540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540, +540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540, +540,540,540,540,540,540,540,540,540,163,163,163,163,163,163,163, /* block 47 */ -404,404,404,404,404,401,401,404,404,404,404,404,404,404,404,404, -404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404, -404,404,404,404,404,404,404,404,404,401,404,120,120,120,120,120, -370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, -370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, -370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, -370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, -370,370,370,370,370,370,120,120,120,120,120,120,120,120,120,120, +540,540,540,540,540,542,542,540,540,540,540,540,540,540,540,540, +540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540, +540,540,540,540,540,540,540,540,540,543,540,163,163,163,163,163, +495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495, +495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495, +495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495, +495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495, +495,495,495,495,495,495,163,163,163,163,163,163,163,163,163,163, /* block 48 */ -406,406,406,406,406,406,406,406,406,406,406,406,406,406,406,406, -406,406,406,406,406,406,406,406,406,406,406,406,406,406,406,120, -407,407,407,408,408,408,408,407,407,408,408,408,120,120,120,120, -408,408,407,408,408,408,408,408,408,407,407,407,120,120,120,120, -409,120,120,120,410,410,411,411,411,411,411,411,411,411,411,411, -412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,412, -412,412,412,412,412,412,412,412,412,412,412,412,412,412,120,120, -412,412,412,412,412,120,120,120,120,120,120,120,120,120,120,120, +544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544, +544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,163, +545,545,545,546,546,546,546,545,545,546,546,546,163,163,163,163, +546,546,545,546,546,546,546,546,546,547,547,547,163,163,163,163, +548,163,163,163,549,549,550,550,550,550,550,550,550,550,550,550, +551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551, +551,551,551,551,551,551,551,551,551,551,551,551,551,551,163,163, +551,551,551,551,551,163,163,163,163,163,163,163,163,163,163,163, /* block 49 */ -413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413, -413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413, -413,413,413,413,413,413,413,413,413,413,413,413,120,120,120,120, -413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413, -413,413,413,413,413,413,413,413,413,413,120,120,120,120,120,120, -414,414,414,414,414,414,414,414,414,414,415,120,120,120,416,416, -417,417,417,417,417,417,417,417,417,417,417,417,417,417,417,417, -417,417,417,417,417,417,417,417,417,417,417,417,417,417,417,417, +552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552, +552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552, +552,552,552,552,552,552,552,552,552,552,552,552,163,163,163,163, +552,552,552,552,552,553,553,553,552,552,553,552,552,552,552,552, +552,552,552,552,552,552,552,552,552,552,163,163,163,163,163,163, +554,554,554,554,554,554,554,554,554,554,555,163,163,163,556,556, +557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557, +557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557, /* block 50 */ -418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418, -418,418,418,418,418,418,418,419,419,420,420,419,120,120,421,421, -422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422, -422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422, -422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422, -422,422,422,422,422,423,424,423,424,424,424,424,424,424,424,120, -424,425,424,425,425,424,424,424,424,424,424,424,424,423,423,423, -423,423,423,424,424,424,424,424,424,424,424,424,424,120,120,424, +558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558, +558,558,558,558,558,558,558,559,559,560,560,559,163,163,561,561, +562,562,562,562,562,562,562,562,562,562,562,562,562,562,562,562, +562,562,562,562,562,562,562,562,562,562,562,562,562,562,562,562, +562,562,562,562,562,562,562,562,562,562,562,562,562,562,562,562, +562,562,562,562,562,563,564,563,564,564,564,564,564,564,564,163, +565,566,564,566,566,564,564,564,564,564,564,564,564,563,563,563, +563,563,563,564,564,567,567,567,567,567,567,567,567,163,163,567, /* block 51 */ -426,426,426,426,426,426,426,426,426,426,120,120,120,120,120,120, -426,426,426,426,426,426,426,426,426,426,120,120,120,120,120,120, -427,427,427,427,427,427,427,428,427,427,427,427,427,427,120,120, -113,113,113,113,113,113,113,113,113,113,113,113,113,113,429,113, -113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +568,568,568,568,568,568,568,568,568,568,163,163,163,163,163,163, +568,568,568,568,568,568,568,568,568,568,163,163,163,163,163,163, +569,569,569,569,569,569,569,570,571,571,571,571,569,569,163,163, +154,154,154,154,154,154,154,154,154,154,154,154,154,154,572,573, +573,154,154,154,154,154,154,154,154,154,154,154,573,573,573,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, /* block 52 */ -430,430,430,430,431,432,432,432,432,432,432,432,432,432,432,432, -432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432, -432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432, -432,432,432,432,430,433,430,430,430,430,430,431,430,431,431,431, -431,431,430,431,431,432,432,432,432,432,432,432,432,120,120,120, -434,434,434,434,434,434,434,434,434,434,435,435,435,435,435,435, -435,436,436,436,436,436,436,436,436,436,436,430,430,430,430,430, -430,430,430,430,436,436,436,436,436,436,436,436,436,435,435,120, +574,574,574,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,576,576,576, +576,576,576,576,576,576,576,576,576,576,576,576,576,576,576,576, +576,576,576,576,577,578,574,574,574,574,574,575,574,575,575,575, +575,575,574,575,579,576,576,576,576,576,576,576,576,163,163,163, +580,580,580,580,580,580,580,580,580,580,581,581,582,583,581,581, +582,584,584,584,584,584,584,584,584,584,584,577,577,577,577,577, +577,577,577,577,584,584,584,584,584,584,584,584,584,581,581,163, /* block 53 */ -437,437,438,439,439,439,439,439,439,439,439,439,439,439,439,439, -439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439, -439,438,437,437,437,437,438,438,437,437,438,437,437,437,439,439, -440,440,440,440,440,440,440,440,440,440,439,439,439,439,439,439, -441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,441, -441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,441, -441,441,441,441,441,441,442,443,442,442,443,443,443,442,443,442, -442,442,443,443,120,120,120,120,120,120,120,120,444,444,444,444, +585,585,586,587,587,587,587,587,587,587,587,587,587,587,587,587, +587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587, +587,586,585,585,585,585,586,586,585,585,588,589,585,585,587,587, +590,590,590,590,590,590,590,590,590,590,587,587,587,587,587,587, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +591,591,591,591,591,591,592,593,594,594,593,593,593,594,593,594, +594,594,595,595,163,163,163,163,163,163,163,163,596,596,596,596, /* block 54 */ -445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445, -445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445, -445,445,445,445,446,446,446,446,446,446,446,446,447,447,447,447, -447,447,447,447,446,446,447,447,120,120,120,448,448,448,448,448, -449,449,449,449,449,449,449,449,449,449,120,120,120,445,445,445, -450,450,450,450,450,450,450,450,450,450,451,451,451,451,451,451, -451,451,451,451,451,451,451,451,451,451,451,451,451,451,451,451, -451,451,451,451,451,451,451,451,452,452,452,452,452,452,453,453, +597,597,597,597,597,597,597,597,597,597,597,597,597,597,597,597, +597,597,597,597,597,597,597,597,597,597,597,597,597,597,597,597, +597,597,597,597,598,598,598,598,598,598,598,598,599,599,599,599, +599,599,599,599,598,598,600,601,163,163,163,602,602,603,603,603, +604,604,604,604,604,604,604,604,604,604,163,163,163,597,597,597, +605,605,605,605,605,605,605,605,605,605,606,606,606,606,606,606, +606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606, +606,606,606,606,606,606,606,606,607,607,607,608,607,607,609,609, /* block 55 */ -454,455,456,457,458,459,460,461,462,120,120,120,120,120,120,120, -463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463, -463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463, -463,463,463,463,463,463,463,463,463,463,463,120,120,463,463,463, -464,464,464,464,464,464,464,464,120,120,120,120,120,120,120,120, -465,466,465,467,466,468,468,469,468,469,470,466,469,469,466,466, -469,471,466,466,466,466,466,466,466,472,473,474,474,468,474,474, -474,474,475,476,477,473,473,478,479,479,480,120,120,120,120,120, +610,611,612,613,614,615,616,617,618,163,163,163,163,163,163,163, +619,619,619,619,619,619,619,619,619,619,619,619,619,619,619,619, +619,619,619,619,619,619,619,619,619,619,619,619,619,619,619,619, +619,619,619,619,619,619,619,619,619,619,619,163,163,619,619,619, +620,620,620,620,620,620,620,620,163,163,163,163,163,163,163,163, +621,622,621,623,622,624,624,625,624,625,626,622,625,625,622,622, +625,627,622,622,622,622,622,622,622,628,629,630,630,624,630,630, +630,630,631,632,633,629,629,634,635,635,636,163,163,163,163,163, /* block 56 */ - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35,128,128,128,128,128,481,110,110,110,110, -110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, -110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, -110,110,110,110,110,110,110,110,110,110,110,110,110,121,121,121, -121,121,110,110,110,110,121,121,121,121,121, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35,482,483, 35, 35, 35,484, 35, 35, + 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,221,221,221,221,221,637,147,147,147,147, +147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147, +147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147, +147,147,147,147,147,147,147,147,147,147,147,147,147,638,638,638, +638,638,148,147,147,147,638,638,638,638,638, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70,639,640, 70, 70, 70,641, 70, 70, /* block 57 */ - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,485, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,110,110,110,110,110, -110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, -110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,121, -114,114,113,113,113,113,113,113,113,113,113,113,113,113,113,113, -113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, -113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, -113,113,113,113,113,113,113,113,486,113,487,113,113,113,113,113, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,642, 70, + 70, 70, 70, 70, 70, 70,643, 70, 70, 70, 70,644,644,644,644,644, +644,644,644,644,645,644,644,644,645,644,644,644,644,644,644,644, +644,644,644,644,644,644,644,644,644,644,644,644,644,644,644,646, +647,647,158,158,154,154,154,154,154,154,154,154,154,154,154,154, +158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158, +158,158,158,158,158,158,158,573,573,573,573,573,573,573,573,573, +573,573,573,573,573,154,154,154,648,154,649,154,154,154,154,154, /* block 58 */ - 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, - 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, - 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, - 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, - 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, - 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, -488,489, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, - 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, + 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, + 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, + 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 67, 65, 66, + 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, + 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, + 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, +650,651, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, + 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, /* block 59 */ - 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, - 32, 33, 32, 33, 32, 33, 35, 35, 35, 35, 35,490, 35, 35,491, 35, - 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, - 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, - 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, - 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, - 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, - 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, + 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, + 65, 66, 65, 66, 65, 66, 69, 69, 69, 69,652,653, 70, 70,654, 70, + 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, + 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, + 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 67, 65, 66, 65, 66, + 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, + 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, + 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, /* block 60 */ -492,492,492,492,492,492,492,492,493,493,493,493,493,493,493,493, -492,492,492,492,492,492,120,120,493,493,493,493,493,493,120,120, -492,492,492,492,492,492,492,492,493,493,493,493,493,493,493,493, -492,492,492,492,492,492,492,492,493,493,493,493,493,493,493,493, -492,492,492,492,492,492,120,120,493,493,493,493,493,493,120,120, -128,492,128,492,128,492,128,492,120,493,120,493,120,493,120,493, -492,492,492,492,492,492,492,492,493,493,493,493,493,493,493,493, -494,494,495,495,495,495,496,496,497,497,498,498,499,499,120,120, +655,655,655,655,655,655,655,655,656,656,656,656,656,656,656,656, +655,655,655,655,655,655,163,163,656,656,656,656,656,656,163,163, +655,655,655,655,655,655,655,655,656,656,656,656,656,656,656,656, +655,655,655,655,655,655,655,655,656,656,656,656,656,656,656,656, +655,655,655,655,655,655,163,163,656,656,656,656,656,656,163,163, +173,655,173,655,173,655,173,655,163,656,163,656,163,656,163,656, +655,655,655,655,655,655,655,655,656,656,656,656,656,656,656,656, +657,657,658,658,658,658,659,659,660,660,661,661,662,662,163,163, /* block 61 */ -492,492,492,492,492,492,492,492,500,500,500,500,500,500,500,500, -492,492,492,492,492,492,492,492,500,500,500,500,500,500,500,500, -492,492,492,492,492,492,492,492,500,500,500,500,500,500,500,500, -492,492,128,501,128,120,128,128,493,493,502,502,503,119,504,119, -119,119,128,501,128,120,128,128,505,505,505,505,503,119,119,119, -492,492,128,128,120,120,128,128,493,493,506,506,120,119,119,119, -492,492,128,128,128,169,128,128,493,493,507,507,174,119,119,119, -120,120,128,501,128,120,128,128,508,508,509,509,503,119,119,120, +663,663,663,663,663,663,663,663,664,664,664,664,664,664,664,664, +663,663,663,663,663,663,663,663,664,664,664,664,664,664,664,664, +663,663,663,663,663,663,663,663,664,664,664,664,664,664,664,664, +655,655,665,666,665,163,173,665,656,656,667,667,668,162,669,162, +162,162,665,666,665,163,173,665,670,670,670,670,668,162,162,162, +655,655,173,173,163,163,173,173,656,656,671,671,163,162,162,162, +655,655,173,173,173,215,173,173,656,656,672,672,220,162,162,162, +163,163,665,666,665,163,173,665,673,673,674,674,668,162,162,163, /* block 62 */ - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 24,510,511, 24, 24, - 10, 10, 10, 10, 10, 10, 5, 5, 23, 27, 7, 23, 23, 27, 7, 23, - 5, 5, 5, 5, 5, 5, 5, 5,512,513, 24, 24, 24, 24, 24,514, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 23, 27, 5,515, 5, 5, 16, - 16, 5, 5, 5, 9, 7, 8, 5, 5,515, 5, 5, 5, 5, 5, 5, - 5, 5, 9, 5, 16, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, - 24, 24, 24, 24, 24,516, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 25,110,120,120, 25, 25, 25, 25, 25, 25, 9, 9, 9, 7, 8,110, +675,675,675,675,675,675,675,675,675,675,675, 51,676,677,678,679, +680,680,680,680,680,680,681, 43,682,683,684,685,685,686,684,685, + 43, 43, 43, 43,687, 43, 43,687,688,689,690,691,692,693,694,695, +696,696,697,697,697, 43, 43, 43, 43, 49, 57, 43,698,699, 43,700, +701, 43, 43, 43,702,703,704,699,699,698, 43, 43, 43, 43, 43, 43, + 43, 43, 50,705,700, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43,675, + 51,706,706,706,706,707,708,709,710,711,712,712,712,712,712,712, + 54,645,163,163, 54, 54, 54, 54, 54, 54,713,714,715,716,717,644, /* block 63 */ - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 9, 9, 9, 7, 8,120, -110,110,110,110,110,110,110,110,110,110,110,110,110,120,120,120, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -113,113,113,113,113,113,113,113,113,113,113,113,113,429,429,429, -429,113,429,429,429,113,113,113,113,113,113,113,113,113,113,113, -517,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,713,714,715,716,717,163, +644,644,644,644,644,644,644,644,644,644,644,644,644,163,163,163, +431,431,431,431,431,431,431,431,431,431,431,431,431,431,431,431, +431,431,431,431,431,431,431,431,431,431,431,431,431,431,431,431, +431,718,718,718,718,718,718,718,718,718,718,718,718,718,718,718, +719,719,719,719,719,719,719,719,719,719,719,719,719,720,720,720, +720,719,720,721,720,719,719,158,158,158,158,719,719,719,719,719, +722,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, /* block 64 */ - 20, 20,518, 20, 20, 20, 20,518, 20, 20,519,518,518,518,519,519, -518,518,518,519, 20,518, 20, 20, 9,518,518,518,518,518, 20, 20, - 20, 20, 21, 20,518, 20,520, 20,518, 20,521,522,518,518, 20,519, -518,518,523,518,519,524,524,524,524,525, 20, 20,519,519,518,518, - 9, 9, 9, 9, 9,518,519,519,519,519, 20, 9, 20, 20,526, 20, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, -527,527,527,527,527,527,527,527,527,527,527,527,527,527,527,527, -528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528, +723,723,724,723,723,723,723,724,723,723,725,724,724,724,725,725, +724,724,724,725,723,724,723,723,726,724,724,724,724,724,723,723, +723,723,727,723,724,723,728,723,724,729,730,731,724,724,732,725, +724,724,733,724,725,734,734,734,734,735,723,723,725,725,724,724, +715,715,715,715,715,724,725,725,736,736,723,715,723,723,737,460, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, +738,738,738,738,738,738,738,738,738,738,738,738,738,738,738,738, +739,739,739,739,739,739,739,739,739,739,739,739,739,739,739,739, /* block 65 */ -529,529,529, 32, 33,529,529,529,529, 25, 20, 20,120,120,120,120, - 9, 9, 9, 9,530, 21, 21, 21, 21, 21, 9, 9, 20, 20, 20, 20, - 9, 20, 20, 9, 20, 20, 9, 20, 20, 21, 21, 20, 20, 20, 9, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 9, 9, - 20, 20, 9, 20, 9, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, +740,740,740, 65, 66,740,740,740,740, 58,723,723,163,163,163,163, + 50, 50, 50, 50,741,742,742,742,742,742, 50, 50,743,743,743,743, + 50,743,743, 50,743,743, 50,743, 45,742,742,743,743,743, 50, 45, +743,743, 45, 45, 45, 45,743,743, 45, 45, 45, 45,743,743,743,743, +743,743,743,743,743,743,743,743,743,743,743,743,743,743, 50, 50, +743,743, 50,743, 50,743,743,743,743,743,743,743, 45,743, 45, 45, + 45, 45, 45, 45,743,743, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, /* block 66 */ - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 50, 50, 50, 50, 50, 50, 50, 50,744,744,744,744,744,744, 50, 50, + 50, 50,745, 53, 50,744, 50, 50, 50, 50, 50, 50, 50, 50, 50,744, +744,744,744, 50,744, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,744,744, 50, 50, + 50, 50, 50,744, 50,744, 50, 50, 50, 50, 50, 50,744, 50, 50, 50, + 50, 50,744,744,744,744, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50,744,744,744,744,744,744,744,744, 50, 50,744,744, +744,744,744,744,744,744,744,744,744,744,744,744,744,744,744,744, /* block 67 */ - 20, 20, 20, 20, 20, 20, 20, 20, 7, 8, 7, 8, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 20, 20, 20, 20, - 9, 9, 20, 20, 20, 20, 20, 20, 21, 7, 8, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 9, 20, 20, 20, +744,744,744,744,744,744,744,744,744,744,744,744, 50, 50, 50,744, +744,744,744, 50, 50, 50, 50, 50,744, 50, 50, 50, 50, 50, 50, 50, + 50, 50,744,744, 50, 50,744, 50,744,744, 50,744, 50, 50, 50, 50, +744,744,744,744,744,744,744,744,744, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50,744,744,744,744,744, 50, 50, +744,744, 50, 50, 50, 50,744,744,744,744,744,744,744,744,744,744, +744,744,744,744,744,744,744,744,744,744,744,744,744,744, 50, 50, +744,744,744,744,744, 50,744,744, 50, 50,744,744,744,744,744, 50, /* block 68 */ - 20, 20, 20, 20, 20, 20, 20, 20, 21, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 9, 9, 9, 9, - 9, 9, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 20, 20, 20, 20, 21, 21, 21, 20, 20, 20, 20, 20, + 45, 45, 45, 45, 45, 45, 45, 45,746,747,746,747, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,748,748, 45, 45, 45, 45, + 50, 50, 45, 45, 45, 45, 45, 45, 47,749,750, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45,751,751,751,751,751,751,751,751,751,751, +751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751, +751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751, +751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751, +751,751,751,751,751,751,751,751,751,751,751, 45, 50, 45, 45, 45, /* block 69 */ - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, - 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, + 45, 45, 45, 45, 45, 45, 45, 45,752, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45,751, 45, 45, 45, 45, 45, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50,743,743, 45,743, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 47, +743, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 50, 50, 50, 50, + 50, 50,743, 45, 45, 45, 45, 45, 45,748,748,748,748, 47, 47, 47, +748, 47, 47,748, 45, 45, 45, 45, 47, 47, 47, 45, 45, 45, 45, 45, /* block 70 */ - 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, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20,531,531,531,531,531,531,531,531,531,531, -531,531,532,531,531,531,531,531,531,531,531,531,531,531,531,531, -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, -533,533,533,533,533,533,533,533,533,533, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 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,753,753,753,753,753,753,753,753,753, +753,753,753,753,753,753,753,753,753,753,753,753,753,753,753,753, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,753,753,753,753,753, +753,753,753,753,753,753,753,753,753,753,753,753,753,753,753,753, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, /* block 71 */ - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 58, 58, 58, 58, 58, 58, 58, 58, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,460,460,460,460, +460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460, +460,460,460,460,460,460,754,754,754,754,754,754,754,754,754,754, +754,754,755,754,754,754,754,754,754,754,754,754,754,754,754,754, +756,756,756,756,756,756,756,756,756,756,756,756,756,756,756,756, +756,756,756,756,756,756,756,756,756,756, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, /* block 72 */ - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 21, 9, 20, 20, 20, 20, 20, 20, 20, 20, - 21, 9, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 9, 9, 9,530,530,530,530, 9, + 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, + 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, + 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, /* block 73 */ - 21, 21, 21, 21, 21, 21, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,530, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 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, +743,743, 45, 45, 45, 45, 45, 45, 45, 45, 47, 47, 45, 45,743,743, +743,743,743,743,743,743,742, 50, 45, 45, 45, 45,743,743,743,743, +742, 50, 45, 45, 45, 45,743,743, 45, 45,743,743, 45, 45, 45,743, +743,743,743,743, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45,743, 45,743, 45, 45,743,743,743,743,743,743, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 50, 50, 50,741,741,757,757, 50, /* block 74 */ - 21, 21, 21, 21, 21, 21, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 47, 47, 47, 47, 47,758,743,752,752,752,752,752,752,752, 47,752, +752, 47,752, 45,748,748,752,752, 47,752,752,752,752,759,752,752, + 47,752, 47, 47,752,752, 47,752,752,752, 47,752,752,752, 47, 47, +752,752,752,752,752,752,752,752, 47, 47, 47,752,752,752,752,752, +742,752,742,752,752,752,752,752,748,748,748,748,748,748,748,748, +748,748,748,748,752,752,752,752,752,752,752,752,752,752,752, 47, +742,758,758,742,752, 47, 47,752, 47,752,752,752,752,758,758,760, +752,752,752,752,752,752,752,752,752,752,752, 47,752,752, 47,748, /* block 75 */ - 21, 21, 21, 21, 21, 21, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 20, 21, 20, 21, 20, 20, 20, 20, 20, 20, 21, 20, 20, - 20, 21, 20, 20, 20, 20, 20, 20, 21, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 21, 21, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 21, 20, 20, 21, 20, 20, 20, 20, 21, 20, 21, 20, - 20, 20, 20, 21, 21, 21, 20, 21, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 21, 21, 21, 21, 21, 7, 8, 7, 8, 7, 8, 7, 8, - 7, 8, 7, 8, 7, 8, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, +752,752,752,752,752,752, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, +752,752, 47,748, 47, 47, 47, 47,752, 47,752, 47, 47,752,752,752, + 47,748,752,752,752,752,752, 47,752,752,748,748,761,752,752,752, + 47, 47,752,752,752,752,752,752,752,752,752,752,752,748,748,752, +752,752,752,752,748,748,752,752, 47,752,752,752,752,752,748, 47, +752, 47,752, 47,748,752,752,752,752,752,752,752,752,752,752,752, +752,752,752,752,752,752,752,752,752, 47,748,752,752,752,752,752, + 47, 47,748,748, 47,748,752, 47, 47,759,748,752,752,748,752,752, /* block 76 */ - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 20, 21, 21, 21, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 21, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 21, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, - 9, 9, 9, 9, 9, 7, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 7, 8, 7, 8, 7, 8, 7, 8, 7, 8, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, +752,752, 47,752,752,748, 45, 45, 47, 47,762,762,759,759,752, 47, +752,752, 47, 45, 47, 45, 47, 45, 45, 45, 45, 45, 45, 47, 45, 45, + 45, 47, 45, 45, 45, 45, 45, 45,748, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 47, 47, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 47, 45, 45, 47, 45, 45, 45, 45,748, 45,748, 45, + 45, 45, 45,748,748,748, 45,748, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 47, 47,752,752,752,703,704,703,704,703,704,703,704, +703,704,703,704,703,704, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, /* block 77 */ -534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534, -534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534, -534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534, -534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534, -534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534, -534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534, -534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534, -534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 45,748,748,748, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 47, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, +748, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,748, + 50, 50, 50,744,744,746,747, 50,744,744, 50,744, 50,744, 50, 50, + 50, 50, 50, 50, 50,744,744, 50, 50, 50, 50, 50,744,744,744, 50, + 50, 50,744,744,744,744,746,747,746,747,746,747,746,747,746,747, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, /* block 78 */ - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9,530,530, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, +763,763,763,763,763,763,763,763,763,763,763,763,763,763,763,763, +763,763,763,763,763,763,763,763,763,763,763,763,763,763,763,763, +763,763,763,763,763,763,763,763,763,763,763,763,763,763,763,763, +763,763,763,763,763,763,763,763,763,763,763,763,763,763,763,763, +763,763,763,763,763,763,763,763,763,763,763,763,763,763,763,763, +763,763,763,763,763,763,763,763,763,763,763,763,763,763,763,763, +763,763,763,763,763,763,763,763,763,763,763,763,763,763,763,763, +763,763,763,763,763,763,763,763,763,763,763,763,763,763,763,763, /* block 79 */ - 9, 9, 9, 7, 8, 7, 8, 7, 8, 7, 8, 7, 8, 7, 8, 7, - 8, 7, 8, 7, 8, 7, 8, 7, 8, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 7, 8, 7, 8, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 7, 8, 9, 9, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50,741,741, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, /* block 80 */ - 20, 20, 20, 20, 20, 21, 21, 21, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 20, 20, 9, 9, 9, 9, 9, 9, 20, 20, 20, - 21, 20, 20, 20, 20, 21, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20,120,120, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 50, 50, 50,746,747,746,747,746,747,746,747,746,747,746,747,746, +747,746,747,746,747,746,747,746,747, 50, 50,744, 50, 50, 50, 50, +744, 50, 50,744,744,744, 50, 50,744,744,744,744,744,744,744,744, + 50, 50, 50, 50, 50, 50, 50, 50,744, 50, 50, 50, 50, 50, 50, 50, +744,744, 50, 50,744,744, 50, 50, 50, 50, 50, 50, 50, 50, 50,744, +744,744,744, 50,744,744, 50, 50,746,747,746,747, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50,744,744, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50,744, 50, 50,744,744, 50, 50,746,747, 50, 50, /* block 81 */ - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20,120, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,744,744,744,744, 50, + 50, 50, 50, 50,744,744, 50, 50, 50, 50, 50, 50,744,744, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50,744,744, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50,744,744,744,744,744,744,744, /* block 82 */ -535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,535, -535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,535, -535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,535, -536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536, -536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536, -536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536, - 32, 33,537,538,539,540,541, 32, 33, 32, 33, 32, 33,542,543,544, -545, 35, 32, 33, 35, 32, 33, 35, 35, 35, 35, 35,110,110,546,546, +744,744,744,744,744,744,744,744,744,744,744,744,744,744,744,744, +744,744,744,744,744,744,744,744,744,744,744,744,744,744,744,744, +744,744,744, 50, 50, 50,744,744,744,744,744,744,744,744, 50,744, +744,744,744,744,744,744,744,744,744,744,744,744,744,744,744,744, +744,744,744,744,744,744,744,744,744,744,744,744,744,744,744,744, +744,744,744,744,744,744,744, 50, 50, 50, 50, 50, 50, 50,744, 50, + 50, 50, 50,744,744,744, 50, 50, 50, 50, 50, 50,744,744,744, 50, + 50, 50, 50, 50, 50, 50, 50,744,744,744,744, 50, 50, 50, 50, 50, /* block 83 */ -165,166,165,166,165,166,165,166,165,166,165,166,165,166,165,166, -165,166,165,166,165,166,165,166,165,166,165,166,165,166,165,166, -165,166,165,166,165,166,165,166,165,166,165,166,165,166,165,166, -165,166,165,166,165,166,165,166,165,166,165,166,165,166,165,166, -165,166,165,166,165,166,165,166,165,166,165,166,165,166,165,166, -165,166,165,166,165,166,165,166,165,166,165,166,165,166,165,166, -165,166,165,166,547,548,548,548,548,548,548,165,166,165,166,549, -549,549,165,166,120,120,120,120,120,550,550,550,550,551,550,550, + 45, 45, 45, 45, 45, 47, 47, 47, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,748,748, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 45, 45, 50, 50, 50, 50, 50, 50, 45, 45, 45, +748, 45, 45, 45, 45,748, 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,753,753, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, /* block 84 */ -552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552, -552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552, -552,552,552,552,552,552,120,552,120,120,120,120,120,552,120,120, -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,553,553,553,553,553,553,553,553,553,553,553,553,553,553, -553,553,553,553,553,553,553,553,120,120,120,120,120,120,120,554, -555,120,120,120,120,120,120,120,120,120,120,120,120,120,120,556, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45,753, 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, 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, 45, 45, 45, 45, 45, 45, 45,764, 45, /* block 85 */ -361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361, -361,361,361,361,361,361,361,120,120,120,120,120,120,120,120,120, -361,361,361,361,361,361,361,120,361,361,361,361,361,361,361,120, -361,361,361,361,361,361,361,120,361,361,361,361,361,361,361,120, -361,361,361,361,361,361,361,120,361,361,361,361,361,361,361,120, -361,361,361,361,361,361,361,120,361,361,361,361,361,361,361,120, -557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557, -557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557, +765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765, +765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765, +765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765, +766,766,766,766,766,766,766,766,766,766,766,766,766,766,766,766, +766,766,766,766,766,766,766,766,766,766,766,766,766,766,766,766, +766,766,766,766,766,766,766,766,766,766,766,766,766,766,766,766, + 65, 66,767,768,769,770,771, 65, 66, 65, 66, 65, 66,772,773,774, +775, 70, 65, 66, 70, 65, 66, 70, 70, 70, 70, 70,645,644,776,776, /* block 86 */ - 5, 5, 23, 27, 23, 27, 5, 5, 5, 23, 27, 5, 23, 27, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 10, 5, 5, 10, 5, 23, 27, 5, 5, - 23, 27, 7, 8, 7, 8, 7, 8, 7, 8, 5, 5, 5, 5, 5,111, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 10, 10, 5, 5, 5, 5, - 10, 5, 7,558, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 20, 20, 5, 5, 5, 7, 8, 7, 8, 7, 8, 7, 8, 10,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +211,212,211,212,211,212,211,212,211,212,211,212,211,212,211,212, +211,212,211,212,211,212,211,212,211,212,211,212,211,212,211,212, +211,212,211,212,211,212,211,212,211,212,211,212,211,212,211,212, +211,212,211,212,211,212,211,212,211,212,211,212,211,212,211,212, +211,212,211,212,211,212,211,212,211,212,211,212,211,212,211,212, +211,212,211,212,211,212,211,212,211,212,211,212,211,212,211,212, +211,212,211,212,777,778,778,778,778,778,778,211,212,211,212,779, +779,779,211,212,163,163,163,163,163,780,780,780,780,781,780,780, /* block 87 */ -559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559, -559,559,559,559,559,559,559,559,559,559,120,559,559,559,559,559, -559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559, -559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559, -559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559, -559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559, -559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559, -559,559,559,559,120,120,120,120,120,120,120,120,120,120,120,120, +782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782, +782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782, +782,782,782,782,782,782,163,782,163,163,163,163,163,782,163,163, +783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783, +783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783, +783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783, +783,783,783,783,783,783,783,783,163,163,163,163,163,163,163,784, +785,163,163,163,163,163,163,163,163,163,163,163,163,163,163,786, /* block 88 */ -559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559, -559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559, -559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559, -559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559, -559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559, -559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559, -559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559, -559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559, +483,483,483,483,483,483,483,483,483,483,483,483,483,483,483,483, +483,483,483,483,483,483,483,163,163,163,163,163,163,163,163,163, +483,483,483,483,483,483,483,163,483,483,483,483,483,483,483,163, +483,483,483,483,483,483,483,163,483,483,483,483,483,483,483,163, +483,483,483,483,483,483,483,163,483,483,483,483,483,483,483,163, +483,483,483,483,483,483,483,163,483,483,483,483,483,483,483,163, +787,787,787,787,787,787,787,787,787,787,787,787,787,787,787,787, +787,787,787,787,787,787,787,787,787,787,787,787,787,787,787,787, /* block 89 */ -559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559, -559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559, -559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559, -559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559, -559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559, -559,559,559,559,559,559,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,120,120,120,120, + 43, 43,788,789,788,789, 43, 43, 43,788,789, 43,788,789, 43, 43, + 43, 43, 43, 43, 43, 43, 43,680, 43, 43,680, 43,788,789, 43, 43, +788,789,703,704,703,704,703,704,703,704, 43, 43, 43, 43,699,790, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43,680,680,699, 43, 43, 43, +680,791,684,792, 43, 43, 43, 43, 43, 43, 43, 43,791, 43,791,791, + 45, 45, 43,699,699,703,704,703,704,703,704,703,704,680,753,753, +753,753,753,753,753,753,753,753,753,753,753,753,753,753,753,753, +753,753,753,753,753,753,753,753,753,753,753,753,753,753,753,753, /* block 90 */ - 4,560,560,561, 20,562,563,564,565,566,565,566,565,566,565,566, -565,566, 20,567,565,566,565,566,565,566,565,566,568,569,570,570, - 20,564,564,564,564,564,564,564,564,564,571,571,571,571,572,572, -573,574,574,574,574,574, 20,567,564,564,564,562,575,576,577,577, -120,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, -578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, -578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, -578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, +793,793,793,793,793,793,793,793,793,793,793,793,793,793,793,793, +793,793,793,793,793,793,793,793,793,793,163,793,793,793,793,793, +793,793,793,793,793,793,793,793,793,793,793,793,793,793,793,793, +793,793,793,793,793,793,793,793,793,793,793,793,793,793,793,793, +793,793,793,793,793,793,793,793,793,793,793,793,793,793,793,793, +793,793,793,793,793,793,793,793,793,793,793,793,793,793,793,793, +793,793,793,793,793,793,793,793,793,793,793,793,793,793,793,793, +793,793,793,793,163,163,163,163,163,163,163,163,163,163,163,163, /* block 91 */ -578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, -578,578,578,578,578,578,578,120,120,579,579,580,580,581,581,578, -582,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583, -583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583, -583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583, -583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583, -583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583, -583,583,583,583,583,583,583,583,583,583,583,560,574,584,584,583, +793,793,793,793,793,793,793,793,793,793,793,793,793,793,793,793, +793,793,793,793,793,793,793,793,793,793,793,793,793,793,793,793, +793,793,793,793,793,793,793,793,793,793,793,793,793,793,793,793, +793,793,793,793,793,793,793,793,793,793,793,793,793,793,793,793, +793,793,793,793,793,793,793,793,793,793,793,793,793,793,793,793, +793,793,793,793,793,793,793,793,793,793,793,793,793,793,793,793, +793,793,793,793,793,793,793,793,793,793,793,793,793,793,793,793, +793,793,793,793,793,793,793,793,793,793,793,793,793,793,793,793, /* block 92 */ -120,120,120,120,120,585,585,585,585,585,585,585,585,585,585,585, -585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585, -585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585, -120,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, +793,793,793,793,793,793,793,793,793,793,793,793,793,793,793,793, +793,793,793,793,793,793,793,793,793,793,793,793,793,793,793,793, +793,793,793,793,793,793,793,793,793,793,793,793,793,793,793,793, +793,793,793,793,793,793,793,793,793,793,793,793,793,793,793,793, +793,793,793,793,793,793,793,793,793,793,793,793,793,793,793,793, +793,793,793,793,793,793,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +794,794,795,795,794,794,794,794,794,794,794,794,163,163,163,163, /* block 93 */ -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,120, -577,577,587,587,587,587,577,577,577,577,577,577,577,577,577,577, -585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585, -585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585, -577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577, -577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577, -577,577,577,577,120,120,120,120,120,120,120,120,120,120,120,120, -583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583, +675,796,797,798,723,799,800,801,802,803,802,803,804,805,804,805, +802,803, 45,806,802,803,802,803,802,803,802,803,807,808,809,809, + 45,801,801,801,801,801,801,801,801,801,810,810,810,810,811,811, +812,813,813,813,813,813,723,814,801,801,801,815,816,817,818,818, +163,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819, +819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819, +819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819, +819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819, /* block 94 */ -588,588,588,588,588,588,588,588,588,588,588,588,588,588,588,588, -588,588,588,588,588,588,588,588,588,588,588,588,588,588,588,120, -587,587,587,587,587,587,587,587,587,587,577,577,577,577,577,577, -577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577, -577,577,577,577,577,577,577,577, 25, 25, 25, 25, 25, 25, 25, 25, - 20, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, -588,588,588,588,588,588,588,588,588,588,588,588,588,588,588,588, -588,588,588,588,588,588,588,588,588,588,588,588,588,588,588, 20, +819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819, +819,819,819,819,819,819,819,163,163,820,820,821,821,822,822,819, +823,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824, +824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824, +824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824, +824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824, +824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824, +824,824,824,824,824,824,824,824,824,824,824,825,826,827,827,824, /* block 95 */ -587,587,587,587,587,587,587,587,587,587,577,577,577,577,577,577, -577,577,577,577,577,577,577,589,577,589,577,577,577,577,577,577, -577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577, -577, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, -577,577,577,577,577,577,577,577,577,577,577,577, 20, 20, 20, 20, -590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590, -590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590, -590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,577, +163,163,163,163,163,828,828,828,828,828,828,828,828,828,828,828, +828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828, +828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828, +163,829,829,829,829,829,829,829,829,829,829,829,829,829,829,829, +829,829,829,829,829,829,829,829,829,829,829,829,829,829,829,829, +829,829,829,829,829,829,829,829,829,829,829,829,829,829,829,829, +829,829,829,829,830,829,829,829,829,829,829,829,829,829,829,829, +829,829,829,829,829,829,829,829,829,829,829,829,829,829,829,829, /* block 96 */ -590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590, -590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590, -590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590, -590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590, -590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590, -590,590,590,590,590,590,590,590,577,577,577,577,577,577,577,577, -577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577, -577, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,577,577,577,577,577, +829,829,829,829,829,829,829,829,829,829,829,829,829,829,829,163, +831,831,832,832,832,832,831,831,831,831,831,831,831,831,831,831, +828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828, +828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828, +818,818,818,818,818,818,818,818,818,818,818,818,818,818,818,818, +818,818,818,818,818,818,818,818,818,818,818,818,818,818,818,818, +818,818,818,818,163,163,163,163,163,163,163,163,163,163,163,163, +824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824, /* block 97 */ - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, -577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577, -577,577,577,577,577,577,577,577,577,577,577,577,577,577,577, 20, +833,833,833,833,833,833,833,833,833,833,833,833,833,833,833,833, +833,833,833,833,833,833,833,833,833,833,833,833,833,834,834,163, +832,832,832,832,832,832,832,832,832,832,831,831,831,831,831,831, +831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831, +831,831,831,831,831,831,831,831,835,835,835,835,835,835,835,835, +723, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, +833,833,833,833,833,833,833,833,833,833,833,833,833,833,833,833, +833,833,833,833,833,833,833,833,833,833,833,833,834,834,834,460, /* block 98 */ -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +832,832,832,832,832,832,832,832,832,832,831,831,831,831,831,831, +831,831,831,831,831,831,831,836,831,836,831,831,831,831,831,831, +831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831, +831, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, +831,831,831,831,831,831,831,831,831,831,831,831,723,723,723,723, +837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,837, +837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,837, +837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,831, /* block 99 */ -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, +837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,837, +837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,837, +837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,837, +837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,837, +837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,837, +837,837,837,837,837,837,837,837,831,831,831,831,831,831,831,831, +831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831, +831,460,460,460,460,460,460,723,723,723,723,831,831,831,831,831, /* block 100 */ -592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592, -592,592,592,592,592,593,592,592,592,592,592,592,592,592,592,592, -592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592, -592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592, -592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592, -592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592, -592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592, -592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592, +460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460, +460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460, +460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460, +460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460, +460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460, +460,460,460,460,460,460,460,460,460,460,460,460,460,460,723,723, +831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831, +831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,723, /* block 101 */ -592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592, -592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592, -592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592, -592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592, -592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592, -592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592, -592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592, -592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592, +838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, +838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, +838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, +838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, +838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, +838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, +838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, +838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, /* block 102 */ -592,592,592,592,592,592,592,592,592,592,592,592,592,120,120,120, -594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,594, -594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,594, -594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,594, -594,594,594,594,594,594,594,120,120,120,120,120,120,120,120,120, -595,595,595,595,595,595,595,595,595,595,595,595,595,595,595,595, -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,596,596,596,596,596,597,597, +838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, +838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, +838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, +838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, +723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723, +723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723, +723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723, +723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723, /* block 103 */ -598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598, -598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598, -598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598, -598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598, -598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598, -598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598, -598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598, -598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598, +839,839,839,839,839,839,839,839,839,839,839,839,839,839,839,839, +839,839,839,839,839,840,839,839,839,839,839,839,839,839,839,839, +839,839,839,839,839,839,839,839,839,839,839,839,839,839,839,839, +839,839,839,839,839,839,839,839,839,839,839,839,839,839,839,839, +839,839,839,839,839,839,839,839,839,839,839,839,839,839,839,839, +839,839,839,839,839,839,839,839,839,839,839,839,839,839,839,839, +839,839,839,839,839,839,839,839,839,839,839,839,839,839,839,839, +839,839,839,839,839,839,839,839,839,839,839,839,839,839,839,839, /* block 104 */ -598,598,598,598,598,598,598,598,598,598,598,598,599,600,600,600, -598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598, -601,601,601,601,601,601,601,601,601,601,598,598,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -192,193,192,193,192,193,192,193,192,193,602,603,192,193,192,193, -192,193,192,193,192,193,192,193,192,193,192,193,192,193,192,193, -192,193,192,193,192,193,192,193,192,193,192,193,192,193,604,198, -200,200,200,605,557,557,557,557,557,557,557,557,557,557,605,482, +839,839,839,839,839,839,839,839,839,839,839,839,839,839,839,839, +839,839,839,839,839,839,839,839,839,839,839,839,839,839,839,839, +839,839,839,839,839,839,839,839,839,839,839,839,839,839,839,839, +839,839,839,839,839,839,839,839,839,839,839,839,839,839,839,839, +839,839,839,839,839,839,839,839,839,839,839,839,839,839,839,839, +839,839,839,839,839,839,839,839,839,839,839,839,839,839,839,839, +839,839,839,839,839,839,839,839,839,839,839,839,839,839,839,839, +839,839,839,839,839,839,839,839,839,839,839,839,839,839,839,839, /* block 105 */ -192,193,192,193,192,193,192,193,192,193,192,193,192,193,192,193, -192,193,192,193,192,193,192,193,192,193,192,193,482,482,557,557, -606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606, -606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606, -606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606, -606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606, -606,606,606,606,606,606,607,607,607,607,607,607,607,607,607,607, -608,608,609,609,609,609,609,609,120,120,120,120,120,120,120,120, +839,839,839,839,839,839,839,839,839,839,839,839,839,163,163,163, +841,841,841,841,841,841,841,841,841,841,841,841,841,841,841,841, +841,841,841,841,841,841,841,841,841,841,841,841,841,841,841,841, +841,841,841,841,841,841,841,841,841,841,841,841,841,841,841,841, +841,841,841,841,841,841,841,163,163,163,163,163,163,163,163,163, +842,842,842,842,842,842,842,842,842,842,842,842,842,842,842,842, +842,842,842,842,842,842,842,842,842,842,842,842,842,842,842,842, +842,842,842,842,842,842,842,842,843,843,843,843,843,843,844,845, /* block 106 */ -610,610,610,610,610,610,610,610, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15,111,111,111,111,111,111,111,111,111, - 15, 15, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, - 35, 35, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, - 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, - 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, - 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, -110, 35, 35, 35, 35, 35, 35, 35, 35, 32, 33, 32, 33,611, 32, 33, +846,846,846,846,846,846,846,846,846,846,846,846,846,846,846,846, +846,846,846,846,846,846,846,846,846,846,846,846,846,846,846,846, +846,846,846,846,846,846,846,846,846,846,846,846,846,846,846,846, +846,846,846,846,846,846,846,846,846,846,846,846,846,846,846,846, +846,846,846,846,846,846,846,846,846,846,846,846,846,846,846,846, +846,846,846,846,846,846,846,846,846,846,846,846,846,846,846,846, +846,846,846,846,846,846,846,846,846,846,846,846,846,846,846,846, +846,846,846,846,846,846,846,846,846,846,846,846,846,846,846,846, /* block 107 */ - 32, 33, 32, 33, 32, 33, 32, 33,111, 15, 15, 32, 33,612, 35, 22, - 32, 33, 32, 33,613, 35, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, - 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,614,615,616,617,614, 35, -618,619,620,621, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, - 32, 33, 32, 33,622,623,624, 32, 33, 32, 33,120,120,120,120,120, - 32, 33,120, 35,120, 35, 32, 33, 32, 33,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,110,110,110, 32, 33, 22,110,110, 35, 22, 22, 22, 22, 22, +846,846,846,846,846,846,846,846,846,846,846,846,847,848,849,849, +846,846,846,846,846,846,846,846,846,846,846,846,846,846,846,846, +850,850,850,850,850,850,850,850,850,850,846,846,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +240,241,240,241,240,241,240,241,240,241,851,852,240,241,240,241, +240,241,240,241,240,241,240,241,240,241,240,241,240,241,240,241, +240,241,240,241,240,241,240,241,240,241,240,241,240,241,853,246, +248,248,248,854,787,787,787,787,787,787,787,787,855,855,854,856, /* block 108 */ -625,625,626,625,625,625,626,625,625,625,625,626,625,625,625,625, -625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625, -625,625,625,627,627,626,626,627,628,628,628,628,626,120,120,120, -629,629,629,630,630,630,631,631,632,631,120,120,120,120,120,120, -633,633,633,633,633,633,633,633,633,633,633,633,633,633,633,633, -633,633,633,633,633,633,633,633,633,633,633,633,633,633,633,633, -633,633,633,633,633,633,633,633,633,633,633,633,633,633,633,633, -633,633,633,633,634,634,634,634,120,120,120,120,120,120,120,120, +240,241,240,241,240,241,240,241,240,241,240,241,240,241,240,241, +240,241,240,241,240,241,240,241,240,241,240,241,857,857,787,787, +858,858,858,858,858,858,858,858,858,858,858,858,858,858,858,858, +858,858,858,858,858,858,858,858,858,858,858,858,858,858,858,858, +858,858,858,858,858,858,858,858,858,858,858,858,858,858,858,858, +858,858,858,858,858,858,858,858,858,858,858,858,858,858,858,858, +858,858,858,858,858,858,859,859,859,859,859,859,859,859,859,859, +860,860,861,862,863,863,863,862,163,163,163,163,163,163,163,163, /* block 109 */ -635,635,636,636,636,636,636,636,636,636,636,636,636,636,636,636, -636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,636, -636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,636, -636,636,636,636,635,635,635,635,635,635,635,635,635,635,635,635, -635,635,635,635,637,637,120,120,120,120,120,120,120,120,638,638, -639,639,639,639,639,639,639,639,639,639,120,120,120,120,120,120, -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, -253,640,255,641,255,255,255,255,261,261,261,255,261,255,255,253, +864,864,864,864,864,864,864,864, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46,149,149,149,149,149,149,149,149,149, + 46, 46, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, + 70, 70, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, + 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, + 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, + 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, +644, 70, 70, 70, 70, 70, 70, 70, 70, 65, 66, 65, 66,865, 65, 66, /* block 110 */ -642,642,642,642,642,642,642,642,642,642,643,643,643,643,643,643, -643,643,643,643,643,643,643,643,643,643,643,643,643,643,643,643, -643,643,643,643,643,643,644,644,644,644,644,644,644,644,645,646, -647,647,647,647,647,647,647,647,647,647,647,647,647,647,647,647, -647,647,647,647,647,647,647,648,648,648,648,648,648,648,648,648, -648,648,649,649,120,120,120,120,120,120,120,120,120,120,120,650, -358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358, -358,358,358,358,358,358,358,358,358,358,358,358,358,120,120,120, + 65, 66, 65, 66, 65, 66, 65, 66,149,866,866, 65, 66,867, 70, 92, + 65, 66, 65, 66,868, 70, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, + 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,869,870,871,872,869, 70, +873,874,875,876, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, + 65, 66, 65, 66,877,878,879, 65, 66, 65, 66,163,163,163,163,163, + 65, 66,163, 70,163, 70, 65, 66, 65, 66,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,880,880,880, 65, 66, 92,147,147, 70, 92, 92, 92, 92, 92, /* block 111 */ -651,651,651,652,653,653,653,653,653,653,653,653,653,653,653,653, -653,653,653,653,653,653,653,653,653,653,653,653,653,653,653,653, -653,653,653,653,653,653,653,653,653,653,653,653,653,653,653,653, -653,653,653,651,652,652,651,651,651,651,652,652,651,651,652,652, -652,654,654,654,654,654,654,654,654,654,654,654,654,654,120,655, -656,656,656,656,656,656,656,656,656,656,120,120,120,120,654,654, -346,346,346,346,346,348,657,346,346,346,346,346,346,346,346,346, -352,352,352,352,352,352,352,352,352,352,346,346,346,346,346,120, +881,881,882,881,881,881,883,881,881,881,881,882,881,881,881,881, +881,881,881,881,881,881,881,881,881,881,881,881,881,881,881,881, +881,881,881,884,884,882,882,884,885,885,885,885,883,163,163,163, +886,886,886,887,887,887,888,888,889,890,163,163,163,163,163,163, +891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, +891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, +891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, +891,891,891,891,892,892,893,893,163,163,163,163,163,163,163,163, /* block 112 */ -658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,658, -658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,658, -658,658,658,658,658,658,658,658,658,659,659,659,659,659,659,660, -660,659,659,660,660,659,659,120,120,120,120,120,120,120,120,120, -658,658,658,659,658,658,658,658,658,658,658,658,659,660,120,120, -661,661,661,661,661,661,661,661,661,661,120,120,662,662,662,662, -346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346, -657,346,346,346,346,346,346,353,353,353,346,347,348,347,346,346, +894,894,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,894,894,894,894,894,894,894,894,894,894,894,894, +894,894,894,894,896,897,163,163,163,163,163,163,163,163,898,898, +899,899,899,899,899,899,899,899,899,899,163,163,163,163,163,163, +336,336,336,336,336,336,336,336,336,336,336,336,336,336,336,336, +336,900,335,901,335,335,335,335,343,343,343,335,343,335,335,333, /* block 113 */ -663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663, -663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663, -663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663, -664,663,664,664,664,663,663,664,664,663,663,663,663,663,664,664, -663,664,663,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,663,663,665,666,666, -667,667,667,667,667,667,667,667,667,667,667,668,669,669,668,668, -670,670,667,671,671,668,669,120,120,120,120,120,120,120,120,120, +902,902,902,902,902,902,902,902,902,902,903,903,903,903,903,903, +903,903,903,903,903,903,903,903,903,903,903,903,903,903,903,903, +903,903,903,903,903,903,904,904,904,904,904,905,905,905,906,907, +908,908,908,908,908,908,908,908,908,908,908,908,908,908,908,908, +908,908,908,908,908,908,908,909,909,909,909,909,909,909,909,909, +909,909,910,911,163,163,163,163,163,163,163,163,163,163,163,912, +478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,478, +478,478,478,478,478,478,478,478,478,478,478,478,478,163,163,163, /* block 114 */ -120,361,361,361,361,361,361,120,120,361,361,361,361,361,361,120, -120,361,361,361,361,361,361,120,120,120,120,120,120,120,120,120, -361,361,361,361,361,361,361,120,361,361,361,361,361,361,361,120, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35,672, 35, 35, 35, 35, 35, 35, 35, 15,110,110,110,110, - 35, 35, 35, 35, 35,128, 35, 35, 35,110, 15, 15,120,120,120,120, -673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673, +913,913,913,914,915,915,915,915,915,915,915,915,915,915,915,915, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, +915,915,915,916,914,914,913,913,913,913,914,914,913,913,914,914, +917,918,918,918,918,918,918,919,920,920,918,918,918,918,163,921, +922,922,922,922,922,922,922,922,922,922,163,163,163,163,918,918, +461,461,461,461,461,471,923,461,461,461,461,461,461,461,461,461, +472,472,472,472,472,472,472,472,472,472,461,461,461,461,461,163, /* block 115 */ -673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673, -673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673, -673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673, -673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673, -667,667,667,667,667,667,667,667,667,667,667,667,667,667,667,667, -667,667,667,667,667,667,667,667,667,667,667,667,667,667,667,667, -667,667,667,668,668,669,668,668,669,668,668,670,668,669,120,120, -674,674,674,674,674,674,674,674,674,674,120,120,120,120,120,120, +924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,924, +924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,924, +924,924,924,924,924,924,924,924,924,925,925,925,925,925,925,926, +926,925,925,926,926,925,925,163,163,163,163,163,163,163,163,163, +924,924,924,925,924,924,924,924,924,924,924,924,925,926,163,163, +927,927,927,927,927,927,927,927,927,927,163,163,928,929,929,929, +461,461,461,461,461,461,461,461,461,461,461,461,461,461,461,461, +923,461,461,461,461,461,461,473,473,473,461,470,471,470,461,461, /* block 116 */ -675,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, -676,676,676,676,676,676,676,676,676,676,676,676,675,676,676,676, -676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, -676,676,676,676,676,676,676,676,675,676,676,676,676,676,676,676, -676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, -676,676,676,676,675,676,676,676,676,676,676,676,676,676,676,676, -676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, -675,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, +930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930, +930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930, +930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930, +931,930,931,931,931,932,932,931,931,932,930,932,932,930,931,933, +934,933,934,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,930,930,935,936,937, +938,938,938,938,938,938,938,938,938,938,938,939,940,940,939,939, +941,941,938,942,942,939,943,163,163,163,163,163,163,163,163,163, /* block 117 */ -676,676,676,676,676,676,676,676,676,676,676,676,675,676,676,676, -676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, -676,676,676,676,676,676,676,676,675,676,676,676,676,676,676,676, -676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, -676,676,676,676,675,676,676,676,676,676,676,676,676,676,676,676, -676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, -675,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, -676,676,676,676,676,676,676,676,676,676,676,676,675,676,676,676, +163,483,483,483,483,483,483,163,163,483,483,483,483,483,483,163, +163,483,483,483,483,483,483,163,163,163,163,163,163,163,163,163, +483,483,483,483,483,483,483,163,483,483,483,483,483,483,483,163, + 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,944, 70, 70, 70, 70, 70, 70, 70,866,147,147,147,147, + 70, 70, 70, 70, 70,221, 70, 70, 70,945, 46, 46,163,163,163,163, +946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946, /* block 118 */ -676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, -676,676,676,676,676,676,676,676,675,676,676,676,676,676,676,676, -676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, -676,676,676,676,675,676,676,676,676,676,676,676,676,676,676,676, -676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, -675,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, -676,676,676,676,676,676,676,676,676,676,676,676,675,676,676,676, -676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, +946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946, +946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946, +946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946, +946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946, +938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938, +938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938, +938,938,938,939,939,940,939,939,940,939,939,941,947,943,163,163, +948,948,948,948,948,948,948,948,948,948,163,163,163,163,163,163, /* block 119 */ -676,676,676,676,676,676,676,676,675,676,676,676,676,676,676,676, -676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, -676,676,676,676,675,676,676,676,676,676,676,676,676,676,676,676, -676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, -675,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, -676,676,676,676,676,676,676,676,676,676,676,676,675,676,676,676, -676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, -676,676,676,676,676,676,676,676,675,676,676,676,676,676,676,676, +949,950,950,950,950,950,950,950,950,950,950,950,950,950,950,950, +950,950,950,950,950,950,950,950,950,950,950,950,949,950,950,950, +950,950,950,950,950,950,950,950,950,950,950,950,950,950,950,950, +950,950,950,950,950,950,950,950,949,950,950,950,950,950,950,950, +950,950,950,950,950,950,950,950,950,950,950,950,950,950,950,950, +950,950,950,950,949,950,950,950,950,950,950,950,950,950,950,950, +950,950,950,950,950,950,950,950,950,950,950,950,950,950,950,950, +949,950,950,950,950,950,950,950,950,950,950,950,950,950,950,950, /* block 120 */ -676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, -676,676,676,676,675,676,676,676,676,676,676,676,676,676,676,676, -676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, -675,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, -676,676,676,676,676,676,676,676,676,676,676,676,675,676,676,676, -676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, -676,676,676,676,676,676,676,676,675,676,676,676,676,676,676,676, -676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, +950,950,950,950,950,950,950,950,950,950,950,950,949,950,950,950, +950,950,950,950,950,950,950,950,950,950,950,950,950,950,950,950, +950,950,950,950,950,950,950,950,949,950,950,950,950,950,950,950, +950,950,950,950,950,950,950,950,950,950,950,950,950,950,950,950, +950,950,950,950,949,950,950,950,950,950,950,950,950,950,950,950, +950,950,950,950,950,950,950,950,950,950,950,950,950,950,950,950, +949,950,950,950,950,950,950,950,950,950,950,950,950,950,950,950, +950,950,950,950,950,950,950,950,950,950,950,950,949,950,950,950, /* block 121 */ -676,676,676,676,675,676,676,676,676,676,676,676,676,676,676,676, -676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, -675,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, -676,676,676,676,676,676,676,676,676,676,676,676,675,676,676,676, -676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, -676,676,676,676,676,676,676,676,675,676,676,676,676,676,676,676, -676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, -676,676,676,676,675,676,676,676,676,676,676,676,676,676,676,676, +950,950,950,950,950,950,950,950,950,950,950,950,950,950,950,950, +950,950,950,950,950,950,950,950,949,950,950,950,950,950,950,950, +950,950,950,950,950,950,950,950,950,950,950,950,950,950,950,950, +950,950,950,950,949,950,950,950,950,950,950,950,950,950,950,950, +950,950,950,950,950,950,950,950,950,950,950,950,950,950,950,950, +949,950,950,950,950,950,950,950,950,950,950,950,950,950,950,950, +950,950,950,950,950,950,950,950,950,950,950,950,949,950,950,950, +950,950,950,950,950,950,950,950,950,950,950,950,950,950,950,950, /* block 122 */ -676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, -675,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, -676,676,676,676,676,676,676,676,676,676,676,676,675,676,676,676, -676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, -676,676,676,676,676,676,676,676,675,676,676,676,676,676,676,676, -676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, -676,676,676,676,675,676,676,676,676,676,676,676,676,676,676,676, -676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, +950,950,950,950,950,950,950,950,949,950,950,950,950,950,950,950, +950,950,950,950,950,950,950,950,950,950,950,950,950,950,950,950, +950,950,950,950,949,950,950,950,950,950,950,950,950,950,950,950, +950,950,950,950,950,950,950,950,950,950,950,950,950,950,950,950, +949,950,950,950,950,950,950,950,950,950,950,950,950,950,950,950, +950,950,950,950,950,950,950,950,950,950,950,950,949,950,950,950, +950,950,950,950,950,950,950,950,950,950,950,950,950,950,950,950, +950,950,950,950,950,950,950,950,949,950,950,950,950,950,950,950, /* block 123 */ -676,676,676,676,676,676,676,676,675,676,676,676,676,676,676,676, -676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676, -676,676,676,676,120,120,120,120,120,120,120,120,120,120,120,120, -359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359, -359,359,359,359,359,359,359,120,120,120,120,360,360,360,360,360, -360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360, -360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360, -360,360,360,360,360,360,360,360,360,360,360,360,120,120,120,120, +950,950,950,950,950,950,950,950,950,950,950,950,950,950,950,950, +950,950,950,950,949,950,950,950,950,950,950,950,950,950,950,950, +950,950,950,950,950,950,950,950,950,950,950,950,950,950,950,950, +949,950,950,950,950,950,950,950,950,950,950,950,950,950,950,950, +950,950,950,950,950,950,950,950,950,950,950,950,949,950,950,950, +950,950,950,950,950,950,950,950,950,950,950,950,950,950,950,950, +950,950,950,950,950,950,950,950,949,950,950,950,950,950,950,950, +950,950,950,950,950,950,950,950,950,950,950,950,950,950,950,950, /* block 124 */ -677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677, -677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677, -677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677, -677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677, -677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677, -677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677, -677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677, -677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677, +950,950,950,950,949,950,950,950,950,950,950,950,950,950,950,950, +950,950,950,950,950,950,950,950,950,950,950,950,950,950,950,950, +949,950,950,950,950,950,950,950,950,950,950,950,950,950,950,950, +950,950,950,950,950,950,950,950,950,950,950,950,949,950,950,950, +950,950,950,950,950,950,950,950,950,950,950,950,950,950,950,950, +950,950,950,950,950,950,950,950,949,950,950,950,950,950,950,950, +950,950,950,950,950,950,950,950,950,950,950,950,950,950,950,950, +950,950,950,950,949,950,950,950,950,950,950,950,950,950,950,950, /* block 125 */ -678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678, -678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678, -678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678, -678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678, -678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678, -678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678, -678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678, -678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678, +950,950,950,950,950,950,950,950,950,950,950,950,950,950,950,950, +949,950,950,950,950,950,950,950,950,950,950,950,950,950,950,950, +950,950,950,950,950,950,950,950,950,950,950,950,949,950,950,950, +950,950,950,950,950,950,950,950,950,950,950,950,950,950,950,950, +950,950,950,950,950,950,950,950,949,950,950,950,950,950,950,950, +950,950,950,950,950,950,950,950,950,950,950,950,950,950,950,950, +950,950,950,950,949,950,950,950,950,950,950,950,950,950,950,950, +950,950,950,950,950,950,950,950,950,950,950,950,950,950,950,950, /* block 126 */ -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,120,120, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +950,950,950,950,950,950,950,950,949,950,950,950,950,950,950,950, +950,950,950,950,950,950,950,950,950,950,950,950,950,950,950,950, +950,950,950,950,163,163,163,163,163,163,163,163,163,163,163,163, +481,481,481,481,481,481,481,481,481,481,481,481,481,481,481,481, +481,481,481,481,481,481,481,163,163,163,163,482,482,482,482,482, +482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,482, +482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,482, +482,482,482,482,482,482,482,482,482,482,482,482,163,163,163,163, /* block 127 */ -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +951,951,951,951,951,951,951,951,951,951,951,951,951,951,951,951, +951,951,951,951,951,951,951,951,951,951,951,951,951,951,951,951, +951,951,951,951,951,951,951,951,951,951,951,951,951,951,951,951, +951,951,951,951,951,951,951,951,951,951,951,951,951,951,951,951, +951,951,951,951,951,951,951,951,951,951,951,951,951,951,951,951, +951,951,951,951,951,951,951,951,951,951,951,951,951,951,951,951, +951,951,951,951,951,951,951,951,951,951,951,951,951,951,951,951, +951,951,951,951,951,951,951,951,951,951,951,951,951,951,951,951, /* block 128 */ - 35, 35, 35, 35, 35, 35, 35,120,120,120,120,120,120,120,120,120, -120,120,120,206,206,206,206,206,120,120,120,120,120,214,211,214, -214,214,214,214,214,214,214,214,214,679,214,214,214,214,214,214, -214,214,214,214,214,214,214,120,214,214,214,214,214,120,214,120, -214,214,120,214,214,120,214,214,214,214,214,214,214,214,214,214, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +952,952,952,952,952,952,952,952,952,952,952,952,952,952,952,952, +952,952,952,952,952,952,952,952,952,952,952,952,952,952,952,952, +952,952,952,952,952,952,952,952,952,952,952,952,952,952,952,952, +952,952,952,952,952,952,952,952,952,952,952,952,952,952,952,952, +952,952,952,952,952,952,952,952,952,952,952,952,952,952,952,952, +952,952,952,952,952,952,952,952,952,952,952,952,952,952,952,952, +952,952,952,952,952,952,952,952,952,952,952,952,952,952,952,952, +952,952,952,952,952,952,952,952,952,952,952,952,952,952,952,952, /* block 129 */ -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,252,252,252,252,252,252,252,252,252,252,252,252,252,252, -252,252,252,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +953,953,953,953,953,953,953,953,953,953,953,953,953,953,953,953, +953,953,953,953,953,953,953,953,953,953,953,953,953,953,953,953, +953,953,953,953,953,953,953,953,953,953,953,953,953,953,953,953, +953,953,953,953,953,953,953,953,953,953,953,953,953,953,953,953, +953,953,953,953,953,953,953,953,953,953,953,953,953,953,953,953, +953,953,953,953,953,953,953,953,953,953,953,953,953,953,953,953, +953,953,953,953,953,953,953,953,953,953,953,953,953,953,953,953, +953,953,953,953,953,953,953,953,953,953,953,953,953,953,953,953, /* block 130 */ -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +953,953,953,953,953,953,953,953,953,953,953,953,953,953,838,838, +953,838,953,838,838,953,953,953,953,953,953,953,953,953,953,838, +953,838,953,838,838,953,953,838,838,838,953,953,953,953,953,953, +953,953,953,953,953,953,953,953,953,953,953,953,953,953,953,953, +953,953,953,953,953,953,953,953,953,953,953,953,953,953,953,953, +953,953,953,953,953,953,953,953,953,953,953,953,953,953,953,953, +953,953,953,953,953,953,953,953,953,953,953,953,953,953,163,163, +953,953,953,953,953,953,953,953,953,953,953,953,953,953,953,953, /* block 131 */ -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,680,681, -221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +953,953,953,953,953,953,953,953,953,953,953,953,953,953,953,953, +953,953,953,953,953,953,953,953,953,953,953,953,953,953,953,953, +953,953,953,953,953,953,953,953,953,953,953,953,953,953,953,953, +953,953,953,953,953,953,953,953,953,953,953,953,953,953,953,953, +953,953,953,953,953,953,953,953,953,953,953,953,953,953,953,953, +953,953,953,953,953,953,953,953,953,953,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, /* block 132 */ -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -120,120,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,120,120,120,120,120,120,120,221, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -225,225,682,225,225,225,225,225,225,225,225,225,219,683,221,221, +652,652,652,652,652,652,652,163,163,163,163,163,163,163,163,163, +163,163,163,257,257,257,257,257,163,163,163,163,163,270,265,270, +270,270,270,270,270,270,270,270,270,954,270,270,270,270,270,270, +270,270,270,270,270,270,270,262,270,270,270,270,270,262,270,262, +270,270,262,270,270,262,270,270,270,270,270,270,270,270,270,270, +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,286,286,286,286,286,286,286,286,286,286,286,286,286, /* block 133 */ -113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, - 5, 5, 5, 5, 5, 5, 5, 7, 8, 5,120,120,120,120,120,120, -113,113,113,113,113,113,113,113,113,113,113,113,113,113,557,557, - 5, 10, 10, 16, 16, 7, 8, 7, 8, 7, 8, 7, 8, 7, 8, 7, - 8, 7, 8, 7, 8,561,561, 7, 8, 5, 5, 5, 5, 16, 16, 16, - 5, 5, 5,120, 5, 5, 5, 5, 10, 7, 8, 7, 8, 7, 8, 5, - 5, 5, 9, 10, 9, 9, 9,120, 5, 6, 5, 5,120,120,120,120, -225,225,225,225,225,120,225,225,225,225,225,225,225,225,225,225, +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,286,286,286,286,286,286,286,286,286,286,286,286,286, +286,286,331,331,331,331,331,331,331,331,331,331,331,331,331,331, +331,331,331,302,302,302,302,302,302,302,302,302,302,302,302,302, +302,302,302,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,286,286,286,286,286,286,286,286,286,286, /* block 134 */ -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,120,120, 24, +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,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,286,286,286,286,286,286,286,286,286,286, +286,286,286,286,286,286,286,286,286,286,286,286,286,286,955,955, +955,955,955,955,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, /* block 135 */ -120, 5, 5, 5, 6, 5, 5, 5, 7, 8, 5, 9, 5, 10, 5, 5, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 5, 5, 9, 9, 9, 5, - 5, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 7, 5, 8, 15, 16, - 15, 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, 7, 9, 8, 9, 7, - 8,560,565,566,560,560,583,583,583,583,583,583,583,583,583,583, -574,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583, +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,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,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,286,286,286,286,286,286,286, +286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286, /* block 136 */ -583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583, -583,583,583,583,583,583,583,583,583,583,583,583,583,583,684,684, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586, -586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,120, -120,120,586,586,586,586,586,586,120,120,586,586,586,586,586,586, -120,120,586,586,586,586,586,586,120,120,586,586,586,120,120,120, - 6, 6, 9, 15, 20, 6, 6,120, 20, 9, 9, 9, 9, 20, 20,120, -516,516,516,516,516,516,516,516,516, 24, 24, 24, 20, 20,120,120, +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,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,956,957, +280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280, +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,286,286,286,286,286,286,286,286,286,286,286,286,286, /* block 137 */ -685,685,685,685,685,685,685,685,685,685,685,685,120,685,685,685, -685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685, -685,685,685,685,685,685,685,120,685,685,685,685,685,685,685,685, -685,685,685,685,685,685,685,685,685,685,685,120,685,685,120,685, -685,685,685,685,685,685,685,685,685,685,685,685,685,685,120,120, -685,685,685,685,685,685,685,685,685,685,685,685,685,685,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286, +302,302,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,286,286,286,286,286,286,286,286,286,286,286, +286,286,286,286,286,286,286,286,302,302,302,302,302,302,302,280, +958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958, +958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958, +286,286,959,286,286,286,286,286,286,286,955,955,277,960,280,280, /* block 138 */ -685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685, -685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685, -685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685, -685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685, -685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685, -685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685, -685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685, -685,685,685,685,685,685,685,685,685,685,685,120,120,120,120,120, +961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,962, +963,963,963,964,963,963,963,965,966,963,163,163,163,163,163,163, +154,154,154,154,154,154,154,154,154,154,154,154,154,154,855,855, +963,967,967,700,700,965,966,965,966,965,966,965,966,965,966,965, +966,968,969,968,969,798,798,965,966,963,963,963,963,700,700,700, +970,166,971,163,166,972,973,973,967,974,975,974,975,974,975,976, +963,977,713,978,979,979,715,163,977,431,976,963,163,163,163,163, +955,286,955,286,955,302,955,286,955,286,955,286,955,286,955,286, /* block 139 */ -686,686,687,120,120,120,120,688,688,688,688,688,688,688,688,688, -688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,688, -688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,688, -688,688,688,688,120,120,120,689,689,689,689,689,689,689,689,689, -690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690, -690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690, -690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690, -690,690,690,690,690,691,691,691,691,692,692,692,692,692,692,692, +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,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,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,286,286,286,286,286,286,286, +286,286,286,286,286,286,286,286,286,286,286,286,286,302,302, 51, /* block 140 */ -692,692,692,692,692,692,692,692,692,692,691,691,692,692,692,120, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,120,120,120, -692,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,113,120,120, +163,973,980,976,431,976,963,981,974,975,963,713,970,982,971,983, +984,984,984,984,984,984,984,984,984,984,972,166,979,715,979,973, +963,985,985,985,985,985,985, 59, 59, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,974,977,975,986,700, + 46,987,987,987,987,987,987, 62, 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,974,715,975,715,974, +975,988,989,990,991,825,824,824,824,824,824,824,824,824,824,824, +826,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824, /* block 141 */ -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824, +824,824,824,824,824,824,824,824,824,824,824,824,824,824,992,992, +830,829,829,829,829,829,829,829,829,829,829,829,829,829,829,829, +829,829,829,829,829,829,829,829,829,829,829,829,829,829,829,163, +163,163,829,829,829,829,829,829,163,163,829,829,829,829,829,829, +163,163,829,829,829,829,829,829,163,163,829,829,829,163,163,163, +431,431,715, 46,723,431,431,163,723,715,715,715,715,723,723,163, +707,707,707,707,707,707,707,707,707,993,993,993,723,723,958,958, /* block 142 */ -693,693,693,693,693,693,693,693,693,693,693,693,693,693,693,693, -693,693,693,693,693,693,693,693,693,693,693,693,693,120,120,120, -694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,694, -694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,694, -694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,694, -694,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -695,696,696,696,696,696,696,696,696,696,696,696,696,696,696,696, -696,696,696,696,696,696,696,696,696,696,696,696,120,120,120,120, +994,994,994,994,994,994,994,994,994,994,994,994,163,994,994,994, +994,994,994,994,994,994,994,994,994,994,994,994,994,994,994,994, +994,994,994,994,994,994,994,163,994,994,994,994,994,994,994,994, +994,994,994,994,994,994,994,994,994,994,994,163,994,994,163,994, +994,994,994,994,994,994,994,994,994,994,994,994,994,994,163,163, +994,994,994,994,994,994,994,994,994,994,994,994,994,994,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, /* block 143 */ -697,697,697,697,697,697,697,697,697,697,697,697,697,697,697,697, -697,697,697,697,697,697,697,697,697,697,697,697,697,697,697,697, -698,698,698,698,120,120,120,120,120,120,120,120,120,697,697,697, -699,699,699,699,699,699,699,699,699,699,699,699,699,699,699,699, -699,700,699,699,699,699,699,699,699,699,700,120,120,120,120,120, -701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,701, -701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,701, -701,701,701,701,701,701,702,702,702,702,702,120,120,120,120,120, +994,994,994,994,994,994,994,994,994,994,994,994,994,994,994,994, +994,994,994,994,994,994,994,994,994,994,994,994,994,994,994,994, +994,994,994,994,994,994,994,994,994,994,994,994,994,994,994,994, +994,994,994,994,994,994,994,994,994,994,994,994,994,994,994,994, +994,994,994,994,994,994,994,994,994,994,994,994,994,994,994,994, +994,994,994,994,994,994,994,994,994,994,994,994,994,994,994,994, +994,994,994,994,994,994,994,994,994,994,994,994,994,994,994,994, +994,994,994,994,994,994,994,994,994,994,994,163,163,163,163,163, /* block 144 */ -703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703, -703,703,703,703,703,703,703,703,703,703,703,703,703,703,120,704, -705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705, -705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705, -705,705,705,705,120,120,120,120,705,705,705,705,705,705,705,705, -706,707,707,707,707,707,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +995,996,997,163,163,163,163,998,998,998,998,998,998,998,998,998, +998,998,998,998,998,998,998,998,998,998,998,998,998,998,998,998, +998,998,998,998,998,998,998,998,998,998,998,998,998,998,998,998, +998,998,998,998,163,163,163,999,999,999,999,999,999,999,999,999, +1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000, +1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000, +1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000, +1000,1000,1000,1000,1000,1001,1001,1001,1001,1002,1002,1002,1002,1002,1002,1002, /* block 145 */ -708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708, -708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708, -708,708,708,708,708,708,708,708,709,709,709,709,709,709,709,709, -709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709, -709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709, -710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710, -710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710, -710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710, +1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1001,1001,1002,1003,1003,163, +723,723,723,723,723,723,723,723,723,723,723,723,723,163,163,163, +1002,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460, +460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460, +460,460,460,460,460,460,460,460,460,460,460,460,460,158,163,163, /* block 146 */ -711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711, -711,711,711,711,711,711,711,711,711,711,711,711,711,711,120,120, -712,712,712,712,712,712,712,712,712,712,120,120,120,120,120,120, -713,713,713,713,713,713,713,713,713,713,713,713,713,713,713,713, -713,713,713,713,713,713,713,713,713,713,713,713,713,713,713,713, -713,713,713,713,120,120,120,120,714,714,714,714,714,714,714,714, -714,714,714,714,714,714,714,714,714,714,714,714,714,714,714,714, -714,714,714,714,714,714,714,714,714,714,714,714,120,120,120,120, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, /* block 147 */ -715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,715, -715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,715, -715,715,715,715,715,715,715,715,120,120,120,120,120,120,120,120, -716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,716, -716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,716, -716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,716, -716,716,716,716,120,120,120,120,120,120,120,120,120,120,120,717, -718,718,718,718,718,718,718,718,718,718,718,120,718,718,718,718, +1004,1004,1004,1004,1004,1004,1004,1004,1004,1004,1004,1004,1004,1004,1004,1004, +1004,1004,1004,1004,1004,1004,1004,1004,1004,1004,1004,1004,1004,163,163,163, +1005,1005,1005,1005,1005,1005,1005,1005,1005,1005,1005,1005,1005,1005,1005,1005, +1005,1005,1005,1005,1005,1005,1005,1005,1005,1005,1005,1005,1005,1005,1005,1005, +1005,1005,1005,1005,1005,1005,1005,1005,1005,1005,1005,1005,1005,1005,1005,1005, +1005,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +1006,1007,1007,1007,1007,1007,1007,1007,1007,1007,1007,1007,1007,1007,1007,1007, +1007,1007,1007,1007,1007,1007,1007,1007,1007,1007,1007,1007,163,163,163,163, /* block 148 */ -718,718,718,718,718,718,718,718,718,718,718,120,718,718,718,718, -718,718,718,120,718,718,120,719,719,719,719,719,719,719,719,719, -719,719,120,719,719,719,719,719,719,719,719,719,719,719,719,719, -719,719,120,719,719,719,719,719,719,719,120,719,719,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +1008,1008,1008,1008,1008,1008,1008,1008,1008,1008,1008,1008,1008,1008,1008,1008, +1008,1008,1008,1008,1008,1008,1008,1008,1008,1008,1008,1008,1008,1008,1008,1008, +1009,1009,1009,1009,163,163,163,163,163,163,163,163,163,1008,1008,1008, +1010,1010,1010,1010,1010,1010,1010,1010,1010,1010,1010,1010,1010,1010,1010,1010, +1010,1011,1010,1010,1010,1010,1010,1010,1010,1010,1011,163,163,163,163,163, +1012,1012,1012,1012,1012,1012,1012,1012,1012,1012,1012,1012,1012,1012,1012,1012, +1012,1012,1012,1012,1012,1012,1012,1012,1012,1012,1012,1012,1012,1012,1012,1012, +1012,1012,1012,1012,1012,1012,1013,1013,1013,1013,1013,163,163,163,163,163, /* block 149 */ -720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720, -720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720, -720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720, -720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720, -720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720, -720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720, -720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720, -720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720, +1014,1014,1014,1014,1014,1014,1014,1014,1014,1014,1014,1014,1014,1014,1014,1014, +1014,1014,1014,1014,1014,1014,1014,1014,1014,1014,1014,1014,1014,1014,163,1015, +1016,1016,1016,1016,1016,1016,1016,1016,1016,1016,1016,1016,1016,1016,1016,1016, +1016,1016,1016,1016,1016,1016,1016,1016,1016,1016,1016,1016,1016,1016,1016,1016, +1016,1016,1016,1016,163,163,163,163,1016,1016,1016,1016,1016,1016,1016,1016, +1017,1018,1018,1018,1018,1018,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, /* block 150 */ -720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720, -720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720, -720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720, -720,720,720,720,720,720,720,120,120,120,120,120,120,120,120,120, -720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720, -720,720,720,720,720,720,120,120,120,120,120,120,120,120,120,120, -720,720,720,720,720,720,720,720,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +1019,1019,1019,1019,1019,1019,1019,1019,1019,1019,1019,1019,1019,1019,1019,1019, +1019,1019,1019,1019,1019,1019,1019,1019,1019,1019,1019,1019,1019,1019,1019,1019, +1019,1019,1019,1019,1019,1019,1019,1019,1020,1020,1020,1020,1020,1020,1020,1020, +1020,1020,1020,1020,1020,1020,1020,1020,1020,1020,1020,1020,1020,1020,1020,1020, +1020,1020,1020,1020,1020,1020,1020,1020,1020,1020,1020,1020,1020,1020,1020,1020, +1021,1021,1021,1021,1021,1021,1021,1021,1021,1021,1021,1021,1021,1021,1021,1021, +1021,1021,1021,1021,1021,1021,1021,1021,1021,1021,1021,1021,1021,1021,1021,1021, +1021,1021,1021,1021,1021,1021,1021,1021,1021,1021,1021,1021,1021,1021,1021,1021, /* block 151 */ -110,110,110,110,110,110,120,110,110,110,110,110,110,110,110,110, -110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, -110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, -110,120,110,110,110,110,110,110,110,110,110,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, +1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,163,163, +1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,163,163,163,163,163,163, +1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024, +1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024, +1024,1024,1024,1024,163,163,163,163,1025,1025,1025,1025,1025,1025,1025,1025, +1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, +1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,163,163,163,163, /* block 152 */ -721,721,721,721,721,721,120,120,721,120,721,721,721,721,721,721, -721,721,721,721,721,721,721,721,721,721,721,721,721,721,721,721, -721,721,721,721,721,721,721,721,721,721,721,721,721,721,721,721, -721,721,721,721,721,721,120,721,721,120,120,120,721,120,120,721, -722,722,722,722,722,722,722,722,722,722,722,722,722,722,722,722, -722,722,722,722,722,722,120,723,724,724,724,724,724,724,724,724, -725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725, -725,725,725,725,725,725,725,726,726,727,727,727,727,727,727,727, +1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026, +1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026,1026, +1026,1026,1026,1026,1026,1026,1026,1026,163,163,163,163,163,163,163,163, +1027,1027,1027,1027,1027,1027,1027,1027,1027,1027,1027,1027,1027,1027,1027,1027, +1027,1027,1027,1027,1027,1027,1027,1027,1027,1027,1027,1027,1027,1027,1027,1027, +1027,1027,1027,1027,1027,1027,1027,1027,1027,1027,1027,1027,1027,1027,1027,1027, +1027,1027,1027,1027,163,163,163,163,163,163,163,163,163,163,163,1028, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,163,1029,1029,1029,1029, /* block 153 */ -728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,728, -728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,120, -120,120,120,120,120,120,120,729,729,729,729,729,729,729,729,729, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,730, -730,730,730,120,730,730,120,120,120,120,120,731,731,731,731,731, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,163,1029,1029,1029,1029, +1029,1029,1029,163,1029,1029,163,1030,1030,1030,1030,1030,1030,1030,1030,1030, +1030,1030,163,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030, +1030,1030,163,1030,1030,1030,1030,1030,1030,1030,163,1030,1030,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, /* block 154 */ -732,732,732,732,732,732,732,732,732,732,732,732,732,732,732,732, -732,732,732,732,732,732,733,733,733,733,733,733,120,120,120,734, -735,735,735,735,735,735,735,735,735,735,735,735,735,735,735,735, -735,735,735,735,735,735,735,735,735,735,120,120,120,120,120,736, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, /* block 155 */ -737,737,737,737,737,737,737,737,737,737,737,737,737,737,737,737, -737,737,737,737,737,737,737,737,737,737,737,737,737,737,737,737, -738,738,738,738,738,738,738,738,738,738,738,738,738,738,738,738, -738,738,738,738,738,738,738,738,120,120,120,120,739,739,738,738, -739,739,739,739,739,739,739,739,739,739,739,739,739,739,739,739, -120,120,739,739,739,739,739,739,739,739,739,739,739,739,739,739, -739,739,739,739,739,739,739,739,739,739,739,739,739,739,739,739, -739,739,739,739,739,739,739,739,739,739,739,739,739,739,739,739, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,163,163,163,163,163,163,163,163,163, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,163,163,163,163,163,163,163,163,163,163, +1031,1031,1031,1031,1031,1031,1031,1031,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, /* block 156 */ -740,741,741,741,120,741,741,120,120,120,120,120,741,741,741,741, -740,740,740,740,120,740,740,740,120,740,740,740,740,740,740,740, -740,740,740,740,740,740,740,740,740,740,740,740,740,740,740,740, -740,740,740,740,740,740,120,120,741,741,741,120,120,120,120,741, -742,742,742,742,742,742,742,742,742,120,120,120,120,120,120,120, -743,743,743,743,743,743,743,743,743,120,120,120,120,120,120,120, -744,744,744,744,744,744,744,744,744,744,744,744,744,744,744,744, -744,744,744,744,744,744,744,744,744,744,744,744,744,745,745,746, +147,1032,1032,147,147,147,163,147,147,147,147,147,147,147,147,147, +147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147, +147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147, +147,163,147,147,147,147,147,147,147,147,147,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, /* block 157 */ -747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747, -747,747,747,747,747,747,747,747,747,747,747,747,747,748,748,748, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -749,749,749,749,749,749,749,749,750,749,749,749,749,749,749,749, -749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749, -749,749,749,749,749,751,751,120,120,120,120,752,752,752,752,752, -753,753,754,753,753,753,753,120,120,120,120,120,120,120,120,120, +1033,1033,1033,1033,1033,1033,262,262,1033,262,1033,1033,1033,1033,1033,1033, +1033,1033,1033,1033,1033,1033,1033,1033,1033,1033,1033,1033,1033,1033,1033,1033, +1033,1033,1033,1033,1033,1033,1033,1033,1033,1033,1033,1033,1033,1033,1033,1033, +1033,1033,1033,1033,1033,1033,262,1033,1033,262,262,262,1033,262,262,1033, +1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034,1034, +1034,1034,1034,1034,1034,1034,262,1035,1036,1036,1036,1036,1036,1036,1036,1036, +1037,1037,1037,1037,1037,1037,1037,1037,1037,1037,1037,1037,1037,1037,1037,1037, +1037,1037,1037,1037,1037,1037,1037,1038,1038,1039,1039,1039,1039,1039,1039,1039, /* block 158 */ -755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,755, -755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,755, -755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,755, -755,755,755,755,755,755,120,120,120,756,756,756,756,756,756,756, -757,757,757,757,757,757,757,757,757,757,757,757,757,757,757,757, -757,757,757,757,757,757,120,120,758,758,758,758,758,758,758,758, -759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, -759,759,759,120,120,120,120,120,760,760,760,760,760,760,760,760, +1040,1040,1040,1040,1040,1040,1040,1040,1040,1040,1040,1040,1040,1040,1040,1040, +1040,1040,1040,1040,1040,1040,1040,1040,1040,1040,1040,1040,1040,1040,1040,262, +262,262,262,262,262,262,262,1041,1041,1041,1041,1041,1041,1041,1041,1041, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042, +1042,1042,1042,262,1042,1042,262,262,262,262,262,1043,1043,1043,1043,1043, /* block 159 */ -761,761,761,761,761,761,761,761,761,761,761,761,761,761,761,761, -761,761,120,120,120,120,120,120,120,762,762,762,762,120,120,120, -120,120,120,120,120,120,120,120,120,763,763,763,763,763,763,763, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +1044,1044,1044,1044,1044,1044,1044,1044,1044,1044,1044,1044,1044,1044,1044,1044, +1044,1044,1044,1044,1044,1044,1045,1045,1045,1045,1045,1045,262,262,262,1046, +1047,1047,1047,1047,1047,1047,1047,1047,1047,1047,1047,1047,1047,1047,1047,1047, +1047,1047,1047,1047,1047,1047,1047,1047,1047,1047,262,262,262,262,262,1048, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, /* block 160 */ -764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,764, -764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,764, -764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,764, -764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,764, -764,764,764,764,764,764,764,764,764,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +1049,1049,1049,1049,1049,1049,1049,1049,1049,1049,1049,1049,1049,1049,1049,1049, +1049,1049,1049,1049,1049,1049,1049,1049,1049,1049,1049,1049,1049,1049,1049,1049, +1050,1050,1050,1050,1050,1050,1050,1050,1050,1050,1050,1050,1050,1050,1050,1050, +1050,1050,1050,1050,1050,1050,1050,1050,262,262,262,262,1051,1051,1050,1050, +1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051, +262,262,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051, +1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051, +1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051,1051, /* block 161 */ -765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765, -765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765, -765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765, -765,765,765,120,120,120,120,120,120,120,120,120,120,120,120,120, -766,766,766,766,766,766,766,766,766,766,766,766,766,766,766,766, -766,766,766,766,766,766,766,766,766,766,766,766,766,766,766,766, -766,766,766,766,766,766,766,766,766,766,766,766,766,766,766,766, -766,766,766,120,120,120,120,120,120,120,767,767,767,767,767,767, +1052,1053,1053,1053,262,1053,1053,262,262,262,262,262,1053,1053,1053,1053, +1052,1052,1052,1052,262,1052,1052,1052,262,1052,1052,1052,1052,1052,1052,1052, +1052,1052,1052,1052,1052,1052,1052,1052,1052,1052,1052,1052,1052,1052,1052,1052, +1052,1052,1052,1052,1052,1052,262,262,1054,1054,1054,262,262,262,262,1055, +1056,1056,1056,1056,1056,1056,1056,1056,1056,262,262,262,262,262,262,262, +1057,1057,1057,1057,1057,1057,1058,1058,1057,262,262,262,262,262,262,262, +1059,1059,1059,1059,1059,1059,1059,1059,1059,1059,1059,1059,1059,1059,1059,1059, +1059,1059,1059,1059,1059,1059,1059,1059,1059,1059,1059,1059,1059,1060,1060,1061, /* block 162 */ -768,768,768,768,768,768,768,768,768,768,768,768,768,768,768,768, -768,768,768,768,768,768,768,768,768,768,768,768,768,768,768,768, -768,768,768,768,769,769,769,769,120,120,120,120,120,120,120,120, -770,770,770,770,770,770,770,770,770,770,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +1062,1062,1062,1062,1062,1062,1062,1062,1062,1062,1062,1062,1062,1062,1062,1062, +1062,1062,1062,1062,1062,1062,1062,1062,1062,1062,1062,1062,1062,1063,1063,1063, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +1064,1064,1064,1064,1064,1064,1064,1064,1065,1064,1064,1064,1064,1064,1064,1064, +1064,1064,1064,1064,1064,1064,1064,1064,1064,1064,1064,1064,1064,1064,1064,1064, +1064,1064,1064,1064,1064,1066,1066,262,262,262,262,1067,1067,1067,1067,1067, +1068,1068,1069,1068,1068,1068,1070,262,262,262,262,262,262,262,262,262, /* block 163 */ -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771, -771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,120, +1071,1071,1071,1071,1071,1071,1071,1071,1071,1071,1071,1071,1071,1071,1071,1071, +1071,1071,1071,1071,1071,1071,1071,1071,1071,1071,1071,1071,1071,1071,1071,1071, +1071,1071,1071,1071,1071,1071,1071,1071,1071,1071,1071,1071,1071,1071,1071,1071, +1071,1071,1071,1071,1071,1071,262,262,262,1072,1073,1073,1073,1073,1073,1073, +1074,1074,1074,1074,1074,1074,1074,1074,1074,1074,1074,1074,1074,1074,1074,1074, +1074,1074,1074,1074,1074,1074,262,262,1075,1075,1075,1075,1075,1075,1075,1075, +1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076, +1076,1076,1076,262,262,262,262,262,1077,1077,1077,1077,1077,1077,1077,1077, /* block 164 */ -772,772,772,772,772,772,772,772,772,772,772,772,772,772,772,772, -772,772,772,772,772,772,772,772,772,772,772,772,772,772,772,772, -772,772,772,772,772,772,772,772,772,772,120,773,773,774,120,120, -772,772,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +1078,1078,1078,1078,1078,1078,1078,1078,1078,1078,1078,1078,1078,1078,1078,1078, +1078,1078,262,262,262,262,262,262,262,1079,1079,1079,1079,262,262,262, +262,262,262,262,262,262,262,262,262,1080,1080,1080,1080,1080,1080,1080, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, /* block 165 */ -775,775,775,775,775,775,775,775,775,775,775,775,775,775,775,775, -775,775,775,775,775,775,775,775,775,775,775,775,775,776,776,776, -776,776,776,776,776,776,776,775,120,120,120,120,120,120,120,120, -777,777,777,777,777,777,777,777,777,777,777,777,777,777,777,777, -777,777,777,777,777,777,778,778,778,778,778,778,778,778,778,778, -778,779,779,779,779,780,780,780,780,780,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, +1081,1081,1081,1081,1081,1081,1081,1081,1081,1081,1081,1081,1081,1081,1081,1081, +1081,1081,1081,1081,1081,1081,1081,1081,1081,1081,1081,1081,1081,1081,1081,1081, +1081,1081,1081,1081,1081,1081,1081,1081,1081,1081,1081,1081,1081,1081,1081,1081, +1081,1081,1081,1081,1081,1081,1081,1081,1081,1081,1081,1081,1081,1081,1081,1081, +1081,1081,1081,1081,1081,1081,1081,1081,1081,262,262,262,262,262,262,262, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, /* block 166 */ -781,781,782,782,782,782,783,783,783,783,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -784,784,784,784,784,784,784,784,784,784,784,784,784,784,784,784, -784,784,784,784,784,785,785,785,785,785,785,785,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -786,786,786,786,786,786,786,786,786,786,786,786,786,786,786,786, -786,786,786,786,786,786,786,120,120,120,120,120,120,120,120,120, +1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082, +1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082, +1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082, +1082,1082,1082,262,262,262,262,262,262,262,262,262,262,262,262,262, +1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083, +1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083, +1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083, +1083,1083,1083,262,262,262,262,262,262,262,1084,1084,1084,1084,1084,1084, /* block 167 */ -787,788,787,789,789,789,789,789,789,789,789,789,789,789,789,789, -789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, -789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, -789,789,789,789,789,789,789,789,788,788,788,788,788,788,788,788, -788,788,788,788,788,788,788,790,790,790,790,790,790,790,120,120, -120,120,791,791,791,791,791,791,791,791,791,791,791,791,791,791, -791,791,791,791,791,791,792,792,792,792,792,792,792,792,792,792, -788,789,789,788,788,789,120,120,120,120,120,120,120,120,120,788, +1085,1085,1085,1085,1085,1085,1085,1085,1085,1085,1085,1085,1085,1085,1085,1085, +1085,1085,1085,1085,1085,1085,1085,1085,1085,1085,1085,1085,1085,1085,1085,1085, +1085,1085,1086,1086,1087,1087,1087,1087,302,302,302,302,302,302,302,302, +1088,1088,1088,1088,1088,1088,1088,1088,1088,1088,302,302,302,302,302,302, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, /* block 168 */ -793,793,794,795,795,795,795,795,795,795,795,795,795,795,795,795, -795,795,795,795,795,795,795,795,795,795,795,795,795,795,795,795, -795,795,795,795,795,795,795,795,795,795,795,795,795,795,795,795, -794,794,794,793,793,793,793,794,794,793,793,796,796,797,796,796, -796,796,793,120,120,120,120,120,120,120,120,120,120,797,120,120, -798,798,798,798,798,798,798,798,798,798,798,798,798,798,798,798, -798,798,798,798,798,798,798,798,798,120,120,120,120,120,120,120, -799,799,799,799,799,799,799,799,799,799,120,120,120,120,120,120, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, /* block 169 */ -800,800,800,801,801,801,801,801,801,801,801,801,801,801,801,801, -801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801, -801,801,801,801,801,801,801,800,800,800,800,800,802,800,800,800, -800,800,800,800,800,120,803,803,803,803,803,803,803,803,803,803, -804,804,804,804,801,802,802,801,120,120,120,120,120,120,120,120, -805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805, -805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805, -805,805,805,806,807,807,805,120,120,120,120,120,120,120,120,120, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089, +1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,262, /* block 170 */ -808,808,809,810,810,810,810,810,810,810,810,810,810,810,810,810, -810,810,810,810,810,810,810,810,810,810,810,810,810,810,810,810, -810,810,810,810,810,810,810,810,810,810,810,810,810,810,810,810, -810,810,810,809,809,809,808,808,808,808,808,808,808,808,808,809, -809,810,811,811,810,812,812,812,812,808,808,808,808,812,809,808, -813,813,813,813,813,813,813,813,813,813,810,812,810,812,812,812, -120,814,814,814,814,814,814,814,814,814,814,814,814,814,814,814, -814,814,814,814,814,120,120,120,120,120,120,120,120,120,120,120, +1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090, +1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090, +1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,262,1091,1091,1092,262,262, +1090,1090,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, /* block 171 */ -815,815,815,815,815,815,815,815,815,815,815,815,815,815,815,815, -815,815,120,815,815,815,815,815,815,815,815,815,815,815,815,815, -815,815,815,815,815,815,815,815,815,815,815,815,816,816,816,817, -817,817,816,816,817,816,817,817,818,818,818,818,818,818,817,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093, +1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1093,1094,1094,1094, +1094,1094,1094,1094,1094,1094,1094,1093,262,262,262,262,262,262,262,262, +1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095, +1095,1095,1095,1095,1095,1095,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096, +1096,1097,1097,1097,1097,1098,1098,1098,1098,1098,302,302,302,302,302,302, +302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,302, +1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099, /* block 172 */ -819,819,819,819,819,819,819,120,819,120,819,819,819,819,120,819, -819,819,819,819,819,819,819,819,819,819,819,819,819,819,120,819, -819,819,819,819,819,819,819,819,819,820,120,120,120,120,120,120, -821,821,821,821,821,821,821,821,821,821,821,821,821,821,821,821, -821,821,821,821,821,821,821,821,821,821,821,821,821,821,821,821, -821,821,821,821,821,821,821,821,821,821,821,821,821,821,821,822, -823,823,823,822,822,822,822,822,822,822,822,120,120,120,120,120, -824,824,824,824,824,824,824,824,824,824,120,120,120,120,120,120, +1099,1099,1100,1100,1100,1100,1101,1101,1101,1101,262,262,262,262,262,262, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102, +1102,1102,1102,1102,1102,1103,1103,1103,1103,1103,1103,1103,262,262,262,262, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104, +1104,1104,1104,1104,1104,1104,1104,262,262,262,262,262,262,262,262,262, /* block 173 */ -825,826,827,828,120,829,829,829,829,829,829,829,829,120,120,829, -829,120,120,829,829,829,829,829,829,829,829,829,829,829,829,829, -829,829,829,829,829,829,829,829,829,120,829,829,829,829,829,829, -829,120,829,829,120,829,829,829,829,829,120,830,826,829,831,827, -825,827,827,827,827,120,120,827,827,120,120,827,827,827,120,120, -829,120,120,120,120,120,120,831,120,120,120,120,120,829,829,829, -829,829,827,827,120,120,825,825,825,825,825,825,825,120,120,120, -825,825,825,825,825,120,120,120,120,120,120,120,120,120,120,120, +1105,1106,1105,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107, +1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107, +1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107, +1107,1107,1107,1107,1107,1107,1107,1107,1106,1106,1106,1106,1106,1106,1106,1106, +1106,1106,1106,1106,1106,1106,1108,1109,1109,1110,1110,1110,1110,1110,163,163, +163,163,1111,1111,1111,1111,1111,1111,1111,1111,1111,1111,1111,1111,1111,1111, +1111,1111,1111,1111,1111,1111,1112,1112,1112,1112,1112,1112,1112,1112,1112,1112, +1108,1107,1107,1106,1106,1107,163,163,163,163,163,163,163,163,163,1113, /* block 174 */ -832,832,832,832,832,832,832,832,832,832,832,832,832,832,832,832, -832,832,832,832,832,832,832,832,832,832,832,832,832,832,832,832, -832,832,832,832,832,832,832,832,832,832,832,832,832,832,832,832, -832,832,832,832,832,833,833,833,834,834,834,834,834,834,834,834, -833,833,834,834,834,833,834,832,832,832,832,835,835,835,835,835, -836,836,836,836,836,836,836,836,836,836,835,835,120,835,834,832, -832,832,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +1114,1114,1115,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116, +1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116, +1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116, +1115,1115,1115,1117,1117,1117,1117,1115,1115,1118,1119,1120,1120,1121,1122,1122, +1122,1122,1117,163,163,163,163,163,163,163,163,163,163,1121,163,163, +1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123, +1123,1123,1123,1123,1123,1123,1123,1123,1123,163,163,163,163,163,163,163, +1124,1124,1124,1124,1124,1124,1124,1124,1124,1124,163,163,163,163,163,163, /* block 175 */ -837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,837, -837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,837, -837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,837, -838,839,839,840,840,840,840,840,840,839,840,839,839,838,839,840, -840,839,840,840,837,837,841,837,120,120,120,120,120,120,120,120, -842,842,842,842,842,842,842,842,842,842,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +1125,1125,1125,1126,1126,1126,1126,1126,1126,1126,1126,1126,1126,1126,1126,1126, +1126,1126,1126,1126,1126,1126,1126,1126,1126,1126,1126,1126,1126,1126,1126,1126, +1126,1126,1126,1126,1126,1126,1126,1125,1125,1125,1125,1125,1127,1125,1125,1125, +1125,1125,1125,1128,1128,163,1129,1129,1129,1129,1129,1129,1129,1129,1129,1129, +1130,1131,1131,1131,1126,1127,1127,1126,163,163,163,163,163,163,163,163, +1132,1132,1132,1132,1132,1132,1132,1132,1132,1132,1132,1132,1132,1132,1132,1132, +1132,1132,1132,1132,1132,1132,1132,1132,1132,1132,1132,1132,1132,1132,1132,1132, +1132,1132,1132,1133,1134,1134,1132,163,163,163,163,163,163,163,163,163, /* block 176 */ -843,843,843,843,843,843,843,843,843,843,843,843,843,843,843,843, -843,843,843,843,843,843,843,843,843,843,843,843,843,843,843,843, -843,843,843,843,843,843,843,843,843,843,843,843,843,843,843,844, -845,845,846,846,846,846,120,120,845,845,845,845,846,846,845,846, -846,847,847,847,847,847,847,847,847,847,847,847,847,847,847,847, -847,847,847,847,847,847,847,847,843,843,843,843,846,846,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +1135,1135,1136,1137,1137,1137,1137,1137,1137,1137,1137,1137,1137,1137,1137,1137, +1137,1137,1137,1137,1137,1137,1137,1137,1137,1137,1137,1137,1137,1137,1137,1137, +1137,1137,1137,1137,1137,1137,1137,1137,1137,1137,1137,1137,1137,1137,1137,1137, +1137,1137,1137,1136,1136,1136,1135,1135,1135,1135,1135,1135,1135,1135,1135,1136, +1138,1137,1139,1139,1137,1140,1140,1141,1141,1142,1143,1143,1143,1140,1136,1135, +1144,1144,1144,1144,1144,1144,1144,1144,1144,1144,1137,1141,1137,1141,1140,1140, +163,1145,1145,1145,1145,1145,1145,1145,1145,1145,1145,1145,1145,1145,1145,1145, +1145,1145,1145,1145,1145,163,163,163,163,163,163,163,163,163,163,163, /* block 177 */ -848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,848, -848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,848, -848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,848, -849,849,849,850,850,850,850,850,850,850,850,849,849,850,849,850, -850,851,851,851,848,120,120,120,120,120,120,120,120,120,120,120, -852,852,852,852,852,852,852,852,852,852,120,120,120,120,120,120, -398,398,398,398,398,398,398,398,398,398,398,398,398,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146, +1146,1146,163,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146, +1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1147,1147,1147,1148, +1148,1148,1147,1147,1148,1149,1150,1148,1151,1151,1152,1151,1151,1153,1148,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, /* block 178 */ -853,853,853,853,853,853,853,853,853,853,853,853,853,853,853,853, -853,853,853,853,853,853,853,853,853,853,853,853,853,853,853,853, -853,853,853,853,853,853,853,853,853,853,853,854,855,854,855,855, -854,854,854,854,854,854,855,854,853,856,120,120,120,120,120,120, -857,857,857,857,857,857,857,857,857,857,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +1154,1154,1154,1154,1154,1154,1154,163,1154,163,1154,1154,1154,1154,163,1154, +1154,1154,1154,1154,1154,1154,1154,1154,1154,1154,1154,1154,1154,1154,163,1154, +1154,1154,1154,1154,1154,1154,1154,1154,1154,1155,163,163,163,163,163,163, +1156,1156,1156,1156,1156,1156,1156,1156,1156,1156,1156,1156,1156,1156,1156,1156, +1156,1156,1156,1156,1156,1156,1156,1156,1156,1156,1156,1156,1156,1156,1156,1156, +1156,1156,1156,1156,1156,1156,1156,1156,1156,1156,1156,1156,1156,1156,1156,1157, +1158,1158,1158,1157,1157,1157,1157,1157,1157,1159,1160,163,163,163,163,163, +1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,163,163,163,163,163,163, /* block 179 */ -858,858,858,858,858,858,858,858,858,858,858,858,858,858,858,858, -858,858,858,858,858,858,858,858,858,858,858,120,120,859,859,859, -860,860,859,859,859,859,861,859,859,859,859,859,120,120,120,120, -862,862,862,862,862,862,862,862,862,862,863,863,864,864,864,865, -858,858,858,858,858,858,858,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +1162,1163,1164,1165,163,1166,1166,1166,1166,1166,1166,1166,1166,163,163,1166, +1166,163,163,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166, +1166,1166,1166,1166,1166,1166,1166,1166,1166,163,1166,1166,1166,1166,1166,1166, +1166,163,1166,1166,163,1166,1166,1166,1166,1166,163,1167,1168,1166,1169,1164, +1162,1164,1164,1164,1164,163,163,1164,1164,163,163,1164,1164,1170,163,163, +1166,163,163,163,163,163,163,1169,163,163,163,163,163,1171,1166,1166, +1166,1166,1164,1164,163,163,1172,1172,1172,1172,1172,1172,1172,163,163,163, +1172,1172,1172,1172,1172,163,163,163,163,163,163,163,163,163,163,163, /* block 180 */ -866,866,866,866,866,866,866,866,866,866,866,866,866,866,866,866, -866,866,866,866,866,866,866,866,866,866,866,866,866,866,866,866, -866,866,866,866,866,866,866,866,866,866,866,866,867,867,867,868, -868,868,868,868,868,868,868,868,867,868,868,869,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +1173,1173,1173,1173,1173,1173,1173,1173,1173,1173,1173,1173,1173,1173,1173,1173, +1173,1173,1173,1173,1173,1173,1173,1173,1173,1173,1173,1173,1173,1173,1173,1173, +1173,1173,1173,1173,1173,1173,1173,1173,1173,1173,1173,1173,1173,1173,1173,1173, +1173,1173,1173,1173,1173,1174,1174,1174,1175,1175,1175,1175,1175,1175,1175,1175, +1174,1174,1176,1175,1175,1174,1177,1173,1173,1173,1173,1178,1178,1179,1180,1180, +1181,1181,1181,1181,1181,1181,1181,1181,1181,1181,1179,1179,163,1180,1182,1173, +1173,1173,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, /* block 181 */ -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870, -870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870, -871,871,871,871,871,871,871,871,871,871,871,871,871,871,871,871, -871,871,871,871,871,871,871,871,871,871,871,871,871,871,871,871, -872,872,872,872,872,872,872,872,872,872,873,873,873,873,873,873, -873,873,873,120,120,120,120,120,120,120,120,120,120,120,120,874, +1183,1183,1183,1183,1183,1183,1183,1183,1183,1183,1183,1183,1183,1183,1183,1183, +1183,1183,1183,1183,1183,1183,1183,1183,1183,1183,1183,1183,1183,1183,1183,1183, +1183,1183,1183,1183,1183,1183,1183,1183,1183,1183,1183,1183,1183,1183,1183,1183, +1184,1185,1185,1186,1186,1186,1186,1186,1186,1185,1186,1185,1185,1184,1185,1186, +1186,1185,1187,1188,1183,1183,1189,1183,163,163,163,163,163,163,163,163, +1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, /* block 182 */ -875,875,875,875,875,875,875,120,120,875,120,120,875,875,875,875, -875,875,875,875,120,875,875,120,875,875,875,875,875,875,875,875, -875,875,875,875,875,875,875,875,875,875,875,875,875,875,875,875, -876,877,877,877,877,877,120,877,877,120,120,878,878,877,878,879, -877,879,877,878,880,880,880,120,120,120,120,120,120,120,120,120, -881,881,881,881,881,881,881,881,881,881,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +1191,1191,1191,1191,1191,1191,1191,1191,1191,1191,1191,1191,1191,1191,1191,1191, +1191,1191,1191,1191,1191,1191,1191,1191,1191,1191,1191,1191,1191,1191,1191,1191, +1191,1191,1191,1191,1191,1191,1191,1191,1191,1191,1191,1191,1191,1191,1191,1192, +1193,1193,1194,1194,1194,1194,163,163,1193,1193,1193,1193,1194,1194,1193,1195, +1196,1197,1198,1198,1199,1199,1200,1200,1200,1198,1198,1198,1198,1198,1198,1198, +1198,1198,1198,1198,1198,1198,1198,1198,1191,1191,1191,1191,1194,1194,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, /* block 183 */ -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -882,882,882,882,882,882,882,882,120,120,882,882,882,882,882,882, -882,882,882,882,882,882,882,882,882,882,882,882,882,882,882,882, -882,882,882,882,882,882,882,882,882,882,882,882,882,882,882,882, -882,883,883,883,884,884,884,884,120,120,884,884,883,883,883,883, -884,882,885,882,883,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,1201, +1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,1201, +1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,1201, +1202,1202,1202,1203,1203,1203,1203,1203,1203,1203,1203,1202,1202,1203,1202,1204, +1203,1205,1205,1206,1201,163,163,163,163,163,163,163,163,163,163,163, +1207,1207,1207,1207,1207,1207,1207,1207,1207,1207,163,163,163,163,163,163, +530,530,530,530,530,530,530,530,530,530,530,530,530,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, /* block 184 */ -886,887,887,887,887,887,887,887,887,887,887,886,886,886,886,886, -886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886, -886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886, -886,886,886,887,887,887,887,887,887,888,889,887,887,887,887,890, -890,890,890,890,890,890,890,887,120,120,120,120,120,120,120,120, -891,892,892,892,892,892,892,893,893,892,892,892,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, +1208,1208,1208,1208,1208,1208,1208,1208,1208,1208,1208,1208,1208,1208,1208,1208, +1208,1208,1208,1208,1208,1208,1208,1208,1208,1208,1208,1208,1208,1208,1208,1208, +1208,1208,1208,1208,1208,1208,1208,1208,1208,1208,1208,1209,1210,1209,1210,1210, +1209,1209,1209,1209,1209,1209,1211,1212,1208,1213,163,163,163,163,163,163, +1214,1214,1214,1214,1214,1214,1214,1214,1214,1214,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, /* block 185 */ -891,891,891,891,894,894,894,894,894,894,892,892,892,892,892,892, -892,892,892,892,892,892,892,893,892,892,895,895,895,891,895,895, -895,895,895,120,120,120,120,120,120,120,120,120,120,120,120,120, -370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370, -896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896, -896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896, -896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896, -896,896,896,896,896,896,896,896,896,120,120,120,120,120,120,120, +1215,1215,1215,1215,1215,1215,1215,1215,1215,1215,1215,1215,1215,1215,1215,1215, +1215,1215,1215,1215,1215,1215,1215,1215,1215,1215,1215,163,163,1216,1216,1216, +1217,1217,1216,1216,1216,1216,1218,1216,1216,1216,1216,1219,163,163,163,163, +1220,1220,1220,1220,1220,1220,1220,1220,1220,1220,1221,1221,1222,1222,1222,1223, +1215,1215,1215,1215,1215,1215,1215,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, /* block 186 */ -897,897,897,897,897,897,897,897,897,120,897,897,897,897,897,897, -897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897, -897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,898, -899,899,899,899,899,899,899,120,899,899,899,899,899,899,898,899, -897,900,900,900,900,900,120,120,120,120,120,120,120,120,120,120, -901,901,901,901,901,901,901,901,901,901,902,902,902,902,902,902, -902,902,902,902,902,902,902,902,902,902,902,902,902,120,120,120, -903,903,904,904,904,904,904,904,904,904,904,904,904,904,904,904, +1224,1224,1224,1224,1224,1224,1224,1224,1224,1224,1224,1224,1224,1224,1224,1224, +1224,1224,1224,1224,1224,1224,1224,1224,1224,1224,1224,1224,1224,1224,1224,1224, +1224,1224,1224,1224,1224,1224,1224,1224,1224,1224,1224,1224,1225,1225,1225,1226, +1226,1226,1226,1226,1226,1226,1226,1226,1225,1227,1228,1229,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, /* block 187 */ -904,904,904,904,904,904,904,904,904,904,904,904,904,904,904,904, -120,120,905,905,905,905,905,905,905,905,905,905,905,905,905,905, -905,905,905,905,905,905,905,905,120,906,905,905,905,905,905,905, -905,906,905,905,906,905,905,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +1230,1230,1230,1230,1230,1230,1230,1230,1230,1230,1230,1230,1230,1230,1230,1230, +1230,1230,1230,1230,1230,1230,1230,1230,1230,1230,1230,1230,1230,1230,1230,1230, +1231,1231,1231,1231,1231,1231,1231,1231,1231,1231,1231,1231,1231,1231,1231,1231, +1231,1231,1231,1231,1231,1231,1231,1231,1231,1231,1231,1231,1231,1231,1231,1231, +1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,1233,1233,1233,1233,1233,1233, +1233,1233,1233,163,163,163,163,163,163,163,163,163,163,163,163,1234, /* block 188 */ -907,907,907,907,907,907,907,120,907,907,120,907,907,907,907,907, -907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907, -907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907, -907,908,908,908,908,908,908,120,120,120,908,120,908,908,120,908, -908,908,908,908,908,908,909,908,120,120,120,120,120,120,120,120, -910,910,910,910,910,910,910,910,910,910,120,120,120,120,120,120, -911,911,911,911,911,911,120,911,911,120,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, +1235,1235,1235,1235,1235,1235,1235,163,163,1235,163,163,1235,1235,1235,1235, +1235,1235,1235,1235,163,1235,1235,163,1235,1235,1235,1235,1235,1235,1235,1235, +1235,1235,1235,1235,1235,1235,1235,1235,1235,1235,1235,1235,1235,1235,1235,1235, +1236,1237,1237,1237,1237,1237,163,1237,1237,163,163,1238,1238,1239,1240,1241, +1237,1241,1237,1242,1243,1244,1243,163,163,163,163,163,163,163,163,163, +1245,1245,1245,1245,1245,1245,1245,1245,1245,1245,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, /* block 189 */ -911,911,911,911,911,911,911,911,911,911,912,912,912,912,912,120, -913,913,120,912,912,913,912,913,911,120,120,120,120,120,120,120, -914,914,914,914,914,914,914,914,914,914,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +1246,1246,1246,1246,1246,1246,1246,1246,163,163,1246,1246,1246,1246,1246,1246, +1246,1246,1246,1246,1246,1246,1246,1246,1246,1246,1246,1246,1246,1246,1246,1246, +1246,1246,1246,1246,1246,1246,1246,1246,1246,1246,1246,1246,1246,1246,1246,1246, +1246,1247,1247,1247,1248,1248,1248,1248,163,163,1248,1248,1247,1247,1247,1247, +1249,1246,1250,1246,1247,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, /* block 190 */ -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, -915,915,915,916,916,917,917,918,918,120,120,120,120,120,120,120, +1251,1252,1252,1252,1252,1252,1252,1253,1253,1252,1252,1251,1251,1251,1251,1251, +1251,1251,1251,1251,1251,1251,1251,1251,1251,1251,1251,1251,1251,1251,1251,1251, +1251,1251,1251,1251,1251,1251,1251,1251,1251,1251,1251,1251,1251,1251,1251,1251, +1251,1251,1251,1254,1255,1252,1252,1252,1252,1256,1257,1252,1252,1252,1252,1258, +1258,1258,1259,1259,1258,1258,1258,1255,163,163,163,163,163,163,163,163, +1260,1261,1261,1261,1261,1261,1261,1262,1262,1261,1261,1261,1260,1260,1260,1260, +1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260, +1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260, /* block 191 */ -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -595,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919, -295,295,919,295,919,297,297,297,297,297,297,297,297,298,298,298, -298,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, -297,297,120,120,120,120,120,120,120,120,120,120,120,120,120,920, +1260,1260,1260,1260,1263,1263,1263,1263,1263,1263,1261,1261,1261,1261,1261,1261, +1261,1261,1261,1261,1261,1261,1261,1262,1264,1265,1266,1267,1267,1260,1266,1266, +1266,1268,1268,163,163,163,163,163,163,163,163,163,163,163,163,163, +495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495, +1269,1269,1269,1269,1269,1269,1269,1269,1269,1269,1269,1269,1269,1269,1269,1269, +1269,1269,1269,1269,1269,1269,1269,1269,1269,1269,1269,1269,1269,1269,1269,1269, +1269,1269,1269,1269,1269,1269,1269,1269,1269,1269,1269,1269,1269,1269,1269,1269, +1269,1269,1269,1269,1269,1269,1269,1269,1269,163,163,163,163,163,163,163, /* block 192 */ -921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921, -921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921, -921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921, -921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921, -921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921, -921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921, -921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921, -921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921, +1270,1270,1270,1270,1270,1270,1270,1270,1270,163,1270,1270,1270,1270,1270,1270, +1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270, +1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1271, +1272,1272,1272,1272,1272,1272,1272,163,1272,1272,1272,1272,1272,1272,1271,1273, +1270,1274,1274,1275,1276,1276,163,163,163,163,163,163,163,163,163,163, +1277,1277,1277,1277,1277,1277,1277,1277,1277,1277,1278,1278,1278,1278,1278,1278, +1278,1278,1278,1278,1278,1278,1278,1278,1278,1278,1278,1278,1278,163,163,163, +1279,1280,1281,1281,1281,1281,1281,1281,1281,1281,1281,1281,1281,1281,1281,1281, /* block 193 */ -921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921, -921,921,921,921,921,921,921,921,921,921,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +1281,1281,1281,1281,1281,1281,1281,1281,1281,1281,1281,1281,1281,1281,1281,1281, +163,163,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282, +1282,1282,1282,1282,1282,1282,1282,1282,163,1283,1282,1282,1282,1282,1282,1282, +1282,1283,1282,1282,1283,1282,1282,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, /* block 194 */ -922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, -922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, -922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, -922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, -922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, -922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, -922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,120, -923,923,923,923,923,120,120,120,120,120,120,120,120,120,120,120, +1284,1284,1284,1284,1284,1284,1284,163,1284,1284,163,1284,1284,1284,1284,1284, +1284,1284,1284,1284,1284,1284,1284,1284,1284,1284,1284,1284,1284,1284,1284,1284, +1284,1284,1284,1284,1284,1284,1284,1284,1284,1284,1284,1284,1284,1284,1284,1284, +1284,1285,1285,1285,1285,1285,1285,163,163,163,1285,163,1285,1285,163,1285, +1285,1285,1286,1285,1287,1287,1288,1285,163,163,163,163,163,163,163,163, +1289,1289,1289,1289,1289,1289,1289,1289,1289,1289,163,163,163,163,163,163, +1290,1290,1290,1290,1290,1290,163,1290,1290,163,1290,1290,1290,1290,1290,1290, +1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290, /* block 195 */ -921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921, -921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921, -921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921, -921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921, -921,921,921,921,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1291,1291,1291,1291,1291,163, +1292,1292,163,1291,1291,1292,1291,1293,1290,163,163,163,163,163,163,163, +1294,1294,1294,1294,1294,1294,1294,1294,1294,1294,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, /* block 196 */ -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,924, -924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,924, -924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,924, -924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,924, -924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,924, -924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,924, -924,925,925,120,120,120,120,120,120,120,120,120,120,120,120,120, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +1295,1295,1295,1295,1295,1295,1295,1295,1295,1295,1295,1295,1295,1295,1295,1295, +1295,1295,1295,1296,1296,1297,1297,1298,1298,163,163,163,163,163,163,163, /* block 197 */ -926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926, -926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926, -926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926, -926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926, -926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926, -926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926, -926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926, -926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +842,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +1299,1299,1299,1299,1299,1299,1299,1299,1299,1299,1299,1299,1299,1299,1299,1299, +388,388,1299,388,1299,390,390,390,390,390,390,390,390,391,391,391, +391,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390, +390,390,163,163,163,163,163,163,163,163,163,163,163,163,163,1300, /* block 198 */ -926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926, -926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926, -926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,120, -927,927,927,927,927,927,927,927,927,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301, +1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301, +1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301, +1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301, +1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301, +1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301, +1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301, +1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301, /* block 199 */ -928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928, -928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928, -928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928, -928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928, -928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928, -928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928, -928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928, -928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928, +1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301, +1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, /* block 200 */ -928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928, -928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928, -928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928, -928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928, -928,928,928,928,928,928,928,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302, +1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302, +1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302, +1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302, +1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302, +1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302, +1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,1302,163, +1303,1303,1303,1303,1303,163,163,163,163,163,163,163,163,163,163,163, /* block 201 */ -606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606, -606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606, -606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606, -606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606, -606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606, -606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606, -606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606, -606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606, +1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301, +1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301, +1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301, +1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301, +1301,1301,1301,1301,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, /* block 202 */ -606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606, -606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606, -606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606, -606,606,606,606,606,606,606,606,606,120,120,120,120,120,120,120, -929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,929, -929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,120, -930,930,930,930,930,930,930,930,930,930,120,120,120,120,931,931, -932,932,932,932,932,932,932,932,932,932,932,932,932,932,932,932, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +1304,1304,1304,1304,1304,1304,1304,1304,1304,1304,1304,1304,1304,1304,1304,1304, +1304,1304,1304,1304,1304,1304,1304,1304,1304,1304,1304,1304,1304,1304,1304,1304, +1304,1304,1304,1304,1304,1304,1304,1304,1304,1304,1304,1304,1304,1304,1304,1304, +1304,1304,1304,1304,1304,1304,1304,1304,1304,1304,1304,1304,1304,1304,1304,1304, +1304,1304,1304,1304,1304,1304,1304,1304,1304,1304,1304,1304,1304,1304,1304,1304, +1304,1304,1304,1304,1304,1304,1304,1304,1304,1304,1304,1304,1304,1304,1304,1304, +1304,1305,1305,163,163,163,163,163,163,163,163,163,163,163,163,163, /* block 203 */ -932,932,932,932,932,932,932,932,932,932,932,932,932,932,932,932, -932,932,932,932,932,932,932,932,932,932,932,932,932,932,932,932, -932,932,932,932,932,932,932,932,932,932,932,932,932,932,932,932, -932,932,932,932,932,932,932,932,932,932,932,932,932,932,932,120, -933,933,933,933,933,933,933,933,933,933,120,120,120,120,120,120, -934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934, -934,934,934,934,934,934,934,934,934,934,934,934,934,934,120,120, -935,935,935,935,935,936,120,120,120,120,120,120,120,120,120,120, +1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306, +1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306, +1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306, +1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306, +1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306, +1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306, +1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306, +1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306, /* block 204 */ -937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937, -937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937, -937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937, -938,938,938,938,938,938,938,939,939,939,939,939,940,940,940,940, -941,941,941,941,939,940,120,120,120,120,120,120,120,120,120,120, -942,942,942,942,942,942,942,942,942,942,120,943,943,943,943,943, -943,943,120,937,937,937,937,937,937,937,937,937,937,937,937,937, -937,937,937,937,937,937,937,937,120,120,120,120,120,937,937,937, +1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306, +1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306, +1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,163, +1307,1307,1307,1307,1307,1307,1307,1307,1307,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, /* block 205 */ -937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308, +1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308, +1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308, +1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308, +1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308, +1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308, +1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308, +1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308, /* block 206 */ -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -944,944,944,944,944,944,944,944,944,944,944,944,944,944,944,944, -944,944,944,944,944,944,944,944,944,944,944,944,944,944,944,944, -945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945, -945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945, +1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308, +1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308, +1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308, +1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308,1308, +1308,1308,1308,1308,1308,1308,1308,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, /* block 207 */ -946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946, -946,946,946,946,946,946,946,947,947,947,947,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +858,858,858,858,858,858,858,858,858,858,858,858,858,858,858,858, +858,858,858,858,858,858,858,858,858,858,858,858,858,858,858,858, +858,858,858,858,858,858,858,858,858,858,858,858,858,858,858,858, +858,858,858,858,858,858,858,858,858,858,858,858,858,858,858,858, +858,858,858,858,858,858,858,858,858,858,858,858,858,858,858,858, +858,858,858,858,858,858,858,858,858,858,858,858,858,858,858,858, +858,858,858,858,858,858,858,858,858,858,858,858,858,858,858,858, +858,858,858,858,858,858,858,858,858,858,858,858,858,858,858,858, /* block 208 */ -948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948, -948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948, -948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948, -948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948, -948,948,948,948,948,948,948,948,948,948,948,120,120,120,120,949, -948,950,950,950,950,950,950,950,950,950,950,950,950,950,950,950, -950,950,950,950,950,950,950,950,950,950,950,950,950,950,950,950, -950,950,950,950,950,950,950,950,950,950,950,950,950,950,950,950, +858,858,858,858,858,858,858,858,858,858,858,858,858,858,858,858, +858,858,858,858,858,858,858,858,858,858,858,858,858,858,858,858, +858,858,858,858,858,858,858,858,858,858,858,858,858,858,858,858, +858,858,858,858,858,858,858,858,858,163,163,163,163,163,163,163, +1309,1309,1309,1309,1309,1309,1309,1309,1309,1309,1309,1309,1309,1309,1309,1309, +1309,1309,1309,1309,1309,1309,1309,1309,1309,1309,1309,1309,1309,1309,1309,163, +1310,1310,1310,1310,1310,1310,1310,1310,1310,1310,163,163,163,163,1311,1311, +1312,1312,1312,1312,1312,1312,1312,1312,1312,1312,1312,1312,1312,1312,1312,1312, /* block 209 */ -950,950,950,950,950,950,950,950,120,120,120,120,120,120,120,949, -949,949,949,951,951,951,951,951,951,951,951,951,951,951,951,951, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -952,953,954,562,955,120,120,120,120,120,120,120,120,120,120,120, -956,956,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +1312,1312,1312,1312,1312,1312,1312,1312,1312,1312,1312,1312,1312,1312,1312,1312, +1312,1312,1312,1312,1312,1312,1312,1312,1312,1312,1312,1312,1312,1312,1312,1312, +1312,1312,1312,1312,1312,1312,1312,1312,1312,1312,1312,1312,1312,1312,1312,1312, +1312,1312,1312,1312,1312,1312,1312,1312,1312,1312,1312,1312,1312,1312,1312,163, +1313,1313,1313,1313,1313,1313,1313,1313,1313,1313,163,163,163,163,163,163, +1314,1314,1314,1314,1314,1314,1314,1314,1314,1314,1314,1314,1314,1314,1314,1314, +1314,1314,1314,1314,1314,1314,1314,1314,1314,1314,1314,1314,1314,1314,163,163, +1315,1315,1315,1315,1315,1316,163,163,163,163,163,163,163,163,163,163, /* block 210 */ -957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957, -957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957, -957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957, -957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957, -957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957, -957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957, -957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957, -957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957, +1317,1317,1317,1317,1317,1317,1317,1317,1317,1317,1317,1317,1317,1317,1317,1317, +1317,1317,1317,1317,1317,1317,1317,1317,1317,1317,1317,1317,1317,1317,1317,1317, +1317,1317,1317,1317,1317,1317,1317,1317,1317,1317,1317,1317,1317,1317,1317,1317, +1318,1318,1318,1318,1318,1318,1318,1319,1319,1320,1321,1321,1322,1322,1322,1322, +1323,1323,1324,1324,1319,1322,163,163,163,163,163,163,163,163,163,163, +1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,163,1326,1326,1326,1326,1326, +1326,1326,163,1317,1317,1317,1317,1317,1317,1317,1317,1317,1317,1317,1317,1317, +1317,1317,1317,1317,1317,1317,1317,1317,163,163,163,163,163,1317,1317,1317, /* block 211 */ -957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957, -957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957, -957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957, -957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957, -957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957, -957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957, -957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957, -957,957,957,957,957,957,957,957,120,120,120,120,120,120,120,120, +1317,1317,1317,1317,1317,1317,1317,1317,1317,1317,1317,1317,1317,1317,1317,1317, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, /* block 212 */ -958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958, -958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958, -958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958, -958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958, -958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958, -958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958, -958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958, -958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +1327,1327,1327,1327,1327,1327,1327,1327,1327,1327,1327,1327,1327,1327,1327,1327, +1327,1327,1327,1327,1327,1327,1327,1327,1327,1327,1327,1327,1327,1327,1327,1327, +1328,1328,1328,1328,1328,1328,1328,1328,1328,1328,1328,1328,1328,1328,1328,1328, +1328,1328,1328,1328,1328,1328,1328,1328,1328,1328,1328,1328,1328,1328,1328,1328, /* block 213 */ -958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958, -958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958, -958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958, -958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958, -958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958, -958,958,958,958,958,958,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329, +1329,1329,1329,1329,1329,1329,1329,1330,1331,1332,1332,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, /* block 214 */ -957,957,957,957,957,957,957,957,957,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +1333,1333,1333,1333,1333,1333,1333,1333,1333,1333,1333,1333,1333,1333,1333,1333, +1333,1333,1333,1333,1333,1333,1333,1333,1333,1333,1333,1333,1333,1333,1333,1333, +1333,1333,1333,1333,1333,1333,1333,1333,1333,1333,1333,1333,1333,1333,1333,1333, +1333,1333,1333,1333,1333,1333,1333,1333,1333,1333,1333,1333,1333,1333,1333,1333, +1333,1333,1333,1333,1333,1333,1333,1333,1333,1333,1333,163,163,163,163,1334, +1333,1335,1335,1335,1335,1335,1335,1335,1335,1335,1335,1335,1335,1335,1335,1335, +1335,1335,1335,1335,1335,1335,1335,1335,1335,1335,1335,1335,1335,1335,1335,1335, +1335,1335,1335,1335,1335,1335,1335,1335,1335,1335,1335,1335,1335,1335,1335,1335, /* block 215 */ -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -584,584,584,584,120,584,584,584,584,584,584,584,120,584,584,120, +1335,1335,1335,1335,1335,1335,1335,1335,163,163,163,163,163,163,163,1336, +1336,1336,1336,1337,1337,1337,1337,1337,1337,1337,1337,1337,1337,1337,1337,1337, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +1338,1339,1340,799,1341,163,163,163,163,163,163,163,163,163,163,163, +1342,1342,163,163,163,163,163,163,163,163,163,163,163,163,163,163, /* block 216 */ -583,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, -578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, -578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, -578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, -578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, -578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, -578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, -578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, +1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343, +1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343, +1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343, +1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343, +1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343, +1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343, +1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343, +1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343, /* block 217 */ -578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, -578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, -578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, -578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, -578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, -578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, -578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, -578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, +1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343, +1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343, +1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343, +1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343, +1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343, +1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343, +1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343,1343, +1343,1343,1343,1343,1343,1343,1343,1343,163,163,163,163,163,163,163,163, /* block 218 */ -578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, -578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578, -583,583,583,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -578,578,578,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,583,583,583,583,120,120,120,120,120,120,120,120, -959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959, +1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344, +1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344, +1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344, +1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344, +1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344, +1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344, +1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344, +1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344, /* block 219 */ -959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959, -959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959, -959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959, -959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959, -959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959, -959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959, -959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959, -959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959, +1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344, +1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344, +1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344, +1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344, +1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,1344, +1344,1344,1344,1344,1344,1344,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, /* block 220 */ -959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959, -959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959, -959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959, -959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959, -959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959, -959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959, -959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959, -959,959,959,959,959,959,959,959,959,959,959,959,120,120,120,120, +1343,1343,1343,1343,1343,1343,1343,1343,1343,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, /* block 221 */ -960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960, -960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960, -960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960, -960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960, -960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960, -960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960, -960,960,960,960,960,960,960,960,960,960,960,120,120,120,120,120, -960,960,960,960,960,960,960,960,960,960,960,960,960,120,120,120, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +1345,1345,1345,1345,163,1345,1345,1345,1345,1345,1345,1345,163,1345,1345,163, /* block 222 */ -960,960,960,960,960,960,960,960,960,120,120,120,120,120,120,120, -960,960,960,960,960,960,960,960,960,960,120,120,961,962,962,963, -964,964,964,964,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +824,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819, +819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819, +819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819, +819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819, +819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819, +819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819, +819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819, +819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819, /* block 223 */ -113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, -113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, -113,113,113,113,113,113,113,113,113,113,113,113,113,113,120,120, -113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, -113,113,113,113,113,113,113,120,120,120,120,120,120,120,120,120, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, +819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819, +819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819, +819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819, +819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819, +819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819, +819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819, +819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819, +819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819, /* block 224 */ - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819, +819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819, +824,824,824,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +819,819,819,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,824,824,824,824,163,163,163,163,163,163,163,163, +1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346, /* block 225 */ - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20,120,120,120,120,120,120,120,120,120,120, +1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346, +1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346, +1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346, +1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346, +1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346, +1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346, +1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346, +1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346, /* block 226 */ - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20,120,120, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20,965,966,113,113,113, 20, 20, 20,966,965,965, -965,965,965, 24, 24, 24, 24, 24, 24, 24, 24,113,113,113,113,113, +1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346, +1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346, +1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346, +1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346, +1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346, +1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346, +1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346, +1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,1346,163,163,163,163, /* block 227 */ -113,113,113, 20, 20,113,113,113,113,113,113,113, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,113,113,113,113, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,1347, +1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,1347, +1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,1347, +1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,1347, +1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,1347, +1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,1347, +1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,163,163,163,163,163, +1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,163,163,163, /* block 228 */ -692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,692, -692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,692, -692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,692, -692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,692, -692,692,967,967,967,692,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +1347,1347,1347,1347,1347,1347,1347,1347,1347,163,163,163,163,163,163,163, +1347,1347,1347,1347,1347,1347,1347,1347,1347,1347,163,163,1348,1349,1350,1351, +1352,1352,1352,1352,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, /* block 229 */ -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25,120,120,120,120,120,120,120,120,120,120,120,120, +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,154,154,154,154,154,154,163,163, +154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154, +154,154,154,154,154,154,154,163,163,163,163,163,163,163,163,163, +460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460, +460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460, +460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460, /* block 230 */ - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20,120,120,120,120,120,120,120,120,120, -587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587, -587,587, 25, 25, 25, 25, 25, 25, 25,120,120,120,120,120,120,120, +460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460, +460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460, +460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460, +460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460, +460,460,460,460,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, /* block 231 */ -518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518, -518,518,518,518,518,518,518,518,518,518,519,519,519,519,519,519, -519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519, -519,519,519,519,518,518,518,518,518,518,518,518,518,518,518,518, -518,518,518,518,518,518,518,518,518,518,518,518,518,518,519,519, -519,519,519,519,519,120,519,519,519,519,519,519,519,519,519,519, -519,519,519,519,519,519,519,519,518,518,518,518,518,518,518,518, -518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518, +460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460, +460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460, +460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460, +460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460, +460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460, +460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460, +460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460, +460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460, /* block 232 */ -518,518,519,519,519,519,519,519,519,519,519,519,519,519,519,519, -519,519,519,519,519,519,519,519,519,519,519,519,518,120,518,518, -120,120,518,120,120,518,518,120,120,518,518,518,518,120,518,518, -518,518,518,518,518,518,519,519,519,519,120,519,120,519,519,519, -519,519,519,519,120,519,519,519,519,519,519,519,519,519,519,519, -518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518, -518,518,518,518,518,518,518,518,518,518,519,519,519,519,519,519, -519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519, +460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460, +460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460, +460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460, +460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460, +460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460, +460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460, +460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460, +460,460,460,460,460,460,163,163,163,163,163,163,163,163,163,163, /* block 233 */ -519,519,519,519,518,518,120,518,518,518,518,120,120,518,518,518, -518,518,518,518,518,120,518,518,518,518,518,518,518,120,519,519, -519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519, -519,519,519,519,519,519,519,519,518,518,120,518,518,518,518,120, -518,518,518,518,518,120,518,120,120,120,518,518,518,518,518,518, -518,120,519,519,519,519,519,519,519,519,519,519,519,519,519,519, -519,519,519,519,519,519,519,519,519,519,519,519,518,518,518,518, -518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518, +460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460, +460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460, +460,460,460,460,460,460,460,163,163,460,460,460,460,460,460,460, +460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460, +460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460, +460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460, +460,460,460,460,460,1353,1354,154,154,154,460,460,460,1355,1356,1356, +1356,1356,1356, 51, 51, 51, 51, 51, 51, 51, 51,154,154,154,154,154, /* block 234 */ -518,518,518,518,518,518,519,519,519,519,519,519,519,519,519,519, -519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519, -518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518, -518,518,518,518,518,518,518,518,518,518,519,519,519,519,519,519, -519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519, -519,519,519,519,518,518,518,518,518,518,518,518,518,518,518,518, -518,518,518,518,518,518,518,518,518,518,518,518,518,518,519,519, -519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519, +154,154,154,460,460,154,154,154,154,154,154,154,460,460,460,460, +460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460, +460,460,460,460,460,460,460,460,460,460,154,154,154,154,460,460, +460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460, +460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460, +460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460, +460,460,460,460,460,460,460,460,460,723,723,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, /* block 235 */ -519,519,519,519,519,519,519,519,518,518,518,518,518,518,518,518, -518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518, -518,518,519,519,519,519,519,519,519,519,519,519,519,519,519,519, -519,519,519,519,519,519,519,519,519,519,519,519,518,518,518,518, -518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518, -518,518,518,518,518,518,519,519,519,519,519,519,519,519,519,519, -519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519, -518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518, +1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002, +1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002, +1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002, +1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002, +1002,1002,1357,1357,1357,1002,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, /* block 236 */ -518,518,518,518,518,518,518,518,518,518,519,519,519,519,519,519, -519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519, -519,519,519,519,519,519,120,120,518,518,518,518,518,518,518,518, -518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518, -518, 9,519,519,519,519,519,519,519,519,519,519,519,519,519,519, -519,519,519,519,519,519,519,519,519,519,519, 9,519,519,519,519, -519,519,518,518,518,518,518,518,518,518,518,518,518,518,518,518, -518,518,518,518,518,518,518,518,518,518,518, 9,519,519,519,519, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +835,835,835,835,835,835,835,835,835,835,835,835,835,835,835,835, +835,835,835,835,163,163,163,163,163,163,163,163,163,163,163,163, /* block 237 */ -519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519, -519,519,519,519,519, 9,519,519,519,519,519,519,518,518,518,518, -518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518, -518,518,518,518,518, 9,519,519,519,519,519,519,519,519,519,519, -519,519,519,519,519,519,519,519,519,519,519,519,519,519,519, 9, -519,519,519,519,519,519,518,518,518,518,518,518,518,518,518,518, -518,518,518,518,518,518,518,518,518,518,518,518,518,518,518, 9, -519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519, +723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723, +723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723, +723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723, +723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723, +723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723, +723,723,723,723,723,723,723,163,163,163,163,163,163,163,163,163, +832,832,832,832,832,832,832,832,832,832,832,832,832,832,832,832, +832,832,835,835,835,835,835,835,835,163,163,163,163,163,163,163, /* block 238 */ -519,519,519,519,519,519,519,519,519, 9,519,519,519,519,519,519, -518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518, -518,518,518,518,518,518,518,518,518, 9,519,519,519,519,519,519, -519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519, -519,519,519, 9,519,519,519,519,519,519,518,519,120,120, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, +724,724,724,724,724,724,724,724,724,724,724,724,724,724,724,724, +724,724,724,724,724,724,724,724,724,724,725,725,725,725,725,725, +725,725,736,736,725,725,725,725,725,725,725,725,725,725,725,725, +725,725,725,725,724,724,724,724,724,724,724,724,724,724,724,724, +724,724,724,724,724,724,724,724,724,724,724,724,724,724,725,725, +725,725,725,725,725,163,736,736,725,725,725,725,725,725,725,725, +725,725,725,725,725,725,725,725,724,724,724,724,724,724,724,724, +724,724,724,724,724,724,724,724,724,724,724,724,724,724,724,724, /* block 239 */ -968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968, -968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968, -968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968, -968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968, -968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968, -968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968, -968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968, -968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968, +724,724,725,725,725,725,725,725,725,725,736,736,725,725,725,725, +725,725,725,725,725,725,725,725,725,725,725,725,724,163,724,724, +163,163,724,163,163,724,724,163,163,724,724,724,724,163,724,724, +724,724,724,724,724,724,725,725,725,725,163,725,163,725,736,736, +725,725,725,725,163,725,725,725,725,725,725,725,725,725,725,725, +724,724,724,724,724,724,724,724,724,724,724,724,724,724,724,724, +724,724,724,724,724,724,724,724,724,724,725,725,725,725,725,725, +725,725,736,736,725,725,725,725,725,725,725,725,725,725,725,725, /* block 240 */ -969,969,969,969,969,969,969,969,969,969,969,969,969,969,969,969, -969,969,969,969,969,969,969,969,969,969,969,969,969,969,969,969, -969,969,969,969,969,969,969,969,969,969,969,969,969,969,969,969, -969,969,969,969,969,969,969,968,968,968,968,969,969,969,969,969, -969,969,969,969,969,969,969,969,969,969,969,969,969,969,969,969, -969,969,969,969,969,969,969,969,969,969,969,969,969,969,969,969, -969,969,969,969,969,969,969,969,969,969,969,969,969,968,968,968, -968,968,968,968,968,969,968,968,968,968,968,968,968,968,968,968, +725,725,725,725,724,724,163,724,724,724,724,163,163,724,724,724, +724,724,724,724,724,163,724,724,724,724,724,724,724,163,725,725, +725,725,725,725,725,725,736,736,725,725,725,725,725,725,725,725, +725,725,725,725,725,725,725,725,724,724,163,724,724,724,724,163, +724,724,724,724,724,163,724,163,163,163,724,724,724,724,724,724, +724,163,725,725,725,725,725,725,725,725,736,736,725,725,725,725, +725,725,725,725,725,725,725,725,725,725,725,725,724,724,724,724, +724,724,724,724,724,724,724,724,724,724,724,724,724,724,724,724, /* block 241 */ -968,968,968,968,969,968,968,970,970,970,970,970,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,969,969,969,969,969, -120,969,969,969,969,969,969,969,969,969,969,969,969,969,969,969, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +724,724,724,724,724,724,725,725,725,725,725,725,725,725,736,736, +725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725, +724,724,724,724,724,724,724,724,724,724,724,724,724,724,724,724, +724,724,724,724,724,724,724,724,724,724,725,725,725,725,725,725, +725,725,736,736,725,725,725,725,725,725,725,725,725,725,725,725, +725,725,725,725,724,724,724,724,724,724,724,724,724,724,724,724, +724,724,724,724,724,724,724,724,724,724,724,724,724,724,725,725, +725,725,725,725,725,725,736,736,725,725,725,725,725,725,725,725, /* block 242 */ - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 22, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +725,725,725,725,725,725,725,725,724,724,724,724,724,724,724,724, +724,724,724,724,724,724,724,724,724,724,724,724,724,724,724,724, +724,724,725,725,725,725,725,725,725,725,736,736,725,725,725,725, +725,725,725,725,725,725,725,725,725,725,725,725,724,724,724,724, +724,724,724,724,724,724,724,724,724,724,724,724,724,724,724,724, +724,724,724,724,724,724,725,725,725,725,725,725,725,725,736,736, +725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725, +724,724,724,724,724,724,724,724,724,724,724,724,724,724,724,724, /* block 243 */ -971,971,971,971,971,971,971,120,971,971,971,971,971,971,971,971, -971,971,971,971,971,971,971,971,971,120,120,971,971,971,971,971, -971,971,120,971,971,120,971,971,971,971,971,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +724,724,724,724,724,724,724,724,724,724,725,725,725,725,725,725, +725,725,736,736,725,725,725,725,725,725,725,725,725,725,725,725, +725,725,725,725,725,725,163,163,724,724,724,724,724,724,724,724, +724,724,724,724,724,724,724,724,724,724,724,724,724,724,724,724, +724,1358,725,725,725,725,725,725,725,725,725,725,725,725,725,725, +725,725,725,725,725,725,725,725,725,725,725,715,725,725,725,725, +725,725,724,724,724,724,724,724,724,724,724,724,724,724,724,724, +724,724,724,724,724,724,724,724,724,724,724,1358,725,725,725,725, /* block 244 */ -972,972,972,972,972,972,972,972,972,972,972,972,972,972,972,972, -972,972,972,972,972,972,972,972,972,972,972,972,972,972,972,972, -972,972,972,972,972,972,972,972,972,972,972,972,972,120,120,120, -973,973,973,973,973,973,973,974,974,974,974,974,974,974,120,120, -975,975,975,975,975,975,975,975,975,975,120,120,120,120,972,976, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725, +725,725,725,725,725,715,725,725,725,725,725,725,724,724,724,724, +724,724,724,724,724,724,724,724,724,724,724,724,724,724,724,724, +724,724,724,724,724,1358,725,725,725,725,725,725,725,725,725,725, +725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,715, +725,725,725,725,725,725,724,724,724,724,724,724,724,724,724,724, +724,724,724,724,724,724,724,724,724,724,724,724,724,724,724,1358, +725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725, /* block 245 */ -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977, -977,977,977,977,977,977,977,977,977,977,977,977,977,977,978,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -979,979,979,979,979,979,979,979,979,979,979,979,979,979,979,979, -979,979,979,979,979,979,979,979,979,979,979,979,979,979,979,979, -979,979,979,979,979,979,979,979,979,979,979,979,980,980,980,980, -981,981,981,981,981,981,981,981,981,981,120,120,120,120,120,982, +725,725,725,725,725,725,725,725,725,715,725,725,725,725,725,725, +724,724,724,724,724,724,724,724,724,724,724,724,724,724,724,724, +724,724,724,724,724,724,724,724,724,1358,725,725,725,725,725,725, +725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725, +725,725,725,715,725,725,725,725,725,725,724,725,163,163,1359,1359, +1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359, +1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359, +1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359, /* block 246 */ -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -361,361,361,361,361,361,361,120,361,361,361,361,120,361,361,120, -361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,120, +1360,1360,1360,1360,1360,1360,1360,1360,1360,1360,1360,1360,1360,1360,1360,1360, +1360,1360,1360,1360,1360,1360,1360,1360,1360,1360,1360,1360,1360,1360,1360,1360, +1360,1360,1360,1360,1360,1360,1360,1360,1360,1360,1360,1360,1360,1360,1360,1360, +1360,1360,1360,1360,1360,1360,1360,1360,1360,1360,1360,1360,1360,1360,1360,1360, +1360,1360,1360,1360,1360,1360,1360,1360,1360,1360,1360,1360,1360,1360,1360,1360, +1360,1360,1360,1360,1360,1360,1360,1360,1360,1360,1360,1360,1360,1360,1360,1360, +1360,1360,1360,1360,1360,1360,1360,1360,1360,1360,1360,1360,1360,1360,1360,1360, +1360,1360,1360,1360,1360,1360,1360,1360,1360,1360,1360,1360,1360,1360,1360,1360, /* block 247 */ -983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983, -983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983, -983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983, -983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983, -983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983, -983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983, -983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983, -983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983, +1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361, +1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361, +1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361, +1361,1361,1361,1361,1361,1361,1361,1360,1360,1360,1360,1361,1361,1361,1361,1361, +1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361, +1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361, +1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1360,1360,1360, +1360,1360,1360,1360,1360,1361,1360,1360,1360,1360,1360,1360,1360,1360,1360,1360, /* block 248 */ -983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983, -983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983, -983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983, -983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983, -983,983,983,983,983,120,120,984,984,984,984,984,984,984,984,984, -985,985,985,985,985,985,985,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +1360,1360,1360,1360,1361,1360,1360,1362,1363,1362,1362,1364,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,1361,1361,1361,1361,1361, +163,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, /* block 249 */ -986,986,986,986,986,986,986,986,986,986,986,986,986,986,986,986, -986,986,986,986,986,986,986,986,986,986,986,986,986,986,986,986, -986,986,987,987,987,987,987,987,987,987,987,987,987,987,987,987, -987,987,987,987,987,987,987,987,987,987,987,987,987,987,987,987, -987,987,987,987,988,988,988,988,988,988,988,989,120,120,120,120, -990,990,990,990,990,990,990,990,990,990,120,120,120,120,991,991, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 92, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,643, 70, 70, 70, 70,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, /* block 250 */ -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, +1365,1365,1365,1365,1365,1365,1365,163,1365,1365,1365,1365,1365,1365,1365,1365, +1365,1365,1365,1365,1365,1365,1365,1365,1365,163,163,1365,1365,1365,1365,1365, +1365,1365,163,1365,1365,163,1365,1365,1365,1365,1365,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, /* block 251 */ - 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, 20, 25, 25, 25, - 6, 25, 25, 25, 25,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +1366,1366,1366,1366,1366,1366,1366,1366,1366,1366,1366,1366,1366,1366,1366,1366, +1366,1366,1366,1366,1366,1366,1366,1366,1366,1366,1366,1366,1366,1366,1366,1366, +1366,1366,1366,1366,1366,1366,1366,1366,1366,1366,1366,1366,1366,163,163,163, +1367,1367,1367,1367,1367,1367,1367,1368,1368,1368,1368,1368,1369,1369,163,163, +1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,163,163,163,163,1366,1371, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, /* block 252 */ -120, 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, 20, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372, +1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1373,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +1374,1374,1374,1374,1374,1374,1374,1374,1374,1374,1374,1374,1374,1374,1374,1374, +1374,1374,1374,1374,1374,1374,1374,1374,1374,1374,1374,1374,1374,1374,1374,1374, +1374,1374,1374,1374,1374,1374,1374,1374,1374,1374,1374,1374,1375,1375,1375,1375, +1376,1376,1376,1376,1376,1376,1376,1376,1376,1376,163,163,163,163,163,1377, /* block 253 */ -225,225,225,225,120,225,225,225,225,225,225,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, -120,225,225,120,225,120,120,225,120,225,225,225,225,225,225,225, -225,225,225,120,225,225,225,225,120,225,120,225,120,120,120,120, -120,120,225,120,120,120,120,225,120,225,120,225,120,225,225,225, -120,225,225,120,225,120,120,225,120,225,120,225,120,225,120,225, -120,225,225,120,225,120,120,225,225,225,225,120,225,225,225,225, -225,225,225,120,225,225,225,225,120,225,225,225,225,120,225,120, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +483,483,483,483,483,483,483,163,483,483,483,483,163,483,483,163, +483,483,483,483,483,483,483,483,483,483,483,483,483,483,483,163, /* block 254 */ -225,225,225,225,225,225,225,225,225,225,120,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,120,120,120,120, -120,225,225,225,120,225,225,225,225,225,120,225,225,225,225,225, -225,225,225,225,225,225,225,225,225,225,225,225,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -217,217,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378, +1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378, +1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378, +1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378, +1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378, +1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378, +1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378, +1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378, /* block 255 */ - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,992,992,992,992, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, +1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378, +1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378, +1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378, +1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378, +1378,1378,1378,1378,1378,262,262,1379,1379,1379,1379,1379,1379,1379,1379,1379, +1380,1380,1380,1380,1380,1380,1380,262,262,262,262,262,262,262,262,262, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, /* block 256 */ - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21,992,992,992,992,992,992,992,992,992,992,992,992, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,992, -992, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, -992, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, -992, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21,992,992,992,992,992,992,992,992,992,992, +1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381, +1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381, +1381,1381,1382,1382,1382,1382,1382,1382,1382,1382,1382,1382,1382,1382,1382,1382, +1382,1382,1382,1382,1382,1382,1382,1382,1382,1382,1382,1382,1382,1382,1382,1382, +1382,1382,1382,1382,1383,1383,1383,1384,1385,1385,1385,1386,262,262,262,262, +1387,1387,1387,1387,1387,1387,1387,1387,1387,1387,262,262,262,262,1388,1388, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, /* block 257 */ - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 21, 21, 21, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, - 21, 21, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +302,1389,1389,1389,1389,1389,1389,1389,1389,1389,1389,1389,1389,1389,1389,1389, /* block 258 */ - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 20, - 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21,992,992, -992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992, -992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992, -992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992, -992,992,992,992,992,992,993,993,993,993,993,993,993,993,993,993, -993,993,993,993,993,993,993,993,993,993,993,993,993,993,993,993, +1389,1389,1389,1389,1389,1389,1389,1389,1389,1389,1389,1389,1389,1389,1389,1389, +1389,1389,1389,1389,1389,1389,1389,1389,1389,1389,1389,1389,1389,1389,1389,1389, +1389,1389,1389,1389,1389,1389,1389,1389,1389,1389,1389,1389,1390,1389,1389,1389, +1391,1389,1389,1389,1389,302,302,302,302,302,302,302,302,302,302,302, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, /* block 259 */ -994, 21, 21,992,992,992,992,992,992,992,992,992,992,992,992,992, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, - 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 20,992,992,992,992, - 20, 20, 20, 20, 20, 20, 20, 20, 20,992,992,992,992,992,992,992, -589,589,992,992,992,992,992,992,992,992,992,992,992,992,992,992, - 21, 21, 21, 21, 21, 21,992,992,992,992,992,992,992,992,992,992, -992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992, +302,1389,1389,1389,1389,1389,1389,1389,1389,1389,1389,1389,1389,1389,1389,1389, +1389,1389,1389,1389,1389,1389,1389,1389,1389,1389,1389,1389,1389,1389,1389,1389, +1389,1389,1389,1389,1389,1389,1389,1389,1389,1389,1389,1389,1389,1389,1390,1389, +1389,1389,1389,1389,1389,1389,1389,1389,1389,1389,1389,1389,1389,1389,302,302, +302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,302, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262, /* block 260 */ -992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992, -992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992, -992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992, -992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992, -992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992, -992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992, -992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992, -992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992, +1392,1392,1392,1392,302,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392, +1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392, +302,1392,1392,302,1392,302,302,1392,302,1392,1392,1392,1392,1392,1392,1392, +1392,1392,1392,302,1392,1392,1392,1392,302,1392,302,1392,302,302,302,302, +302,302,1392,302,302,302,302,1392,302,1392,302,1392,302,1392,1392,1392, +302,1392,1392,302,1392,302,302,1392,302,1392,302,1392,302,1392,302,1392, +302,1392,1392,302,1392,302,302,1392,1392,1392,1392,302,1392,1392,1392,1392, +1392,1392,1392,302,1392,1392,1392,1392,302,1392,1392,1392,1392,302,1392,302, /* block 261 */ - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, +1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,302,1392,1392,1392,1392,1392, +1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,302,302,302,302, +302,1392,1392,1392,302,1392,1392,1392,1392,1392,302,1392,1392,1392,1392,1392, +1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,302,302,302,302, +302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,302, +302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,302, +302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,302, +274,274,302,302,302,302,302,302,302,302,302,302,302,302,302,302, /* block 262 */ - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,995,995,995,995,995, +1393,1393,1393,1393,1394,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393, +1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393, +1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1395,1395,1395,1395, +1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393, +1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393, +1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393, +1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393, +1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393, /* block 263 */ - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 20, 20, - 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, +1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393, +1393,1393,1393,1393,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395, +1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1395, +1395,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393, +1395,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1394, +1395,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393, +1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393, +1393,1393,1393,1393,1393,1393,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395, /* block 264 */ - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 58, 58,1393,1393,1393, +460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460, +460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1393, +1396,1396,1396,1396,1396,1396,1396,1396,1396,1396,1396,1396,1396,1396,1396,1396, +1396,1396,1396,1396,1396,1396,1396,1396,1396,1396,460,460,460,460,460,460, +1396,1396,1396,1396,1396,1396,1396,1396,1396,1396,1396,1396,1396,1396,1396,1396, +1396,1396,1396,1396,1396,1396,1396,1396,1396,1396,723,723,1393,1393,1393,1393, +1397,1397,1396,1396,1396,1396,1396,1396,1396,1396,1396,1396,1396,1396,1397,1397, /* block 265 */ - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21,992,992,992,992,992, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,992,992,992, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,992,992,992, +1396,1396,1396,1396,1396,1396,1396,1396,1396,1396,460,460,460,460,1398,460, +460,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,460,460,460,460,460, +460,460,460,460,460,460,460,460,460,460,460,460,460,1393,1395,1395, +1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395, +1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395, +1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395, +1395,1395,1395,1395,1395,1395,1399,1399,1399,1399,1399,1399,1399,1399,1399,1399, +1399,1399,1399,1399,1399,1399,1399,1399,1399,1399,1399,1399,1399,1399,1399,1399, /* block 266 */ - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20,992,992,992,992,992,992,992,992,992,992,992,992, +1400,1398,1401,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395, +460,460,460,460,460,460,460,460,460,460,1398,460,460,460,460,460, +460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1398, +460,460,1398,1398,1398,1398,1398,1401,1398,1398,1398,460,1395,1395,1395,1395, +460,460,460,460,460,460,460,460,460,1395,1395,1395,1395,1395,1395,1395, +1402,1402,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395, +1393,1393,1393,1393,1393,1393,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395, +1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395, /* block 267 */ - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 21, 21, 21, 21,992,992,992,992,992,992,992, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,992,992,992,992, - 21,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992, +1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395, +1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395, +1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395, +1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395, +1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395, +1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395, +1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395, +1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395, /* block 268 */ - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,992,992,992,992, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20,992,992,992,992,992,992,992,992, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,992,992,992,992,992,992, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, +1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394, +1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394, +1394,727,1393,1393,727,727,727,727,727,727,727,727,727,1394,1394,1394, +1394,1394,1394,1394,1394,1394,727,1394,1394,1394,1394,1394,1394,1394,1394,1394, +1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394, +1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394, +1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394, +1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,727,1394,1394, /* block 269 */ - 20, 20, 20, 20, 20, 20, 20, 20,992,992,992,992,992,992,992,992, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,992,992, - 21, 21,992,992,992,992,992,992,992,992,992,992,992,992,992,992, -992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992, -992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992, -992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992, -992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992, +1394,1394,1394,1394,1394,1403,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394, +1394,1394,1394,1394,1393,1393,727,727,1393,727,727,727,1393,1393,727,727, +1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394, +1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394, +1394,1394,1403,1403,1403,1394,1394,1403,1394,1394,1403,1404,1404,727,727,1394, +1394,1394,1394,1394,727,727,727,727,727,727,727,727,727,727,727,727, +1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394, +1394,1393,1393,727,1394,727,1393,727,1394,1394,1394,1405,1405,1405,1405,1405, /* block 270 */ - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 20, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, +1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394, +1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394, +1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394, +1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,727, +1394,727,1403,1403,1394,1394,1403,1403,1403,1403,1403,1403,1403,1403,1403,1403, +1403,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394, +1394,1394,1394,1394,1394,1394,1403,1403,1403,1403,1403,1403,1403,1403,1403,1403, +1403,1403,1403,1403,1403,1403,1403,1403,1403,1394,1394,1394,1403,1394,1394,1394, /* block 271 */ - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21,992,992,992,992,992,992,992,992,992,992,992,992, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,992,992, - 21, 21, 21, 21, 21,992,992,992, 21, 21, 21, 21, 21,992,992,992, +1394,1403,1403,1403,1394,1403,1403,1403,1394,1394,1394,1394,1394,1394,1394,1403, +1394,1403,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394, +1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1403,1394,1394,1394,1394,1394, +1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394, +1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394, +1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394, +1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394, +1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,727,1393,1394, /* block 272 */ - 21, 21, 21, 21, 21, 21, 21,992,992,992,992,992,992,992,992,992, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,992,992,992, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,992,992,992,992,992, - 21, 21, 21, 21, 21, 21,992,992,992,992,992,992,992,992,992,992, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,992,992,992,992,992,992, - 21, 21, 21, 21, 21, 21, 21, 21,992,992,992,992,992,992,992,992, - 21, 21, 21, 21, 21, 21, 21,992,992,992,992,992,992,992,992,992, +1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394, +1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394, +1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394, +1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,723,723, +723,723,723,723,723,723,1393,1393,1393,727,727,1394,1394,1394,1394,1393, +1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394, +1394,1394,1394,1394,1394,1394,1394,1394,1393,1393,1393,1393,1393,1393,1393,727, +727,1393,1393,727,1404,1404,727,727,727,727,1403,1393,1393,1393,1393,1393, /* block 273 */ - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20,120, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,120,120,120,120,120,120, +1393,1393,1393,1393,1393,1393,1393,727,1393,1393,727,727,727,727,1393,1393, +1404,1393,1393,1393,1393,1403,1403,1393,1393,1393,1393,1393,1393,1393,1393,1393, +1393,1393,1393,1393,1394,727,1393,1393,727,1393,1393,1393,1393,1393,1393,1393, +1393,727,727,1393,1393,1393,1393,1393,1393,1393,1393,1393,727,1393,1393,1393, +1393,1393,727,727,727,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393, +1393,727,727,727,1393,1393,1393,1393,1393,1393,1393,1393,727,727,727,1393, +1393,727,1393,727,1393,1393,1393,1393,727,1393,1393,1393,1393,1393,1393,727, +1393,1393,1393,727,1393,1393,1393,1393,1393,1393,727,1394,1394,1394,1394,1394, /* block 274 */ -992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992, -992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992, -992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992, -992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992, -992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992, -992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992, -992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992, -992,992,992,992,992,992,992,992,992,992,992,992,992,992,120,120, +1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394, +1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394, +1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394, +1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394, +1394,1394,1394,1394,1394,1403,1403,1403,1394,1394,1394,1403,1403,1403,1403,1403, +723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723, +723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723, +723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723, /* block 275 */ -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394, +1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394, +1394,1394,1394,1403,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394, +1394,1394,1394,1394,1403,1403,1403,1394,1394,1394,1394,1394,1394,1394,1394,1394, +1403,1394,1394,1394,1394,1394,1393,1393,1393,1393,1393,727,1403,727,727,727, +1394,1394,1394,1393,1393,1394,1394,1394,1395,1395,1395,1395,1395,1394,1394,1394, +727,727,727,727,727,727,1393,1393,1393,727,1393,1394,1394,1395,1395,1395, +727,1393,1393,727,1394,1394,1394,1394,1394,1394,1394,1394,1394,1395,1395,1395, /* block 276 */ -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,120,120,120,120,120,120,120, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723, +723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723, +723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723, +723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723, +723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723, +723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723, +723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723, +723,723,723,723,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395, /* block 277 */ -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,120,120, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723, +723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723, +723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723, +723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723, +723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723, +723,723,723,723,723,1393,1393,1393,1393,1395,1395,1395,1395,1395,1395,1395, +1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1395,1395,1395,1395, +1394,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395, /* block 278 */ -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, +723,723,723,723,723,723,723,723,723,723,723,723,1395,1395,1395,1395, +723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723, +723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723, +723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723, +723,723,723,723,723,723,723,723,1395,1395,1395,1395,1395,1395,1395,1395, +723,723,723,723,723,723,723,723,723,723,1395,1395,1395,1395,1395,1395, +723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723, +723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723, /* block 279 */ -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +723,723,723,723,723,723,723,723,1395,1395,1395,1395,1395,1395,1395,1395, +723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723, +723,723,723,723,723,723,723,723,723,723,723,723,723,723,1395,1395, +1393,1393,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395, +1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395, +1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395, +1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395, +1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395, /* block 280 */ -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +723,723,723,723,723,723,723,723,723,723,723,723,1403,1394,1394,1403, +1394,1394,1394,1394,1394,1394,1394,1394,1403,1403,1403,1403,1403,1403,1403,1403, +1394,1394,1394,1394,1394,1394,1403,1394,1394,1394,1394,1394,1394,1394,1394,1394, +1403,1403,1403,1403,1403,1403,1403,1403,1403,1403,1394,723,1403,1403,1403,1394, +1394,1394,1394,1394,1394,1394,723,1394,1394,1394,1394,1394,1394,1394,1394,1394, +1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394, +1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394, +1394,1394,1394,1394,1394,1394,1394,1403,1394,1394,1394,1394,1394,1394,1394,1394, /* block 281 */ -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, -120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394, +1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394, +1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394, +1406,1406,1406,1406,1394,1403,1403,1394,1403,1403,1394,1403,1394,1394,1394,1394, +1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1403,1403,1403, +1394,1403,1403,1403,1403,1403,1403,1403,1403,1403,1403,1403,1403,1403,1394,1394, +1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394, +1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394, /* block 282 */ -516, 24,516,516,516,516,516,516,516,516,516,516,516,516,516,516, -516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516, -996,996,996,996,996,996,996,996,996,996,996,996,996,996,996,996, -996,996,996,996,996,996,996,996,996,996,996,996,996,996,996,996, -996,996,996,996,996,996,996,996,996,996,996,996,996,996,996,996, -996,996,996,996,996,996,996,996,996,996,996,996,996,996,996,996, -996,996,996,996,996,996,996,996,996,996,996,996,996,996,996,996, -996,996,996,996,996,996,996,996,996,996,996,996,996,996,996,996, +1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393, +1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393, +1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393, +1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393, +1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393, +1393,1393,1393,1393,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395, +1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1393,1395,1395, +1394,1394,1394,1394,1394,1395,1395,1395,1394,1394,1394,1394,1394,1395,1395,1395, /* block 283 */ -516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516, -516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516, -516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516, -516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516, -516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516, -516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516, -516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516, -516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516, +1394,1394,1394,1394,1394,1394,1394,1395,1395,1395,1395,1395,1395,1395,1395,1395, +1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394, +1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1395,1395,1395, +1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1395,1395,1395,1395,1395, +1394,1394,1394,1403,1403,1403,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395, +1394,1394,1394,1394,1394,1394,1394,1394,1394,1394,1395,1395,1395,1395,1395,1395, +1394,1394,1394,1394,1394,1394,1394,1394,1395,1395,1395,1395,1395,1395,1395,1395, +1403,1403,1403,1403,1403,1403,1403,1395,1395,1395,1395,1395,1395,1395,1395,1395, /* block 284 */ -113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, -113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, -113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, -113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, -113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, -113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, -113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, -113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, +723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723, +723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723, +723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723, +723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723, +723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723, +723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723, +723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723, +723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723, /* block 285 */ -113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, -113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, -113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, -113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, -113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, -113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, -113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, -516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516, +723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723, +723,723,723,163,723,723,723,723,723,723,723,723,723,723,723,723, +723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723, +723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723, +723,723,723,723,723,723,723,723,723,723,723,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +1407,1407,1407,1407,1407,1407,1407,1407,1407,1407,163,163,163,163,163,163, /* block 286 */ -678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678, -678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678, -678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678, -678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678, -678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678, -678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678, -678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678, -678,678,678,678,678,678,678,678,678,678,678,678,678,678,120,120, - +1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395, +1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395, +1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395, +1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395, +1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395, +1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395, +1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395, +1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,958,958, + +/* block 287 */ +838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, +838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, +838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, +838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, +838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, +838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, + +/* block 288 */ +838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, +838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, +838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, +838,838,838,838,838,838,838,838,838,163,163,163,163,163,163,163, +838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, +838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, +838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, +838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, + +/* block 289 */ +838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, +838,838,838,838,838,838,838,838,838,838,838,838,838,838,163,163, +838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, +838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, +838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, +838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, +838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, +838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, + +/* block 290 */ +838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, +838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, +838,838,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, +838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, +838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, +838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, +838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, + +/* block 291 */ +838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, +838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, +838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, +838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, +838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, +838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, +838,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, + +/* block 292 */ +953,953,953,953,953,953,953,953,953,953,953,953,953,953,953,953, +953,953,953,953,953,953,953,953,953,953,953,953,953,953,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, + +/* block 293 */ +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,958,958, + +/* block 294 */ +838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, +838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, +838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, +838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838, +838,838,838,838,838,838,838,838,838,838,838,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, + +/* block 295 */ +707,712,707,707,707,707,707,707,707,707,707,707,707,707,707,707, +707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,707, +1408,1408,1408,1408,1408,1408,1408,1408,1408,1408,1408,1408,1408,1408,1408,1408, +1408,1408,1408,1408,1408,1408,1408,1408,1408,1408,1408,1408,1408,1408,1408,1408, +1408,1408,1408,1408,1408,1408,1408,1408,1408,1408,1408,1408,1408,1408,1408,1408, +1408,1408,1408,1408,1408,1408,1408,1408,1408,1408,1408,1408,1408,1408,1408,1408, +1408,1408,1408,1408,1408,1408,1408,1408,1408,1408,1408,1408,1408,1408,1408,1408, +1408,1408,1408,1408,1408,1408,1408,1408,1408,1408,1408,1408,1408,1408,1408,1408, + +/* block 296 */ +707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,707, +707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,707, +707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,707, +707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,707, +707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,707, +707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,707, +707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,707, +707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,707, + +/* block 297 */ +961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961, +961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961, +961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961, +961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961, +961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961, +961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961, +961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961, +961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961, + +/* block 298 */ +961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961, +961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961, +961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961, +961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961, +961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961, +961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961, +961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961, +707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,707, + +/* block 299 */ +952,952,952,952,952,952,952,952,952,952,952,952,952,952,952,952, +952,952,952,952,952,952,952,952,952,952,952,952,952,952,952,952, +952,952,952,952,952,952,952,952,952,952,952,952,952,952,952,952, +952,952,952,952,952,952,952,952,952,952,952,952,952,952,952,952, +952,952,952,952,952,952,952,952,952,952,952,952,952,952,952,952, +952,952,952,952,952,952,952,952,952,952,952,952,952,952,952,952, +952,952,952,952,952,952,952,952,952,952,952,952,952,952,952,952, +952,952,952,952,952,952,952,952,952,952,952,952,952,952,958,958, }; #if UCD_BLOCK_SIZE != 128 @@ -4622,3 +5392,5 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 73472 bytes, block = 128 */ #endif /* SUPPORT_UNICODE */ #endif /* PCRE2_PCRE2TEST */ + +/* End of pcre2_ucd.c */ diff --git a/thirdparty/pcre2/src/pcre2_ucp.h b/thirdparty/pcre2/src/pcre2_ucp.h index d84f269e87..282238982d 100644 --- a/thirdparty/pcre2/src/pcre2_ucp.h +++ b/thirdparty/pcre2/src/pcre2_ucp.h @@ -7,7 +7,11 @@ and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Original API code Copyright (c) 1997-2012 University of Cambridge - New API code Copyright (c) 2016-2018 University of Cambridge + New API code Copyright (c) 2016-2022 University of Cambridge + +This module is auto-generated from Unicode data files. DO NOT EDIT MANUALLY! +Instead, modify the maint/GenerateUcpHeader.py script and run it to generate +a new version of this code. ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -38,31 +42,27 @@ POSSIBILITY OF SUCH DAMAGE. ----------------------------------------------------------------------------- */ - #ifndef PCRE2_UCP_H_IDEMPOTENT_GUARD #define PCRE2_UCP_H_IDEMPOTENT_GUARD -/* This file contains definitions of the property values that are returned by -the UCD access macros. New values that are added for new releases of Unicode -should always be at the end of each enum, for backwards compatibility. +/* This file contains definitions of the Unicode property values that are +returned by the UCD access macros and used throughout PCRE2. -IMPORTANT: Note also that the specific numeric values of the enums have to be -the same as the values that are generated by the maint/MultiStage2.py script, -where the equivalent property descriptive names are listed in vectors. - -ALSO: The specific values of the first two enums are assumed for the table -called catposstab in pcre2_compile.c. */ +IMPORTANT: The specific values of the first two enums (general and particular +character categories) are assumed by the table called catposstab in the file +pcre2_auto_possess.c. They are unlikely to change, but should be checked after +an update. */ /* These are the general character categories. */ enum { - ucp_C, /* Other */ - ucp_L, /* Letter */ - ucp_M, /* Mark */ - ucp_N, /* Number */ - ucp_P, /* Punctuation */ - ucp_S, /* Symbol */ - ucp_Z /* Separator */ + ucp_C, + ucp_L, + ucp_M, + ucp_N, + ucp_P, + ucp_S, + ucp_Z, }; /* These are the particular character categories. */ @@ -97,7 +97,98 @@ enum { ucp_So, /* Other symbol */ ucp_Zl, /* Line separator */ ucp_Zp, /* Paragraph separator */ - ucp_Zs /* Space separator */ + ucp_Zs, /* Space separator */ +}; + +/* These are Boolean properties. */ + +enum { + ucp_ASCII, + ucp_ASCII_Hex_Digit, + ucp_Alphabetic, + ucp_Bidi_Control, + ucp_Bidi_Mirrored, + ucp_Case_Ignorable, + ucp_Cased, + ucp_Changes_When_Casefolded, + ucp_Changes_When_Casemapped, + ucp_Changes_When_Lowercased, + ucp_Changes_When_Titlecased, + ucp_Changes_When_Uppercased, + ucp_Dash, + ucp_Default_Ignorable_Code_Point, + ucp_Deprecated, + ucp_Diacritic, + ucp_Emoji, + ucp_Emoji_Component, + ucp_Emoji_Modifier, + ucp_Emoji_Modifier_Base, + ucp_Emoji_Presentation, + ucp_Extended_Pictographic, + ucp_Extender, + ucp_Grapheme_Base, + ucp_Grapheme_Extend, + ucp_Grapheme_Link, + ucp_Hex_Digit, + ucp_IDS_Binary_Operator, + ucp_IDS_Trinary_Operator, + ucp_ID_Continue, + ucp_ID_Start, + ucp_Ideographic, + ucp_Join_Control, + ucp_Logical_Order_Exception, + ucp_Lowercase, + ucp_Math, + ucp_Noncharacter_Code_Point, + ucp_Pattern_Syntax, + ucp_Pattern_White_Space, + ucp_Prepended_Concatenation_Mark, + ucp_Quotation_Mark, + ucp_Radical, + ucp_Regional_Indicator, + ucp_Sentence_Terminal, + ucp_Soft_Dotted, + ucp_Terminal_Punctuation, + ucp_Unified_Ideograph, + ucp_Uppercase, + ucp_Variation_Selector, + ucp_White_Space, + ucp_XID_Continue, + ucp_XID_Start, + /* This must be last */ + ucp_Bprop_Count +}; + +/* Size of entries in ucd_boolprop_sets[] */ + +#define ucd_boolprop_sets_item_size 2 + +/* These are the bidi class values. */ + +enum { + ucp_bidiAL, /* Arabic letter */ + ucp_bidiAN, /* Arabic number */ + ucp_bidiB, /* Paragraph separator */ + ucp_bidiBN, /* Boundary neutral */ + ucp_bidiCS, /* Common separator */ + ucp_bidiEN, /* European number */ + ucp_bidiES, /* European separator */ + ucp_bidiET, /* European terminator */ + ucp_bidiFSI, /* First strong isolate */ + ucp_bidiL, /* Left to right */ + ucp_bidiLRE, /* Left to right embedding */ + ucp_bidiLRI, /* Left to right isolate */ + ucp_bidiLRO, /* Left to right override */ + ucp_bidiNSM, /* Non-spacing mark */ + ucp_bidiON, /* Other neutral */ + ucp_bidiPDF, /* Pop directional format */ + ucp_bidiPDI, /* Pop directional isolate */ + ucp_bidiR, /* Right to left */ + ucp_bidiRLE, /* Right to left embedding */ + ucp_bidiRLI, /* Right to left isolate */ + ucp_bidiRLO, /* Right to left override */ + ucp_bidiS, /* Segment separator */ + ucp_bidiWS, /* White space */ }; /* These are grapheme break properties. The Extended Pictographic property @@ -115,191 +206,189 @@ enum { ucp_gbT, /* 8 Hangul syllable type T */ ucp_gbLV, /* 9 Hangul syllable type LV */ ucp_gbLVT, /* 10 Hangul syllable type LVT */ - ucp_gbRegionalIndicator, /* 11 */ + ucp_gbRegional_Indicator, /* 11 */ ucp_gbOther, /* 12 */ ucp_gbZWJ, /* 13 */ - ucp_gbExtended_Pictographic /* 14 */ + ucp_gbExtended_Pictographic, /* 14 */ }; /* These are the script identifications. */ enum { - ucp_Unknown, - ucp_Arabic, - ucp_Armenian, - ucp_Bengali, - ucp_Bopomofo, - ucp_Braille, - ucp_Buginese, - ucp_Buhid, - ucp_Canadian_Aboriginal, - ucp_Cherokee, - ucp_Common, - ucp_Coptic, - ucp_Cypriot, + /* Scripts which has characters in other scripts. */ + ucp_Latin, + ucp_Greek, ucp_Cyrillic, - ucp_Deseret, + ucp_Arabic, + ucp_Syriac, + ucp_Thaana, ucp_Devanagari, - ucp_Ethiopic, - ucp_Georgian, - ucp_Glagolitic, - ucp_Gothic, - ucp_Greek, - ucp_Gujarati, + ucp_Bengali, ucp_Gurmukhi, - ucp_Han, - ucp_Hangul, - ucp_Hanunoo, - ucp_Hebrew, - ucp_Hiragana, - ucp_Inherited, + ucp_Gujarati, + ucp_Oriya, + ucp_Tamil, + ucp_Telugu, ucp_Kannada, - ucp_Katakana, - ucp_Kharoshthi, - ucp_Khmer, - ucp_Lao, - ucp_Latin, - ucp_Limbu, - ucp_Linear_B, ucp_Malayalam, - ucp_Mongolian, - ucp_Myanmar, - ucp_New_Tai_Lue, - ucp_Ogham, - ucp_Old_Italic, - ucp_Old_Persian, - ucp_Oriya, - ucp_Osmanya, - ucp_Runic, - ucp_Shavian, ucp_Sinhala, - ucp_Syloti_Nagri, - ucp_Syriac, + ucp_Myanmar, + ucp_Georgian, + ucp_Hangul, + ucp_Mongolian, + ucp_Hiragana, + ucp_Katakana, + ucp_Bopomofo, + ucp_Han, + ucp_Yi, ucp_Tagalog, + ucp_Hanunoo, + ucp_Buhid, ucp_Tagbanwa, + ucp_Limbu, ucp_Tai_Le, - ucp_Tamil, - ucp_Telugu, - ucp_Thaana, + ucp_Linear_B, + ucp_Cypriot, + ucp_Buginese, + ucp_Coptic, + ucp_Glagolitic, + ucp_Syloti_Nagri, + ucp_Phags_Pa, + ucp_Nko, + ucp_Kayah_Li, + ucp_Javanese, + ucp_Kaithi, + ucp_Mandaic, + ucp_Chakma, + ucp_Sharada, + ucp_Takri, + ucp_Duployan, + ucp_Grantha, + ucp_Khojki, + ucp_Linear_A, + ucp_Mahajani, + ucp_Manichaean, + ucp_Modi, + ucp_Old_Permic, + ucp_Psalter_Pahlavi, + ucp_Khudawadi, + ucp_Tirhuta, + ucp_Multani, + ucp_Adlam, + ucp_Masaram_Gondi, + ucp_Dogra, + ucp_Gunjala_Gondi, + ucp_Hanifi_Rohingya, + ucp_Sogdian, + ucp_Nandinagari, + ucp_Yezidi, + ucp_Cypro_Minoan, + ucp_Old_Uyghur, + + /* Scripts which has no characters in other scripts. */ + ucp_Unknown, + ucp_Common, + ucp_Armenian, + ucp_Hebrew, ucp_Thai, + ucp_Lao, ucp_Tibetan, - ucp_Tifinagh, + ucp_Ethiopic, + ucp_Cherokee, + ucp_Canadian_Aboriginal, + ucp_Ogham, + ucp_Runic, + ucp_Khmer, + ucp_Old_Italic, + ucp_Gothic, + ucp_Deseret, + ucp_Inherited, ucp_Ugaritic, - ucp_Yi, - /* New for Unicode 5.0 */ + ucp_Shavian, + ucp_Osmanya, + ucp_Braille, + ucp_New_Tai_Lue, + ucp_Tifinagh, + ucp_Old_Persian, + ucp_Kharoshthi, ucp_Balinese, ucp_Cuneiform, - ucp_Nko, - ucp_Phags_Pa, ucp_Phoenician, - /* New for Unicode 5.1 */ - ucp_Carian, - ucp_Cham, - ucp_Kayah_Li, + ucp_Sundanese, ucp_Lepcha, - ucp_Lycian, - ucp_Lydian, ucp_Ol_Chiki, - ucp_Rejang, - ucp_Saurashtra, - ucp_Sundanese, ucp_Vai, - /* New for Unicode 5.2 */ + ucp_Saurashtra, + ucp_Rejang, + ucp_Lycian, + ucp_Carian, + ucp_Lydian, + ucp_Cham, + ucp_Tai_Tham, + ucp_Tai_Viet, ucp_Avestan, - ucp_Bamum, ucp_Egyptian_Hieroglyphs, - ucp_Imperial_Aramaic, - ucp_Inscriptional_Pahlavi, - ucp_Inscriptional_Parthian, - ucp_Javanese, - ucp_Kaithi, + ucp_Samaritan, ucp_Lisu, + ucp_Bamum, ucp_Meetei_Mayek, + ucp_Imperial_Aramaic, ucp_Old_South_Arabian, + ucp_Inscriptional_Parthian, + ucp_Inscriptional_Pahlavi, ucp_Old_Turkic, - ucp_Samaritan, - ucp_Tai_Tham, - ucp_Tai_Viet, - /* New for Unicode 6.0.0 */ ucp_Batak, ucp_Brahmi, - ucp_Mandaic, - /* New for Unicode 6.1.0 */ - ucp_Chakma, ucp_Meroitic_Cursive, ucp_Meroitic_Hieroglyphs, ucp_Miao, - ucp_Sharada, ucp_Sora_Sompeng, - ucp_Takri, - /* New for Unicode 7.0.0 */ - ucp_Bassa_Vah, ucp_Caucasian_Albanian, - ucp_Duployan, + ucp_Bassa_Vah, ucp_Elbasan, - ucp_Grantha, - ucp_Khojki, - ucp_Khudawadi, - ucp_Linear_A, - ucp_Mahajani, - ucp_Manichaean, + ucp_Pahawh_Hmong, ucp_Mende_Kikakui, - ucp_Modi, ucp_Mro, - ucp_Nabataean, ucp_Old_North_Arabian, - ucp_Old_Permic, - ucp_Pahawh_Hmong, + ucp_Nabataean, ucp_Palmyrene, - ucp_Psalter_Pahlavi, ucp_Pau_Cin_Hau, ucp_Siddham, - ucp_Tirhuta, ucp_Warang_Citi, - /* New for Unicode 8.0.0 */ ucp_Ahom, ucp_Anatolian_Hieroglyphs, ucp_Hatran, - ucp_Multani, ucp_Old_Hungarian, ucp_SignWriting, - /* New for Unicode 10.0.0 (no update since 8.0.0) */ - ucp_Adlam, ucp_Bhaiksuki, ucp_Marchen, ucp_Newa, ucp_Osage, ucp_Tangut, - ucp_Masaram_Gondi, ucp_Nushu, ucp_Soyombo, ucp_Zanabazar_Square, - /* New for Unicode 11.0.0 */ - ucp_Dogra, - ucp_Gunjala_Gondi, - ucp_Hanifi_Rohingya, ucp_Makasar, ucp_Medefaidrin, ucp_Old_Sogdian, - ucp_Sogdian, - /* New for Unicode 12.0.0 */ ucp_Elymaic, - ucp_Nandinagari, ucp_Nyiakeng_Puachue_Hmong, ucp_Wancho, - /* New for Unicode 13.0.0 */ ucp_Chorasmian, ucp_Dives_Akuru, ucp_Khitan_Small_Script, - ucp_Yezidi, - /* New for Unicode 14.0.0 */ - ucp_Cypro_Minoan, - ucp_Old_Uyghur, ucp_Tangsa, ucp_Toto, - ucp_Vithkuqi + ucp_Vithkuqi, + + /* This must be last */ + ucp_Script_Count }; +/* Size of entries in ucd_script_sets[] */ + +#define ucd_script_sets_item_size 3 + #endif /* PCRE2_UCP_H_IDEMPOTENT_GUARD */ /* End of pcre2_ucp.h */ diff --git a/thirdparty/pcre2/src/pcre2_ucptables.c b/thirdparty/pcre2/src/pcre2_ucptables.c new file mode 100644 index 0000000000..bd1b67a9f1 --- /dev/null +++ b/thirdparty/pcre2/src/pcre2_ucptables.c @@ -0,0 +1,1524 @@ +/************************************************* +* Perl-Compatible Regular Expressions * +*************************************************/ + +/* PCRE is a library of functions to support regular expressions whose syntax +and semantics are as close as possible to those of the Perl 5 language. + + Written by Philip Hazel + Original API code Copyright (c) 1997-2012 University of Cambridge + New API code Copyright (c) 2016-2022 University of Cambridge + +This module is auto-generated from Unicode data files. DO NOT EDIT MANUALLY! +Instead, modify the maint/GenerateUcpTables.py script and run it to generate +a new version of this code. + +----------------------------------------------------------------------------- +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the University of Cambridge nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +----------------------------------------------------------------------------- +*/ + +#ifdef SUPPORT_UNICODE + +/* The PRIV(utt)[] table below translates Unicode property names into type and +code values. It is searched by binary chop, so must be in collating sequence of +name. Originally, the table contained pointers to the name strings in the first +field of each entry. However, that leads to a large number of relocations when +a shared library is dynamically loaded. A significant reduction is made by +putting all the names into a single, large string and using offsets instead. +All letters are lower cased, and underscores are removed, in accordance with +the "loose matching" rules that Unicode advises and Perl uses. */ + +#define STRING_adlam0 STR_a STR_d STR_l STR_a STR_m "\0" +#define STRING_adlm0 STR_a STR_d STR_l STR_m "\0" +#define STRING_aghb0 STR_a STR_g STR_h STR_b "\0" +#define STRING_ahex0 STR_a STR_h STR_e STR_x "\0" +#define STRING_ahom0 STR_a STR_h STR_o STR_m "\0" +#define STRING_alpha0 STR_a STR_l STR_p STR_h STR_a "\0" +#define STRING_alphabetic0 STR_a STR_l STR_p STR_h STR_a STR_b STR_e STR_t STR_i STR_c "\0" +#define STRING_anatolianhieroglyphs0 STR_a STR_n STR_a STR_t STR_o STR_l STR_i STR_a STR_n STR_h STR_i STR_e STR_r STR_o STR_g STR_l STR_y STR_p STR_h STR_s "\0" +#define STRING_any0 STR_a STR_n STR_y "\0" +#define STRING_arab0 STR_a STR_r STR_a STR_b "\0" +#define STRING_arabic0 STR_a STR_r STR_a STR_b STR_i STR_c "\0" +#define STRING_armenian0 STR_a STR_r STR_m STR_e STR_n STR_i STR_a STR_n "\0" +#define STRING_armi0 STR_a STR_r STR_m STR_i "\0" +#define STRING_armn0 STR_a STR_r STR_m STR_n "\0" +#define STRING_ascii0 STR_a STR_s STR_c STR_i STR_i "\0" +#define STRING_asciihexdigit0 STR_a STR_s STR_c STR_i STR_i STR_h STR_e STR_x STR_d STR_i STR_g STR_i STR_t "\0" +#define STRING_avestan0 STR_a STR_v STR_e STR_s STR_t STR_a STR_n "\0" +#define STRING_avst0 STR_a STR_v STR_s STR_t "\0" +#define STRING_bali0 STR_b STR_a STR_l STR_i "\0" +#define STRING_balinese0 STR_b STR_a STR_l STR_i STR_n STR_e STR_s STR_e "\0" +#define STRING_bamu0 STR_b STR_a STR_m STR_u "\0" +#define STRING_bamum0 STR_b STR_a STR_m STR_u STR_m "\0" +#define STRING_bass0 STR_b STR_a STR_s STR_s "\0" +#define STRING_bassavah0 STR_b STR_a STR_s STR_s STR_a STR_v STR_a STR_h "\0" +#define STRING_batak0 STR_b STR_a STR_t STR_a STR_k "\0" +#define STRING_batk0 STR_b STR_a STR_t STR_k "\0" +#define STRING_beng0 STR_b STR_e STR_n STR_g "\0" +#define STRING_bengali0 STR_b STR_e STR_n STR_g STR_a STR_l STR_i "\0" +#define STRING_bhaiksuki0 STR_b STR_h STR_a STR_i STR_k STR_s STR_u STR_k STR_i "\0" +#define STRING_bhks0 STR_b STR_h STR_k STR_s "\0" +#define STRING_bidial0 STR_b STR_i STR_d STR_i STR_a STR_l "\0" +#define STRING_bidian0 STR_b STR_i STR_d STR_i STR_a STR_n "\0" +#define STRING_bidib0 STR_b STR_i STR_d STR_i STR_b "\0" +#define STRING_bidibn0 STR_b STR_i STR_d STR_i STR_b STR_n "\0" +#define STRING_bidic0 STR_b STR_i STR_d STR_i STR_c "\0" +#define STRING_bidicontrol0 STR_b STR_i STR_d STR_i STR_c STR_o STR_n STR_t STR_r STR_o STR_l "\0" +#define STRING_bidics0 STR_b STR_i STR_d STR_i STR_c STR_s "\0" +#define STRING_bidien0 STR_b STR_i STR_d STR_i STR_e STR_n "\0" +#define STRING_bidies0 STR_b STR_i STR_d STR_i STR_e STR_s "\0" +#define STRING_bidiet0 STR_b STR_i STR_d STR_i STR_e STR_t "\0" +#define STRING_bidifsi0 STR_b STR_i STR_d STR_i STR_f STR_s STR_i "\0" +#define STRING_bidil0 STR_b STR_i STR_d STR_i STR_l "\0" +#define STRING_bidilre0 STR_b STR_i STR_d STR_i STR_l STR_r STR_e "\0" +#define STRING_bidilri0 STR_b STR_i STR_d STR_i STR_l STR_r STR_i "\0" +#define STRING_bidilro0 STR_b STR_i STR_d STR_i STR_l STR_r STR_o "\0" +#define STRING_bidim0 STR_b STR_i STR_d STR_i STR_m "\0" +#define STRING_bidimirrored0 STR_b STR_i STR_d STR_i STR_m STR_i STR_r STR_r STR_o STR_r STR_e STR_d "\0" +#define STRING_bidinsm0 STR_b STR_i STR_d STR_i STR_n STR_s STR_m "\0" +#define STRING_bidion0 STR_b STR_i STR_d STR_i STR_o STR_n "\0" +#define STRING_bidipdf0 STR_b STR_i STR_d STR_i STR_p STR_d STR_f "\0" +#define STRING_bidipdi0 STR_b STR_i STR_d STR_i STR_p STR_d STR_i "\0" +#define STRING_bidir0 STR_b STR_i STR_d STR_i STR_r "\0" +#define STRING_bidirle0 STR_b STR_i STR_d STR_i STR_r STR_l STR_e "\0" +#define STRING_bidirli0 STR_b STR_i STR_d STR_i STR_r STR_l STR_i "\0" +#define STRING_bidirlo0 STR_b STR_i STR_d STR_i STR_r STR_l STR_o "\0" +#define STRING_bidis0 STR_b STR_i STR_d STR_i STR_s "\0" +#define STRING_bidiws0 STR_b STR_i STR_d STR_i STR_w STR_s "\0" +#define STRING_bopo0 STR_b STR_o STR_p STR_o "\0" +#define STRING_bopomofo0 STR_b STR_o STR_p STR_o STR_m STR_o STR_f STR_o "\0" +#define STRING_brah0 STR_b STR_r STR_a STR_h "\0" +#define STRING_brahmi0 STR_b STR_r STR_a STR_h STR_m STR_i "\0" +#define STRING_brai0 STR_b STR_r STR_a STR_i "\0" +#define STRING_braille0 STR_b STR_r STR_a STR_i STR_l STR_l STR_e "\0" +#define STRING_bugi0 STR_b STR_u STR_g STR_i "\0" +#define STRING_buginese0 STR_b STR_u STR_g STR_i STR_n STR_e STR_s STR_e "\0" +#define STRING_buhd0 STR_b STR_u STR_h STR_d "\0" +#define STRING_buhid0 STR_b STR_u STR_h STR_i STR_d "\0" +#define STRING_c0 STR_c "\0" +#define STRING_cakm0 STR_c STR_a STR_k STR_m "\0" +#define STRING_canadianaboriginal0 STR_c STR_a STR_n STR_a STR_d STR_i STR_a STR_n STR_a STR_b STR_o STR_r STR_i STR_g STR_i STR_n STR_a STR_l "\0" +#define STRING_cans0 STR_c STR_a STR_n STR_s "\0" +#define STRING_cari0 STR_c STR_a STR_r STR_i "\0" +#define STRING_carian0 STR_c STR_a STR_r STR_i STR_a STR_n "\0" +#define STRING_cased0 STR_c STR_a STR_s STR_e STR_d "\0" +#define STRING_caseignorable0 STR_c STR_a STR_s STR_e STR_i STR_g STR_n STR_o STR_r STR_a STR_b STR_l STR_e "\0" +#define STRING_caucasianalbanian0 STR_c STR_a STR_u STR_c STR_a STR_s STR_i STR_a STR_n STR_a STR_l STR_b STR_a STR_n STR_i STR_a STR_n "\0" +#define STRING_cc0 STR_c STR_c "\0" +#define STRING_cf0 STR_c STR_f "\0" +#define STRING_chakma0 STR_c STR_h STR_a STR_k STR_m STR_a "\0" +#define STRING_cham0 STR_c STR_h STR_a STR_m "\0" +#define STRING_changeswhencasefolded0 STR_c STR_h STR_a STR_n STR_g STR_e STR_s STR_w STR_h STR_e STR_n STR_c STR_a STR_s STR_e STR_f STR_o STR_l STR_d STR_e STR_d "\0" +#define STRING_changeswhencasemapped0 STR_c STR_h STR_a STR_n STR_g STR_e STR_s STR_w STR_h STR_e STR_n STR_c STR_a STR_s STR_e STR_m STR_a STR_p STR_p STR_e STR_d "\0" +#define STRING_changeswhenlowercased0 STR_c STR_h STR_a STR_n STR_g STR_e STR_s STR_w STR_h STR_e STR_n STR_l STR_o STR_w STR_e STR_r STR_c STR_a STR_s STR_e STR_d "\0" +#define STRING_changeswhentitlecased0 STR_c STR_h STR_a STR_n STR_g STR_e STR_s STR_w STR_h STR_e STR_n STR_t STR_i STR_t STR_l STR_e STR_c STR_a STR_s STR_e STR_d "\0" +#define STRING_changeswhenuppercased0 STR_c STR_h STR_a STR_n STR_g STR_e STR_s STR_w STR_h STR_e STR_n STR_u STR_p STR_p STR_e STR_r STR_c STR_a STR_s STR_e STR_d "\0" +#define STRING_cher0 STR_c STR_h STR_e STR_r "\0" +#define STRING_cherokee0 STR_c STR_h STR_e STR_r STR_o STR_k STR_e STR_e "\0" +#define STRING_chorasmian0 STR_c STR_h STR_o STR_r STR_a STR_s STR_m STR_i STR_a STR_n "\0" +#define STRING_chrs0 STR_c STR_h STR_r STR_s "\0" +#define STRING_ci0 STR_c STR_i "\0" +#define STRING_cn0 STR_c STR_n "\0" +#define STRING_co0 STR_c STR_o "\0" +#define STRING_common0 STR_c STR_o STR_m STR_m STR_o STR_n "\0" +#define STRING_copt0 STR_c STR_o STR_p STR_t "\0" +#define STRING_coptic0 STR_c STR_o STR_p STR_t STR_i STR_c "\0" +#define STRING_cpmn0 STR_c STR_p STR_m STR_n "\0" +#define STRING_cprt0 STR_c STR_p STR_r STR_t "\0" +#define STRING_cs0 STR_c STR_s "\0" +#define STRING_cuneiform0 STR_c STR_u STR_n STR_e STR_i STR_f STR_o STR_r STR_m "\0" +#define STRING_cwcf0 STR_c STR_w STR_c STR_f "\0" +#define STRING_cwcm0 STR_c STR_w STR_c STR_m "\0" +#define STRING_cwl0 STR_c STR_w STR_l "\0" +#define STRING_cwt0 STR_c STR_w STR_t "\0" +#define STRING_cwu0 STR_c STR_w STR_u "\0" +#define STRING_cypriot0 STR_c STR_y STR_p STR_r STR_i STR_o STR_t "\0" +#define STRING_cyprominoan0 STR_c STR_y STR_p STR_r STR_o STR_m STR_i STR_n STR_o STR_a STR_n "\0" +#define STRING_cyrillic0 STR_c STR_y STR_r STR_i STR_l STR_l STR_i STR_c "\0" +#define STRING_cyrl0 STR_c STR_y STR_r STR_l "\0" +#define STRING_dash0 STR_d STR_a STR_s STR_h "\0" +#define STRING_defaultignorablecodepoint0 STR_d STR_e STR_f STR_a STR_u STR_l STR_t STR_i STR_g STR_n STR_o STR_r STR_a STR_b STR_l STR_e STR_c STR_o STR_d STR_e STR_p STR_o STR_i STR_n STR_t "\0" +#define STRING_dep0 STR_d STR_e STR_p "\0" +#define STRING_deprecated0 STR_d STR_e STR_p STR_r STR_e STR_c STR_a STR_t STR_e STR_d "\0" +#define STRING_deseret0 STR_d STR_e STR_s STR_e STR_r STR_e STR_t "\0" +#define STRING_deva0 STR_d STR_e STR_v STR_a "\0" +#define STRING_devanagari0 STR_d STR_e STR_v STR_a STR_n STR_a STR_g STR_a STR_r STR_i "\0" +#define STRING_di0 STR_d STR_i "\0" +#define STRING_dia0 STR_d STR_i STR_a "\0" +#define STRING_diacritic0 STR_d STR_i STR_a STR_c STR_r STR_i STR_t STR_i STR_c "\0" +#define STRING_diak0 STR_d STR_i STR_a STR_k "\0" +#define STRING_divesakuru0 STR_d STR_i STR_v STR_e STR_s STR_a STR_k STR_u STR_r STR_u "\0" +#define STRING_dogr0 STR_d STR_o STR_g STR_r "\0" +#define STRING_dogra0 STR_d STR_o STR_g STR_r STR_a "\0" +#define STRING_dsrt0 STR_d STR_s STR_r STR_t "\0" +#define STRING_dupl0 STR_d STR_u STR_p STR_l "\0" +#define STRING_duployan0 STR_d STR_u STR_p STR_l STR_o STR_y STR_a STR_n "\0" +#define STRING_ebase0 STR_e STR_b STR_a STR_s STR_e "\0" +#define STRING_ecomp0 STR_e STR_c STR_o STR_m STR_p "\0" +#define STRING_egyp0 STR_e STR_g STR_y STR_p "\0" +#define STRING_egyptianhieroglyphs0 STR_e STR_g STR_y STR_p STR_t STR_i STR_a STR_n STR_h STR_i STR_e STR_r STR_o STR_g STR_l STR_y STR_p STR_h STR_s "\0" +#define STRING_elba0 STR_e STR_l STR_b STR_a "\0" +#define STRING_elbasan0 STR_e STR_l STR_b STR_a STR_s STR_a STR_n "\0" +#define STRING_elym0 STR_e STR_l STR_y STR_m "\0" +#define STRING_elymaic0 STR_e STR_l STR_y STR_m STR_a STR_i STR_c "\0" +#define STRING_emod0 STR_e STR_m STR_o STR_d "\0" +#define STRING_emoji0 STR_e STR_m STR_o STR_j STR_i "\0" +#define STRING_emojicomponent0 STR_e STR_m STR_o STR_j STR_i STR_c STR_o STR_m STR_p STR_o STR_n STR_e STR_n STR_t "\0" +#define STRING_emojimodifier0 STR_e STR_m STR_o STR_j STR_i STR_m STR_o STR_d STR_i STR_f STR_i STR_e STR_r "\0" +#define STRING_emojimodifierbase0 STR_e STR_m STR_o STR_j STR_i STR_m STR_o STR_d STR_i STR_f STR_i STR_e STR_r STR_b STR_a STR_s STR_e "\0" +#define STRING_emojipresentation0 STR_e STR_m STR_o STR_j STR_i STR_p STR_r STR_e STR_s STR_e STR_n STR_t STR_a STR_t STR_i STR_o STR_n "\0" +#define STRING_epres0 STR_e STR_p STR_r STR_e STR_s "\0" +#define STRING_ethi0 STR_e STR_t STR_h STR_i "\0" +#define STRING_ethiopic0 STR_e STR_t STR_h STR_i STR_o STR_p STR_i STR_c "\0" +#define STRING_ext0 STR_e STR_x STR_t "\0" +#define STRING_extendedpictographic0 STR_e STR_x STR_t STR_e STR_n STR_d STR_e STR_d STR_p STR_i STR_c STR_t STR_o STR_g STR_r STR_a STR_p STR_h STR_i STR_c "\0" +#define STRING_extender0 STR_e STR_x STR_t STR_e STR_n STR_d STR_e STR_r "\0" +#define STRING_extpict0 STR_e STR_x STR_t STR_p STR_i STR_c STR_t "\0" +#define STRING_geor0 STR_g STR_e STR_o STR_r "\0" +#define STRING_georgian0 STR_g STR_e STR_o STR_r STR_g STR_i STR_a STR_n "\0" +#define STRING_glag0 STR_g STR_l STR_a STR_g "\0" +#define STRING_glagolitic0 STR_g STR_l STR_a STR_g STR_o STR_l STR_i STR_t STR_i STR_c "\0" +#define STRING_gong0 STR_g STR_o STR_n STR_g "\0" +#define STRING_gonm0 STR_g STR_o STR_n STR_m "\0" +#define STRING_goth0 STR_g STR_o STR_t STR_h "\0" +#define STRING_gothic0 STR_g STR_o STR_t STR_h STR_i STR_c "\0" +#define STRING_gran0 STR_g STR_r STR_a STR_n "\0" +#define STRING_grantha0 STR_g STR_r STR_a STR_n STR_t STR_h STR_a "\0" +#define STRING_graphemebase0 STR_g STR_r STR_a STR_p STR_h STR_e STR_m STR_e STR_b STR_a STR_s STR_e "\0" +#define STRING_graphemeextend0 STR_g STR_r STR_a STR_p STR_h STR_e STR_m STR_e STR_e STR_x STR_t STR_e STR_n STR_d "\0" +#define STRING_graphemelink0 STR_g STR_r STR_a STR_p STR_h STR_e STR_m STR_e STR_l STR_i STR_n STR_k "\0" +#define STRING_grbase0 STR_g STR_r STR_b STR_a STR_s STR_e "\0" +#define STRING_greek0 STR_g STR_r STR_e STR_e STR_k "\0" +#define STRING_grek0 STR_g STR_r STR_e STR_k "\0" +#define STRING_grext0 STR_g STR_r STR_e STR_x STR_t "\0" +#define STRING_grlink0 STR_g STR_r STR_l STR_i STR_n STR_k "\0" +#define STRING_gujarati0 STR_g STR_u STR_j STR_a STR_r STR_a STR_t STR_i "\0" +#define STRING_gujr0 STR_g STR_u STR_j STR_r "\0" +#define STRING_gunjalagondi0 STR_g STR_u STR_n STR_j STR_a STR_l STR_a STR_g STR_o STR_n STR_d STR_i "\0" +#define STRING_gurmukhi0 STR_g STR_u STR_r STR_m STR_u STR_k STR_h STR_i "\0" +#define STRING_guru0 STR_g STR_u STR_r STR_u "\0" +#define STRING_han0 STR_h STR_a STR_n "\0" +#define STRING_hang0 STR_h STR_a STR_n STR_g "\0" +#define STRING_hangul0 STR_h STR_a STR_n STR_g STR_u STR_l "\0" +#define STRING_hani0 STR_h STR_a STR_n STR_i "\0" +#define STRING_hanifirohingya0 STR_h STR_a STR_n STR_i STR_f STR_i STR_r STR_o STR_h STR_i STR_n STR_g STR_y STR_a "\0" +#define STRING_hano0 STR_h STR_a STR_n STR_o "\0" +#define STRING_hanunoo0 STR_h STR_a STR_n STR_u STR_n STR_o STR_o "\0" +#define STRING_hatr0 STR_h STR_a STR_t STR_r "\0" +#define STRING_hatran0 STR_h STR_a STR_t STR_r STR_a STR_n "\0" +#define STRING_hebr0 STR_h STR_e STR_b STR_r "\0" +#define STRING_hebrew0 STR_h STR_e STR_b STR_r STR_e STR_w "\0" +#define STRING_hex0 STR_h STR_e STR_x "\0" +#define STRING_hexdigit0 STR_h STR_e STR_x STR_d STR_i STR_g STR_i STR_t "\0" +#define STRING_hira0 STR_h STR_i STR_r STR_a "\0" +#define STRING_hiragana0 STR_h STR_i STR_r STR_a STR_g STR_a STR_n STR_a "\0" +#define STRING_hluw0 STR_h STR_l STR_u STR_w "\0" +#define STRING_hmng0 STR_h STR_m STR_n STR_g "\0" +#define STRING_hmnp0 STR_h STR_m STR_n STR_p "\0" +#define STRING_hung0 STR_h STR_u STR_n STR_g "\0" +#define STRING_idc0 STR_i STR_d STR_c "\0" +#define STRING_idcontinue0 STR_i STR_d STR_c STR_o STR_n STR_t STR_i STR_n STR_u STR_e "\0" +#define STRING_ideo0 STR_i STR_d STR_e STR_o "\0" +#define STRING_ideographic0 STR_i STR_d STR_e STR_o STR_g STR_r STR_a STR_p STR_h STR_i STR_c "\0" +#define STRING_ids0 STR_i STR_d STR_s "\0" +#define STRING_idsb0 STR_i STR_d STR_s STR_b "\0" +#define STRING_idsbinaryoperator0 STR_i STR_d STR_s STR_b STR_i STR_n STR_a STR_r STR_y STR_o STR_p STR_e STR_r STR_a STR_t STR_o STR_r "\0" +#define STRING_idst0 STR_i STR_d STR_s STR_t "\0" +#define STRING_idstart0 STR_i STR_d STR_s STR_t STR_a STR_r STR_t "\0" +#define STRING_idstrinaryoperator0 STR_i STR_d STR_s STR_t STR_r STR_i STR_n STR_a STR_r STR_y STR_o STR_p STR_e STR_r STR_a STR_t STR_o STR_r "\0" +#define STRING_imperialaramaic0 STR_i STR_m STR_p STR_e STR_r STR_i STR_a STR_l STR_a STR_r STR_a STR_m STR_a STR_i STR_c "\0" +#define STRING_inherited0 STR_i STR_n STR_h STR_e STR_r STR_i STR_t STR_e STR_d "\0" +#define STRING_inscriptionalpahlavi0 STR_i STR_n STR_s STR_c STR_r STR_i STR_p STR_t STR_i STR_o STR_n STR_a STR_l STR_p STR_a STR_h STR_l STR_a STR_v STR_i "\0" +#define STRING_inscriptionalparthian0 STR_i STR_n STR_s STR_c STR_r STR_i STR_p STR_t STR_i STR_o STR_n STR_a STR_l STR_p STR_a STR_r STR_t STR_h STR_i STR_a STR_n "\0" +#define STRING_ital0 STR_i STR_t STR_a STR_l "\0" +#define STRING_java0 STR_j STR_a STR_v STR_a "\0" +#define STRING_javanese0 STR_j STR_a STR_v STR_a STR_n STR_e STR_s STR_e "\0" +#define STRING_joinc0 STR_j STR_o STR_i STR_n STR_c "\0" +#define STRING_joincontrol0 STR_j STR_o STR_i STR_n STR_c STR_o STR_n STR_t STR_r STR_o STR_l "\0" +#define STRING_kaithi0 STR_k STR_a STR_i STR_t STR_h STR_i "\0" +#define STRING_kali0 STR_k STR_a STR_l STR_i "\0" +#define STRING_kana0 STR_k STR_a STR_n STR_a "\0" +#define STRING_kannada0 STR_k STR_a STR_n STR_n STR_a STR_d STR_a "\0" +#define STRING_katakana0 STR_k STR_a STR_t STR_a STR_k STR_a STR_n STR_a "\0" +#define STRING_kayahli0 STR_k STR_a STR_y STR_a STR_h STR_l STR_i "\0" +#define STRING_khar0 STR_k STR_h STR_a STR_r "\0" +#define STRING_kharoshthi0 STR_k STR_h STR_a STR_r STR_o STR_s STR_h STR_t STR_h STR_i "\0" +#define STRING_khitansmallscript0 STR_k STR_h STR_i STR_t STR_a STR_n STR_s STR_m STR_a STR_l STR_l STR_s STR_c STR_r STR_i STR_p STR_t "\0" +#define STRING_khmer0 STR_k STR_h STR_m STR_e STR_r "\0" +#define STRING_khmr0 STR_k STR_h STR_m STR_r "\0" +#define STRING_khoj0 STR_k STR_h STR_o STR_j "\0" +#define STRING_khojki0 STR_k STR_h STR_o STR_j STR_k STR_i "\0" +#define STRING_khudawadi0 STR_k STR_h STR_u STR_d STR_a STR_w STR_a STR_d STR_i "\0" +#define STRING_kits0 STR_k STR_i STR_t STR_s "\0" +#define STRING_knda0 STR_k STR_n STR_d STR_a "\0" +#define STRING_kthi0 STR_k STR_t STR_h STR_i "\0" +#define STRING_l0 STR_l "\0" +#define STRING_l_AMPERSAND0 STR_l STR_AMPERSAND "\0" +#define STRING_lana0 STR_l STR_a STR_n STR_a "\0" +#define STRING_lao0 STR_l STR_a STR_o "\0" +#define STRING_laoo0 STR_l STR_a STR_o STR_o "\0" +#define STRING_latin0 STR_l STR_a STR_t STR_i STR_n "\0" +#define STRING_latn0 STR_l STR_a STR_t STR_n "\0" +#define STRING_lc0 STR_l STR_c "\0" +#define STRING_lepc0 STR_l STR_e STR_p STR_c "\0" +#define STRING_lepcha0 STR_l STR_e STR_p STR_c STR_h STR_a "\0" +#define STRING_limb0 STR_l STR_i STR_m STR_b "\0" +#define STRING_limbu0 STR_l STR_i STR_m STR_b STR_u "\0" +#define STRING_lina0 STR_l STR_i STR_n STR_a "\0" +#define STRING_linb0 STR_l STR_i STR_n STR_b "\0" +#define STRING_lineara0 STR_l STR_i STR_n STR_e STR_a STR_r STR_a "\0" +#define STRING_linearb0 STR_l STR_i STR_n STR_e STR_a STR_r STR_b "\0" +#define STRING_lisu0 STR_l STR_i STR_s STR_u "\0" +#define STRING_ll0 STR_l STR_l "\0" +#define STRING_lm0 STR_l STR_m "\0" +#define STRING_lo0 STR_l STR_o "\0" +#define STRING_loe0 STR_l STR_o STR_e "\0" +#define STRING_logicalorderexception0 STR_l STR_o STR_g STR_i STR_c STR_a STR_l STR_o STR_r STR_d STR_e STR_r STR_e STR_x STR_c STR_e STR_p STR_t STR_i STR_o STR_n "\0" +#define STRING_lower0 STR_l STR_o STR_w STR_e STR_r "\0" +#define STRING_lowercase0 STR_l STR_o STR_w STR_e STR_r STR_c STR_a STR_s STR_e "\0" +#define STRING_lt0 STR_l STR_t "\0" +#define STRING_lu0 STR_l STR_u "\0" +#define STRING_lyci0 STR_l STR_y STR_c STR_i "\0" +#define STRING_lycian0 STR_l STR_y STR_c STR_i STR_a STR_n "\0" +#define STRING_lydi0 STR_l STR_y STR_d STR_i "\0" +#define STRING_lydian0 STR_l STR_y STR_d STR_i STR_a STR_n "\0" +#define STRING_m0 STR_m "\0" +#define STRING_mahajani0 STR_m STR_a STR_h STR_a STR_j STR_a STR_n STR_i "\0" +#define STRING_mahj0 STR_m STR_a STR_h STR_j "\0" +#define STRING_maka0 STR_m STR_a STR_k STR_a "\0" +#define STRING_makasar0 STR_m STR_a STR_k STR_a STR_s STR_a STR_r "\0" +#define STRING_malayalam0 STR_m STR_a STR_l STR_a STR_y STR_a STR_l STR_a STR_m "\0" +#define STRING_mand0 STR_m STR_a STR_n STR_d "\0" +#define STRING_mandaic0 STR_m STR_a STR_n STR_d STR_a STR_i STR_c "\0" +#define STRING_mani0 STR_m STR_a STR_n STR_i "\0" +#define STRING_manichaean0 STR_m STR_a STR_n STR_i STR_c STR_h STR_a STR_e STR_a STR_n "\0" +#define STRING_marc0 STR_m STR_a STR_r STR_c "\0" +#define STRING_marchen0 STR_m STR_a STR_r STR_c STR_h STR_e STR_n "\0" +#define STRING_masaramgondi0 STR_m STR_a STR_s STR_a STR_r STR_a STR_m STR_g STR_o STR_n STR_d STR_i "\0" +#define STRING_math0 STR_m STR_a STR_t STR_h "\0" +#define STRING_mc0 STR_m STR_c "\0" +#define STRING_me0 STR_m STR_e "\0" +#define STRING_medefaidrin0 STR_m STR_e STR_d STR_e STR_f STR_a STR_i STR_d STR_r STR_i STR_n "\0" +#define STRING_medf0 STR_m STR_e STR_d STR_f "\0" +#define STRING_meeteimayek0 STR_m STR_e STR_e STR_t STR_e STR_i STR_m STR_a STR_y STR_e STR_k "\0" +#define STRING_mend0 STR_m STR_e STR_n STR_d "\0" +#define STRING_mendekikakui0 STR_m STR_e STR_n STR_d STR_e STR_k STR_i STR_k STR_a STR_k STR_u STR_i "\0" +#define STRING_merc0 STR_m STR_e STR_r STR_c "\0" +#define STRING_mero0 STR_m STR_e STR_r STR_o "\0" +#define STRING_meroiticcursive0 STR_m STR_e STR_r STR_o STR_i STR_t STR_i STR_c STR_c STR_u STR_r STR_s STR_i STR_v STR_e "\0" +#define STRING_meroitichieroglyphs0 STR_m STR_e STR_r STR_o STR_i STR_t STR_i STR_c STR_h STR_i STR_e STR_r STR_o STR_g STR_l STR_y STR_p STR_h STR_s "\0" +#define STRING_miao0 STR_m STR_i STR_a STR_o "\0" +#define STRING_mlym0 STR_m STR_l STR_y STR_m "\0" +#define STRING_mn0 STR_m STR_n "\0" +#define STRING_modi0 STR_m STR_o STR_d STR_i "\0" +#define STRING_mong0 STR_m STR_o STR_n STR_g "\0" +#define STRING_mongolian0 STR_m STR_o STR_n STR_g STR_o STR_l STR_i STR_a STR_n "\0" +#define STRING_mro0 STR_m STR_r STR_o "\0" +#define STRING_mroo0 STR_m STR_r STR_o STR_o "\0" +#define STRING_mtei0 STR_m STR_t STR_e STR_i "\0" +#define STRING_mult0 STR_m STR_u STR_l STR_t "\0" +#define STRING_multani0 STR_m STR_u STR_l STR_t STR_a STR_n STR_i "\0" +#define STRING_myanmar0 STR_m STR_y STR_a STR_n STR_m STR_a STR_r "\0" +#define STRING_mymr0 STR_m STR_y STR_m STR_r "\0" +#define STRING_n0 STR_n "\0" +#define STRING_nabataean0 STR_n STR_a STR_b STR_a STR_t STR_a STR_e STR_a STR_n "\0" +#define STRING_nand0 STR_n STR_a STR_n STR_d "\0" +#define STRING_nandinagari0 STR_n STR_a STR_n STR_d STR_i STR_n STR_a STR_g STR_a STR_r STR_i "\0" +#define STRING_narb0 STR_n STR_a STR_r STR_b "\0" +#define STRING_nbat0 STR_n STR_b STR_a STR_t "\0" +#define STRING_nchar0 STR_n STR_c STR_h STR_a STR_r "\0" +#define STRING_nd0 STR_n STR_d "\0" +#define STRING_newa0 STR_n STR_e STR_w STR_a "\0" +#define STRING_newtailue0 STR_n STR_e STR_w STR_t STR_a STR_i STR_l STR_u STR_e "\0" +#define STRING_nko0 STR_n STR_k STR_o "\0" +#define STRING_nkoo0 STR_n STR_k STR_o STR_o "\0" +#define STRING_nl0 STR_n STR_l "\0" +#define STRING_no0 STR_n STR_o "\0" +#define STRING_noncharactercodepoint0 STR_n STR_o STR_n STR_c STR_h STR_a STR_r STR_a STR_c STR_t STR_e STR_r STR_c STR_o STR_d STR_e STR_p STR_o STR_i STR_n STR_t "\0" +#define STRING_nshu0 STR_n STR_s STR_h STR_u "\0" +#define STRING_nushu0 STR_n STR_u STR_s STR_h STR_u "\0" +#define STRING_nyiakengpuachuehmong0 STR_n STR_y STR_i STR_a STR_k STR_e STR_n STR_g STR_p STR_u STR_a STR_c STR_h STR_u STR_e STR_h STR_m STR_o STR_n STR_g "\0" +#define STRING_ogam0 STR_o STR_g STR_a STR_m "\0" +#define STRING_ogham0 STR_o STR_g STR_h STR_a STR_m "\0" +#define STRING_olchiki0 STR_o STR_l STR_c STR_h STR_i STR_k STR_i "\0" +#define STRING_olck0 STR_o STR_l STR_c STR_k "\0" +#define STRING_oldhungarian0 STR_o STR_l STR_d STR_h STR_u STR_n STR_g STR_a STR_r STR_i STR_a STR_n "\0" +#define STRING_olditalic0 STR_o STR_l STR_d STR_i STR_t STR_a STR_l STR_i STR_c "\0" +#define STRING_oldnortharabian0 STR_o STR_l STR_d STR_n STR_o STR_r STR_t STR_h STR_a STR_r STR_a STR_b STR_i STR_a STR_n "\0" +#define STRING_oldpermic0 STR_o STR_l STR_d STR_p STR_e STR_r STR_m STR_i STR_c "\0" +#define STRING_oldpersian0 STR_o STR_l STR_d STR_p STR_e STR_r STR_s STR_i STR_a STR_n "\0" +#define STRING_oldsogdian0 STR_o STR_l STR_d STR_s STR_o STR_g STR_d STR_i STR_a STR_n "\0" +#define STRING_oldsoutharabian0 STR_o STR_l STR_d STR_s STR_o STR_u STR_t STR_h STR_a STR_r STR_a STR_b STR_i STR_a STR_n "\0" +#define STRING_oldturkic0 STR_o STR_l STR_d STR_t STR_u STR_r STR_k STR_i STR_c "\0" +#define STRING_olduyghur0 STR_o STR_l STR_d STR_u STR_y STR_g STR_h STR_u STR_r "\0" +#define STRING_oriya0 STR_o STR_r STR_i STR_y STR_a "\0" +#define STRING_orkh0 STR_o STR_r STR_k STR_h "\0" +#define STRING_orya0 STR_o STR_r STR_y STR_a "\0" +#define STRING_osage0 STR_o STR_s STR_a STR_g STR_e "\0" +#define STRING_osge0 STR_o STR_s STR_g STR_e "\0" +#define STRING_osma0 STR_o STR_s STR_m STR_a "\0" +#define STRING_osmanya0 STR_o STR_s STR_m STR_a STR_n STR_y STR_a "\0" +#define STRING_ougr0 STR_o STR_u STR_g STR_r "\0" +#define STRING_p0 STR_p "\0" +#define STRING_pahawhhmong0 STR_p STR_a STR_h STR_a STR_w STR_h STR_h STR_m STR_o STR_n STR_g "\0" +#define STRING_palm0 STR_p STR_a STR_l STR_m "\0" +#define STRING_palmyrene0 STR_p STR_a STR_l STR_m STR_y STR_r STR_e STR_n STR_e "\0" +#define STRING_patsyn0 STR_p STR_a STR_t STR_s STR_y STR_n "\0" +#define STRING_patternsyntax0 STR_p STR_a STR_t STR_t STR_e STR_r STR_n STR_s STR_y STR_n STR_t STR_a STR_x "\0" +#define STRING_patternwhitespace0 STR_p STR_a STR_t STR_t STR_e STR_r STR_n STR_w STR_h STR_i STR_t STR_e STR_s STR_p STR_a STR_c STR_e "\0" +#define STRING_patws0 STR_p STR_a STR_t STR_w STR_s "\0" +#define STRING_pauc0 STR_p STR_a STR_u STR_c "\0" +#define STRING_paucinhau0 STR_p STR_a STR_u STR_c STR_i STR_n STR_h STR_a STR_u "\0" +#define STRING_pc0 STR_p STR_c "\0" +#define STRING_pcm0 STR_p STR_c STR_m "\0" +#define STRING_pd0 STR_p STR_d "\0" +#define STRING_pe0 STR_p STR_e "\0" +#define STRING_perm0 STR_p STR_e STR_r STR_m "\0" +#define STRING_pf0 STR_p STR_f "\0" +#define STRING_phag0 STR_p STR_h STR_a STR_g "\0" +#define STRING_phagspa0 STR_p STR_h STR_a STR_g STR_s STR_p STR_a "\0" +#define STRING_phli0 STR_p STR_h STR_l STR_i "\0" +#define STRING_phlp0 STR_p STR_h STR_l STR_p "\0" +#define STRING_phnx0 STR_p STR_h STR_n STR_x "\0" +#define STRING_phoenician0 STR_p STR_h STR_o STR_e STR_n STR_i STR_c STR_i STR_a STR_n "\0" +#define STRING_pi0 STR_p STR_i "\0" +#define STRING_plrd0 STR_p STR_l STR_r STR_d "\0" +#define STRING_po0 STR_p STR_o "\0" +#define STRING_prependedconcatenationmark0 STR_p STR_r STR_e STR_p STR_e STR_n STR_d STR_e STR_d STR_c STR_o STR_n STR_c STR_a STR_t STR_e STR_n STR_a STR_t STR_i STR_o STR_n STR_m STR_a STR_r STR_k "\0" +#define STRING_prti0 STR_p STR_r STR_t STR_i "\0" +#define STRING_ps0 STR_p STR_s "\0" +#define STRING_psalterpahlavi0 STR_p STR_s STR_a STR_l STR_t STR_e STR_r STR_p STR_a STR_h STR_l STR_a STR_v STR_i "\0" +#define STRING_qaac0 STR_q STR_a STR_a STR_c "\0" +#define STRING_qaai0 STR_q STR_a STR_a STR_i "\0" +#define STRING_qmark0 STR_q STR_m STR_a STR_r STR_k "\0" +#define STRING_quotationmark0 STR_q STR_u STR_o STR_t STR_a STR_t STR_i STR_o STR_n STR_m STR_a STR_r STR_k "\0" +#define STRING_radical0 STR_r STR_a STR_d STR_i STR_c STR_a STR_l "\0" +#define STRING_regionalindicator0 STR_r STR_e STR_g STR_i STR_o STR_n STR_a STR_l STR_i STR_n STR_d STR_i STR_c STR_a STR_t STR_o STR_r "\0" +#define STRING_rejang0 STR_r STR_e STR_j STR_a STR_n STR_g "\0" +#define STRING_ri0 STR_r STR_i "\0" +#define STRING_rjng0 STR_r STR_j STR_n STR_g "\0" +#define STRING_rohg0 STR_r STR_o STR_h STR_g "\0" +#define STRING_runic0 STR_r STR_u STR_n STR_i STR_c "\0" +#define STRING_runr0 STR_r STR_u STR_n STR_r "\0" +#define STRING_s0 STR_s "\0" +#define STRING_samaritan0 STR_s STR_a STR_m STR_a STR_r STR_i STR_t STR_a STR_n "\0" +#define STRING_samr0 STR_s STR_a STR_m STR_r "\0" +#define STRING_sarb0 STR_s STR_a STR_r STR_b "\0" +#define STRING_saur0 STR_s STR_a STR_u STR_r "\0" +#define STRING_saurashtra0 STR_s STR_a STR_u STR_r STR_a STR_s STR_h STR_t STR_r STR_a "\0" +#define STRING_sc0 STR_s STR_c "\0" +#define STRING_sd0 STR_s STR_d "\0" +#define STRING_sentenceterminal0 STR_s STR_e STR_n STR_t STR_e STR_n STR_c STR_e STR_t STR_e STR_r STR_m STR_i STR_n STR_a STR_l "\0" +#define STRING_sgnw0 STR_s STR_g STR_n STR_w "\0" +#define STRING_sharada0 STR_s STR_h STR_a STR_r STR_a STR_d STR_a "\0" +#define STRING_shavian0 STR_s STR_h STR_a STR_v STR_i STR_a STR_n "\0" +#define STRING_shaw0 STR_s STR_h STR_a STR_w "\0" +#define STRING_shrd0 STR_s STR_h STR_r STR_d "\0" +#define STRING_sidd0 STR_s STR_i STR_d STR_d "\0" +#define STRING_siddham0 STR_s STR_i STR_d STR_d STR_h STR_a STR_m "\0" +#define STRING_signwriting0 STR_s STR_i STR_g STR_n STR_w STR_r STR_i STR_t STR_i STR_n STR_g "\0" +#define STRING_sind0 STR_s STR_i STR_n STR_d "\0" +#define STRING_sinh0 STR_s STR_i STR_n STR_h "\0" +#define STRING_sinhala0 STR_s STR_i STR_n STR_h STR_a STR_l STR_a "\0" +#define STRING_sk0 STR_s STR_k "\0" +#define STRING_sm0 STR_s STR_m "\0" +#define STRING_so0 STR_s STR_o "\0" +#define STRING_softdotted0 STR_s STR_o STR_f STR_t STR_d STR_o STR_t STR_t STR_e STR_d "\0" +#define STRING_sogd0 STR_s STR_o STR_g STR_d "\0" +#define STRING_sogdian0 STR_s STR_o STR_g STR_d STR_i STR_a STR_n "\0" +#define STRING_sogo0 STR_s STR_o STR_g STR_o "\0" +#define STRING_sora0 STR_s STR_o STR_r STR_a "\0" +#define STRING_sorasompeng0 STR_s STR_o STR_r STR_a STR_s STR_o STR_m STR_p STR_e STR_n STR_g "\0" +#define STRING_soyo0 STR_s STR_o STR_y STR_o "\0" +#define STRING_soyombo0 STR_s STR_o STR_y STR_o STR_m STR_b STR_o "\0" +#define STRING_space0 STR_s STR_p STR_a STR_c STR_e "\0" +#define STRING_sterm0 STR_s STR_t STR_e STR_r STR_m "\0" +#define STRING_sund0 STR_s STR_u STR_n STR_d "\0" +#define STRING_sundanese0 STR_s STR_u STR_n STR_d STR_a STR_n STR_e STR_s STR_e "\0" +#define STRING_sylo0 STR_s STR_y STR_l STR_o "\0" +#define STRING_sylotinagri0 STR_s STR_y STR_l STR_o STR_t STR_i STR_n STR_a STR_g STR_r STR_i "\0" +#define STRING_syrc0 STR_s STR_y STR_r STR_c "\0" +#define STRING_syriac0 STR_s STR_y STR_r STR_i STR_a STR_c "\0" +#define STRING_tagalog0 STR_t STR_a STR_g STR_a STR_l STR_o STR_g "\0" +#define STRING_tagb0 STR_t STR_a STR_g STR_b "\0" +#define STRING_tagbanwa0 STR_t STR_a STR_g STR_b STR_a STR_n STR_w STR_a "\0" +#define STRING_taile0 STR_t STR_a STR_i STR_l STR_e "\0" +#define STRING_taitham0 STR_t STR_a STR_i STR_t STR_h STR_a STR_m "\0" +#define STRING_taiviet0 STR_t STR_a STR_i STR_v STR_i STR_e STR_t "\0" +#define STRING_takr0 STR_t STR_a STR_k STR_r "\0" +#define STRING_takri0 STR_t STR_a STR_k STR_r STR_i "\0" +#define STRING_tale0 STR_t STR_a STR_l STR_e "\0" +#define STRING_talu0 STR_t STR_a STR_l STR_u "\0" +#define STRING_tamil0 STR_t STR_a STR_m STR_i STR_l "\0" +#define STRING_taml0 STR_t STR_a STR_m STR_l "\0" +#define STRING_tang0 STR_t STR_a STR_n STR_g "\0" +#define STRING_tangsa0 STR_t STR_a STR_n STR_g STR_s STR_a "\0" +#define STRING_tangut0 STR_t STR_a STR_n STR_g STR_u STR_t "\0" +#define STRING_tavt0 STR_t STR_a STR_v STR_t "\0" +#define STRING_telu0 STR_t STR_e STR_l STR_u "\0" +#define STRING_telugu0 STR_t STR_e STR_l STR_u STR_g STR_u "\0" +#define STRING_term0 STR_t STR_e STR_r STR_m "\0" +#define STRING_terminalpunctuation0 STR_t STR_e STR_r STR_m STR_i STR_n STR_a STR_l STR_p STR_u STR_n STR_c STR_t STR_u STR_a STR_t STR_i STR_o STR_n "\0" +#define STRING_tfng0 STR_t STR_f STR_n STR_g "\0" +#define STRING_tglg0 STR_t STR_g STR_l STR_g "\0" +#define STRING_thaa0 STR_t STR_h STR_a STR_a "\0" +#define STRING_thaana0 STR_t STR_h STR_a STR_a STR_n STR_a "\0" +#define STRING_thai0 STR_t STR_h STR_a STR_i "\0" +#define STRING_tibetan0 STR_t STR_i STR_b STR_e STR_t STR_a STR_n "\0" +#define STRING_tibt0 STR_t STR_i STR_b STR_t "\0" +#define STRING_tifinagh0 STR_t STR_i STR_f STR_i STR_n STR_a STR_g STR_h "\0" +#define STRING_tirh0 STR_t STR_i STR_r STR_h "\0" +#define STRING_tirhuta0 STR_t STR_i STR_r STR_h STR_u STR_t STR_a "\0" +#define STRING_tnsa0 STR_t STR_n STR_s STR_a "\0" +#define STRING_toto0 STR_t STR_o STR_t STR_o "\0" +#define STRING_ugar0 STR_u STR_g STR_a STR_r "\0" +#define STRING_ugaritic0 STR_u STR_g STR_a STR_r STR_i STR_t STR_i STR_c "\0" +#define STRING_uideo0 STR_u STR_i STR_d STR_e STR_o "\0" +#define STRING_unifiedideograph0 STR_u STR_n STR_i STR_f STR_i STR_e STR_d STR_i STR_d STR_e STR_o STR_g STR_r STR_a STR_p STR_h "\0" +#define STRING_unknown0 STR_u STR_n STR_k STR_n STR_o STR_w STR_n "\0" +#define STRING_upper0 STR_u STR_p STR_p STR_e STR_r "\0" +#define STRING_uppercase0 STR_u STR_p STR_p STR_e STR_r STR_c STR_a STR_s STR_e "\0" +#define STRING_vai0 STR_v STR_a STR_i "\0" +#define STRING_vaii0 STR_v STR_a STR_i STR_i "\0" +#define STRING_variationselector0 STR_v STR_a STR_r STR_i STR_a STR_t STR_i STR_o STR_n STR_s STR_e STR_l STR_e STR_c STR_t STR_o STR_r "\0" +#define STRING_vith0 STR_v STR_i STR_t STR_h "\0" +#define STRING_vithkuqi0 STR_v STR_i STR_t STR_h STR_k STR_u STR_q STR_i "\0" +#define STRING_vs0 STR_v STR_s "\0" +#define STRING_wancho0 STR_w STR_a STR_n STR_c STR_h STR_o "\0" +#define STRING_wara0 STR_w STR_a STR_r STR_a "\0" +#define STRING_warangciti0 STR_w STR_a STR_r STR_a STR_n STR_g STR_c STR_i STR_t STR_i "\0" +#define STRING_wcho0 STR_w STR_c STR_h STR_o "\0" +#define STRING_whitespace0 STR_w STR_h STR_i STR_t STR_e STR_s STR_p STR_a STR_c STR_e "\0" +#define STRING_wspace0 STR_w STR_s STR_p STR_a STR_c STR_e "\0" +#define STRING_xan0 STR_x STR_a STR_n "\0" +#define STRING_xidc0 STR_x STR_i STR_d STR_c "\0" +#define STRING_xidcontinue0 STR_x STR_i STR_d STR_c STR_o STR_n STR_t STR_i STR_n STR_u STR_e "\0" +#define STRING_xids0 STR_x STR_i STR_d STR_s "\0" +#define STRING_xidstart0 STR_x STR_i STR_d STR_s STR_t STR_a STR_r STR_t "\0" +#define STRING_xpeo0 STR_x STR_p STR_e STR_o "\0" +#define STRING_xps0 STR_x STR_p STR_s "\0" +#define STRING_xsp0 STR_x STR_s STR_p "\0" +#define STRING_xsux0 STR_x STR_s STR_u STR_x "\0" +#define STRING_xuc0 STR_x STR_u STR_c "\0" +#define STRING_xwd0 STR_x STR_w STR_d "\0" +#define STRING_yezi0 STR_y STR_e STR_z STR_i "\0" +#define STRING_yezidi0 STR_y STR_e STR_z STR_i STR_d STR_i "\0" +#define STRING_yi0 STR_y STR_i "\0" +#define STRING_yiii0 STR_y STR_i STR_i STR_i "\0" +#define STRING_z0 STR_z "\0" +#define STRING_zanabazarsquare0 STR_z STR_a STR_n STR_a STR_b STR_a STR_z STR_a STR_r STR_s STR_q STR_u STR_a STR_r STR_e "\0" +#define STRING_zanb0 STR_z STR_a STR_n STR_b "\0" +#define STRING_zinh0 STR_z STR_i STR_n STR_h "\0" +#define STRING_zl0 STR_z STR_l "\0" +#define STRING_zp0 STR_z STR_p "\0" +#define STRING_zs0 STR_z STR_s "\0" +#define STRING_zyyy0 STR_z STR_y STR_y STR_y "\0" +#define STRING_zzzz0 STR_z STR_z STR_z STR_z "\0" + +const char PRIV(utt_names)[] = + STRING_adlam0 + STRING_adlm0 + STRING_aghb0 + STRING_ahex0 + STRING_ahom0 + STRING_alpha0 + STRING_alphabetic0 + STRING_anatolianhieroglyphs0 + STRING_any0 + STRING_arab0 + STRING_arabic0 + STRING_armenian0 + STRING_armi0 + STRING_armn0 + STRING_ascii0 + STRING_asciihexdigit0 + STRING_avestan0 + STRING_avst0 + STRING_bali0 + STRING_balinese0 + STRING_bamu0 + STRING_bamum0 + STRING_bass0 + STRING_bassavah0 + STRING_batak0 + STRING_batk0 + STRING_beng0 + STRING_bengali0 + STRING_bhaiksuki0 + STRING_bhks0 + STRING_bidial0 + STRING_bidian0 + STRING_bidib0 + STRING_bidibn0 + STRING_bidic0 + STRING_bidicontrol0 + STRING_bidics0 + STRING_bidien0 + STRING_bidies0 + STRING_bidiet0 + STRING_bidifsi0 + STRING_bidil0 + STRING_bidilre0 + STRING_bidilri0 + STRING_bidilro0 + STRING_bidim0 + STRING_bidimirrored0 + STRING_bidinsm0 + STRING_bidion0 + STRING_bidipdf0 + STRING_bidipdi0 + STRING_bidir0 + STRING_bidirle0 + STRING_bidirli0 + STRING_bidirlo0 + STRING_bidis0 + STRING_bidiws0 + STRING_bopo0 + STRING_bopomofo0 + STRING_brah0 + STRING_brahmi0 + STRING_brai0 + STRING_braille0 + STRING_bugi0 + STRING_buginese0 + STRING_buhd0 + STRING_buhid0 + STRING_c0 + STRING_cakm0 + STRING_canadianaboriginal0 + STRING_cans0 + STRING_cari0 + STRING_carian0 + STRING_cased0 + STRING_caseignorable0 + STRING_caucasianalbanian0 + STRING_cc0 + STRING_cf0 + STRING_chakma0 + STRING_cham0 + STRING_changeswhencasefolded0 + STRING_changeswhencasemapped0 + STRING_changeswhenlowercased0 + STRING_changeswhentitlecased0 + STRING_changeswhenuppercased0 + STRING_cher0 + STRING_cherokee0 + STRING_chorasmian0 + STRING_chrs0 + STRING_ci0 + STRING_cn0 + STRING_co0 + STRING_common0 + STRING_copt0 + STRING_coptic0 + STRING_cpmn0 + STRING_cprt0 + STRING_cs0 + STRING_cuneiform0 + STRING_cwcf0 + STRING_cwcm0 + STRING_cwl0 + STRING_cwt0 + STRING_cwu0 + STRING_cypriot0 + STRING_cyprominoan0 + STRING_cyrillic0 + STRING_cyrl0 + STRING_dash0 + STRING_defaultignorablecodepoint0 + STRING_dep0 + STRING_deprecated0 + STRING_deseret0 + STRING_deva0 + STRING_devanagari0 + STRING_di0 + STRING_dia0 + STRING_diacritic0 + STRING_diak0 + STRING_divesakuru0 + STRING_dogr0 + STRING_dogra0 + STRING_dsrt0 + STRING_dupl0 + STRING_duployan0 + STRING_ebase0 + STRING_ecomp0 + STRING_egyp0 + STRING_egyptianhieroglyphs0 + STRING_elba0 + STRING_elbasan0 + STRING_elym0 + STRING_elymaic0 + STRING_emod0 + STRING_emoji0 + STRING_emojicomponent0 + STRING_emojimodifier0 + STRING_emojimodifierbase0 + STRING_emojipresentation0 + STRING_epres0 + STRING_ethi0 + STRING_ethiopic0 + STRING_ext0 + STRING_extendedpictographic0 + STRING_extender0 + STRING_extpict0 + STRING_geor0 + STRING_georgian0 + STRING_glag0 + STRING_glagolitic0 + STRING_gong0 + STRING_gonm0 + STRING_goth0 + STRING_gothic0 + STRING_gran0 + STRING_grantha0 + STRING_graphemebase0 + STRING_graphemeextend0 + STRING_graphemelink0 + STRING_grbase0 + STRING_greek0 + STRING_grek0 + STRING_grext0 + STRING_grlink0 + STRING_gujarati0 + STRING_gujr0 + STRING_gunjalagondi0 + STRING_gurmukhi0 + STRING_guru0 + STRING_han0 + STRING_hang0 + STRING_hangul0 + STRING_hani0 + STRING_hanifirohingya0 + STRING_hano0 + STRING_hanunoo0 + STRING_hatr0 + STRING_hatran0 + STRING_hebr0 + STRING_hebrew0 + STRING_hex0 + STRING_hexdigit0 + STRING_hira0 + STRING_hiragana0 + STRING_hluw0 + STRING_hmng0 + STRING_hmnp0 + STRING_hung0 + STRING_idc0 + STRING_idcontinue0 + STRING_ideo0 + STRING_ideographic0 + STRING_ids0 + STRING_idsb0 + STRING_idsbinaryoperator0 + STRING_idst0 + STRING_idstart0 + STRING_idstrinaryoperator0 + STRING_imperialaramaic0 + STRING_inherited0 + STRING_inscriptionalpahlavi0 + STRING_inscriptionalparthian0 + STRING_ital0 + STRING_java0 + STRING_javanese0 + STRING_joinc0 + STRING_joincontrol0 + STRING_kaithi0 + STRING_kali0 + STRING_kana0 + STRING_kannada0 + STRING_katakana0 + STRING_kayahli0 + STRING_khar0 + STRING_kharoshthi0 + STRING_khitansmallscript0 + STRING_khmer0 + STRING_khmr0 + STRING_khoj0 + STRING_khojki0 + STRING_khudawadi0 + STRING_kits0 + STRING_knda0 + STRING_kthi0 + STRING_l0 + STRING_l_AMPERSAND0 + STRING_lana0 + STRING_lao0 + STRING_laoo0 + STRING_latin0 + STRING_latn0 + STRING_lc0 + STRING_lepc0 + STRING_lepcha0 + STRING_limb0 + STRING_limbu0 + STRING_lina0 + STRING_linb0 + STRING_lineara0 + STRING_linearb0 + STRING_lisu0 + STRING_ll0 + STRING_lm0 + STRING_lo0 + STRING_loe0 + STRING_logicalorderexception0 + STRING_lower0 + STRING_lowercase0 + STRING_lt0 + STRING_lu0 + STRING_lyci0 + STRING_lycian0 + STRING_lydi0 + STRING_lydian0 + STRING_m0 + STRING_mahajani0 + STRING_mahj0 + STRING_maka0 + STRING_makasar0 + STRING_malayalam0 + STRING_mand0 + STRING_mandaic0 + STRING_mani0 + STRING_manichaean0 + STRING_marc0 + STRING_marchen0 + STRING_masaramgondi0 + STRING_math0 + STRING_mc0 + STRING_me0 + STRING_medefaidrin0 + STRING_medf0 + STRING_meeteimayek0 + STRING_mend0 + STRING_mendekikakui0 + STRING_merc0 + STRING_mero0 + STRING_meroiticcursive0 + STRING_meroitichieroglyphs0 + STRING_miao0 + STRING_mlym0 + STRING_mn0 + STRING_modi0 + STRING_mong0 + STRING_mongolian0 + STRING_mro0 + STRING_mroo0 + STRING_mtei0 + STRING_mult0 + STRING_multani0 + STRING_myanmar0 + STRING_mymr0 + STRING_n0 + STRING_nabataean0 + STRING_nand0 + STRING_nandinagari0 + STRING_narb0 + STRING_nbat0 + STRING_nchar0 + STRING_nd0 + STRING_newa0 + STRING_newtailue0 + STRING_nko0 + STRING_nkoo0 + STRING_nl0 + STRING_no0 + STRING_noncharactercodepoint0 + STRING_nshu0 + STRING_nushu0 + STRING_nyiakengpuachuehmong0 + STRING_ogam0 + STRING_ogham0 + STRING_olchiki0 + STRING_olck0 + STRING_oldhungarian0 + STRING_olditalic0 + STRING_oldnortharabian0 + STRING_oldpermic0 + STRING_oldpersian0 + STRING_oldsogdian0 + STRING_oldsoutharabian0 + STRING_oldturkic0 + STRING_olduyghur0 + STRING_oriya0 + STRING_orkh0 + STRING_orya0 + STRING_osage0 + STRING_osge0 + STRING_osma0 + STRING_osmanya0 + STRING_ougr0 + STRING_p0 + STRING_pahawhhmong0 + STRING_palm0 + STRING_palmyrene0 + STRING_patsyn0 + STRING_patternsyntax0 + STRING_patternwhitespace0 + STRING_patws0 + STRING_pauc0 + STRING_paucinhau0 + STRING_pc0 + STRING_pcm0 + STRING_pd0 + STRING_pe0 + STRING_perm0 + STRING_pf0 + STRING_phag0 + STRING_phagspa0 + STRING_phli0 + STRING_phlp0 + STRING_phnx0 + STRING_phoenician0 + STRING_pi0 + STRING_plrd0 + STRING_po0 + STRING_prependedconcatenationmark0 + STRING_prti0 + STRING_ps0 + STRING_psalterpahlavi0 + STRING_qaac0 + STRING_qaai0 + STRING_qmark0 + STRING_quotationmark0 + STRING_radical0 + STRING_regionalindicator0 + STRING_rejang0 + STRING_ri0 + STRING_rjng0 + STRING_rohg0 + STRING_runic0 + STRING_runr0 + STRING_s0 + STRING_samaritan0 + STRING_samr0 + STRING_sarb0 + STRING_saur0 + STRING_saurashtra0 + STRING_sc0 + STRING_sd0 + STRING_sentenceterminal0 + STRING_sgnw0 + STRING_sharada0 + STRING_shavian0 + STRING_shaw0 + STRING_shrd0 + STRING_sidd0 + STRING_siddham0 + STRING_signwriting0 + STRING_sind0 + STRING_sinh0 + STRING_sinhala0 + STRING_sk0 + STRING_sm0 + STRING_so0 + STRING_softdotted0 + STRING_sogd0 + STRING_sogdian0 + STRING_sogo0 + STRING_sora0 + STRING_sorasompeng0 + STRING_soyo0 + STRING_soyombo0 + STRING_space0 + STRING_sterm0 + STRING_sund0 + STRING_sundanese0 + STRING_sylo0 + STRING_sylotinagri0 + STRING_syrc0 + STRING_syriac0 + STRING_tagalog0 + STRING_tagb0 + STRING_tagbanwa0 + STRING_taile0 + STRING_taitham0 + STRING_taiviet0 + STRING_takr0 + STRING_takri0 + STRING_tale0 + STRING_talu0 + STRING_tamil0 + STRING_taml0 + STRING_tang0 + STRING_tangsa0 + STRING_tangut0 + STRING_tavt0 + STRING_telu0 + STRING_telugu0 + STRING_term0 + STRING_terminalpunctuation0 + STRING_tfng0 + STRING_tglg0 + STRING_thaa0 + STRING_thaana0 + STRING_thai0 + STRING_tibetan0 + STRING_tibt0 + STRING_tifinagh0 + STRING_tirh0 + STRING_tirhuta0 + STRING_tnsa0 + STRING_toto0 + STRING_ugar0 + STRING_ugaritic0 + STRING_uideo0 + STRING_unifiedideograph0 + STRING_unknown0 + STRING_upper0 + STRING_uppercase0 + STRING_vai0 + STRING_vaii0 + STRING_variationselector0 + STRING_vith0 + STRING_vithkuqi0 + STRING_vs0 + STRING_wancho0 + STRING_wara0 + STRING_warangciti0 + STRING_wcho0 + STRING_whitespace0 + STRING_wspace0 + STRING_xan0 + STRING_xidc0 + STRING_xidcontinue0 + STRING_xids0 + STRING_xidstart0 + STRING_xpeo0 + STRING_xps0 + STRING_xsp0 + STRING_xsux0 + STRING_xuc0 + STRING_xwd0 + STRING_yezi0 + STRING_yezidi0 + STRING_yi0 + STRING_yiii0 + STRING_z0 + STRING_zanabazarsquare0 + STRING_zanb0 + STRING_zinh0 + STRING_zl0 + STRING_zp0 + STRING_zs0 + STRING_zyyy0 + STRING_zzzz0; + +const ucp_type_table PRIV(utt)[] = { + { 0, PT_SCX, ucp_Adlam }, + { 6, PT_SCX, ucp_Adlam }, + { 11, PT_SC, ucp_Caucasian_Albanian }, + { 16, PT_BOOL, ucp_ASCII_Hex_Digit }, + { 21, PT_SC, ucp_Ahom }, + { 26, PT_BOOL, ucp_Alphabetic }, + { 32, PT_BOOL, ucp_Alphabetic }, + { 43, PT_SC, ucp_Anatolian_Hieroglyphs }, + { 64, PT_ANY, 0 }, + { 68, PT_SCX, ucp_Arabic }, + { 73, PT_SCX, ucp_Arabic }, + { 80, PT_SC, ucp_Armenian }, + { 89, PT_SC, ucp_Imperial_Aramaic }, + { 94, PT_SC, ucp_Armenian }, + { 99, PT_BOOL, ucp_ASCII }, + { 105, PT_BOOL, ucp_ASCII_Hex_Digit }, + { 119, PT_SC, ucp_Avestan }, + { 127, PT_SC, ucp_Avestan }, + { 132, PT_SC, ucp_Balinese }, + { 137, PT_SC, ucp_Balinese }, + { 146, PT_SC, ucp_Bamum }, + { 151, PT_SC, ucp_Bamum }, + { 157, PT_SC, ucp_Bassa_Vah }, + { 162, PT_SC, ucp_Bassa_Vah }, + { 171, PT_SC, ucp_Batak }, + { 177, PT_SC, ucp_Batak }, + { 182, PT_SCX, ucp_Bengali }, + { 187, PT_SCX, ucp_Bengali }, + { 195, PT_SC, ucp_Bhaiksuki }, + { 205, PT_SC, ucp_Bhaiksuki }, + { 210, PT_BIDICL, ucp_bidiAL }, + { 217, PT_BIDICL, ucp_bidiAN }, + { 224, PT_BIDICL, ucp_bidiB }, + { 230, PT_BIDICL, ucp_bidiBN }, + { 237, PT_BOOL, ucp_Bidi_Control }, + { 243, PT_BOOL, ucp_Bidi_Control }, + { 255, PT_BIDICL, ucp_bidiCS }, + { 262, PT_BIDICL, ucp_bidiEN }, + { 269, PT_BIDICL, ucp_bidiES }, + { 276, PT_BIDICL, ucp_bidiET }, + { 283, PT_BIDICL, ucp_bidiFSI }, + { 291, PT_BIDICL, ucp_bidiL }, + { 297, PT_BIDICL, ucp_bidiLRE }, + { 305, PT_BIDICL, ucp_bidiLRI }, + { 313, PT_BIDICL, ucp_bidiLRO }, + { 321, PT_BOOL, ucp_Bidi_Mirrored }, + { 327, PT_BOOL, ucp_Bidi_Mirrored }, + { 340, PT_BIDICL, ucp_bidiNSM }, + { 348, PT_BIDICL, ucp_bidiON }, + { 355, PT_BIDICL, ucp_bidiPDF }, + { 363, PT_BIDICL, ucp_bidiPDI }, + { 371, PT_BIDICL, ucp_bidiR }, + { 377, PT_BIDICL, ucp_bidiRLE }, + { 385, PT_BIDICL, ucp_bidiRLI }, + { 393, PT_BIDICL, ucp_bidiRLO }, + { 401, PT_BIDICL, ucp_bidiS }, + { 407, PT_BIDICL, ucp_bidiWS }, + { 414, PT_SCX, ucp_Bopomofo }, + { 419, PT_SCX, ucp_Bopomofo }, + { 428, PT_SC, ucp_Brahmi }, + { 433, PT_SC, ucp_Brahmi }, + { 440, PT_SC, ucp_Braille }, + { 445, PT_SC, ucp_Braille }, + { 453, PT_SCX, ucp_Buginese }, + { 458, PT_SCX, ucp_Buginese }, + { 467, PT_SCX, ucp_Buhid }, + { 472, PT_SCX, ucp_Buhid }, + { 478, PT_GC, ucp_C }, + { 480, PT_SCX, ucp_Chakma }, + { 485, PT_SC, ucp_Canadian_Aboriginal }, + { 504, PT_SC, ucp_Canadian_Aboriginal }, + { 509, PT_SC, ucp_Carian }, + { 514, PT_SC, ucp_Carian }, + { 521, PT_BOOL, ucp_Cased }, + { 527, PT_BOOL, ucp_Case_Ignorable }, + { 541, PT_SC, ucp_Caucasian_Albanian }, + { 559, PT_PC, ucp_Cc }, + { 562, PT_PC, ucp_Cf }, + { 565, PT_SCX, ucp_Chakma }, + { 572, PT_SC, ucp_Cham }, + { 577, PT_BOOL, ucp_Changes_When_Casefolded }, + { 599, PT_BOOL, ucp_Changes_When_Casemapped }, + { 621, PT_BOOL, ucp_Changes_When_Lowercased }, + { 643, PT_BOOL, ucp_Changes_When_Titlecased }, + { 665, PT_BOOL, ucp_Changes_When_Uppercased }, + { 687, PT_SC, ucp_Cherokee }, + { 692, PT_SC, ucp_Cherokee }, + { 701, PT_SC, ucp_Chorasmian }, + { 712, PT_SC, ucp_Chorasmian }, + { 717, PT_BOOL, ucp_Case_Ignorable }, + { 720, PT_PC, ucp_Cn }, + { 723, PT_PC, ucp_Co }, + { 726, PT_SC, ucp_Common }, + { 733, PT_SCX, ucp_Coptic }, + { 738, PT_SCX, ucp_Coptic }, + { 745, PT_SCX, ucp_Cypro_Minoan }, + { 750, PT_SCX, ucp_Cypriot }, + { 755, PT_PC, ucp_Cs }, + { 758, PT_SC, ucp_Cuneiform }, + { 768, PT_BOOL, ucp_Changes_When_Casefolded }, + { 773, PT_BOOL, ucp_Changes_When_Casemapped }, + { 778, PT_BOOL, ucp_Changes_When_Lowercased }, + { 782, PT_BOOL, ucp_Changes_When_Titlecased }, + { 786, PT_BOOL, ucp_Changes_When_Uppercased }, + { 790, PT_SCX, ucp_Cypriot }, + { 798, PT_SCX, ucp_Cypro_Minoan }, + { 810, PT_SCX, ucp_Cyrillic }, + { 819, PT_SCX, ucp_Cyrillic }, + { 824, PT_BOOL, ucp_Dash }, + { 829, PT_BOOL, ucp_Default_Ignorable_Code_Point }, + { 855, PT_BOOL, ucp_Deprecated }, + { 859, PT_BOOL, ucp_Deprecated }, + { 870, PT_SC, ucp_Deseret }, + { 878, PT_SCX, ucp_Devanagari }, + { 883, PT_SCX, ucp_Devanagari }, + { 894, PT_BOOL, ucp_Default_Ignorable_Code_Point }, + { 897, PT_BOOL, ucp_Diacritic }, + { 901, PT_BOOL, ucp_Diacritic }, + { 911, PT_SC, ucp_Dives_Akuru }, + { 916, PT_SC, ucp_Dives_Akuru }, + { 927, PT_SCX, ucp_Dogra }, + { 932, PT_SCX, ucp_Dogra }, + { 938, PT_SC, ucp_Deseret }, + { 943, PT_SCX, ucp_Duployan }, + { 948, PT_SCX, ucp_Duployan }, + { 957, PT_BOOL, ucp_Emoji_Modifier_Base }, + { 963, PT_BOOL, ucp_Emoji_Component }, + { 969, PT_SC, ucp_Egyptian_Hieroglyphs }, + { 974, PT_SC, ucp_Egyptian_Hieroglyphs }, + { 994, PT_SC, ucp_Elbasan }, + { 999, PT_SC, ucp_Elbasan }, + { 1007, PT_SC, ucp_Elymaic }, + { 1012, PT_SC, ucp_Elymaic }, + { 1020, PT_BOOL, ucp_Emoji_Modifier }, + { 1025, PT_BOOL, ucp_Emoji }, + { 1031, PT_BOOL, ucp_Emoji_Component }, + { 1046, PT_BOOL, ucp_Emoji_Modifier }, + { 1060, PT_BOOL, ucp_Emoji_Modifier_Base }, + { 1078, PT_BOOL, ucp_Emoji_Presentation }, + { 1096, PT_BOOL, ucp_Emoji_Presentation }, + { 1102, PT_SC, ucp_Ethiopic }, + { 1107, PT_SC, ucp_Ethiopic }, + { 1116, PT_BOOL, ucp_Extender }, + { 1120, PT_BOOL, ucp_Extended_Pictographic }, + { 1141, PT_BOOL, ucp_Extender }, + { 1150, PT_BOOL, ucp_Extended_Pictographic }, + { 1158, PT_SCX, ucp_Georgian }, + { 1163, PT_SCX, ucp_Georgian }, + { 1172, PT_SCX, ucp_Glagolitic }, + { 1177, PT_SCX, ucp_Glagolitic }, + { 1188, PT_SCX, ucp_Gunjala_Gondi }, + { 1193, PT_SCX, ucp_Masaram_Gondi }, + { 1198, PT_SC, ucp_Gothic }, + { 1203, PT_SC, ucp_Gothic }, + { 1210, PT_SCX, ucp_Grantha }, + { 1215, PT_SCX, ucp_Grantha }, + { 1223, PT_BOOL, ucp_Grapheme_Base }, + { 1236, PT_BOOL, ucp_Grapheme_Extend }, + { 1251, PT_BOOL, ucp_Grapheme_Link }, + { 1264, PT_BOOL, ucp_Grapheme_Base }, + { 1271, PT_SCX, ucp_Greek }, + { 1277, PT_SCX, ucp_Greek }, + { 1282, PT_BOOL, ucp_Grapheme_Extend }, + { 1288, PT_BOOL, ucp_Grapheme_Link }, + { 1295, PT_SCX, ucp_Gujarati }, + { 1304, PT_SCX, ucp_Gujarati }, + { 1309, PT_SCX, ucp_Gunjala_Gondi }, + { 1322, PT_SCX, ucp_Gurmukhi }, + { 1331, PT_SCX, ucp_Gurmukhi }, + { 1336, PT_SCX, ucp_Han }, + { 1340, PT_SCX, ucp_Hangul }, + { 1345, PT_SCX, ucp_Hangul }, + { 1352, PT_SCX, ucp_Han }, + { 1357, PT_SCX, ucp_Hanifi_Rohingya }, + { 1372, PT_SCX, ucp_Hanunoo }, + { 1377, PT_SCX, ucp_Hanunoo }, + { 1385, PT_SC, ucp_Hatran }, + { 1390, PT_SC, ucp_Hatran }, + { 1397, PT_SC, ucp_Hebrew }, + { 1402, PT_SC, ucp_Hebrew }, + { 1409, PT_BOOL, ucp_Hex_Digit }, + { 1413, PT_BOOL, ucp_Hex_Digit }, + { 1422, PT_SCX, ucp_Hiragana }, + { 1427, PT_SCX, ucp_Hiragana }, + { 1436, PT_SC, ucp_Anatolian_Hieroglyphs }, + { 1441, PT_SC, ucp_Pahawh_Hmong }, + { 1446, PT_SC, ucp_Nyiakeng_Puachue_Hmong }, + { 1451, PT_SC, ucp_Old_Hungarian }, + { 1456, PT_BOOL, ucp_ID_Continue }, + { 1460, PT_BOOL, ucp_ID_Continue }, + { 1471, PT_BOOL, ucp_Ideographic }, + { 1476, PT_BOOL, ucp_Ideographic }, + { 1488, PT_BOOL, ucp_ID_Start }, + { 1492, PT_BOOL, ucp_IDS_Binary_Operator }, + { 1497, PT_BOOL, ucp_IDS_Binary_Operator }, + { 1515, PT_BOOL, ucp_IDS_Trinary_Operator }, + { 1520, PT_BOOL, ucp_ID_Start }, + { 1528, PT_BOOL, ucp_IDS_Trinary_Operator }, + { 1547, PT_SC, ucp_Imperial_Aramaic }, + { 1563, PT_SC, ucp_Inherited }, + { 1573, PT_SC, ucp_Inscriptional_Pahlavi }, + { 1594, PT_SC, ucp_Inscriptional_Parthian }, + { 1616, PT_SC, ucp_Old_Italic }, + { 1621, PT_SCX, ucp_Javanese }, + { 1626, PT_SCX, ucp_Javanese }, + { 1635, PT_BOOL, ucp_Join_Control }, + { 1641, PT_BOOL, ucp_Join_Control }, + { 1653, PT_SCX, ucp_Kaithi }, + { 1660, PT_SCX, ucp_Kayah_Li }, + { 1665, PT_SCX, ucp_Katakana }, + { 1670, PT_SCX, ucp_Kannada }, + { 1678, PT_SCX, ucp_Katakana }, + { 1687, PT_SCX, ucp_Kayah_Li }, + { 1695, PT_SC, ucp_Kharoshthi }, + { 1700, PT_SC, ucp_Kharoshthi }, + { 1711, PT_SC, ucp_Khitan_Small_Script }, + { 1729, PT_SC, ucp_Khmer }, + { 1735, PT_SC, ucp_Khmer }, + { 1740, PT_SCX, ucp_Khojki }, + { 1745, PT_SCX, ucp_Khojki }, + { 1752, PT_SCX, ucp_Khudawadi }, + { 1762, PT_SC, ucp_Khitan_Small_Script }, + { 1767, PT_SCX, ucp_Kannada }, + { 1772, PT_SCX, ucp_Kaithi }, + { 1777, PT_GC, ucp_L }, + { 1779, PT_LAMP, 0 }, + { 1782, PT_SC, ucp_Tai_Tham }, + { 1787, PT_SC, ucp_Lao }, + { 1791, PT_SC, ucp_Lao }, + { 1796, PT_SCX, ucp_Latin }, + { 1802, PT_SCX, ucp_Latin }, + { 1807, PT_LAMP, 0 }, + { 1810, PT_SC, ucp_Lepcha }, + { 1815, PT_SC, ucp_Lepcha }, + { 1822, PT_SCX, ucp_Limbu }, + { 1827, PT_SCX, ucp_Limbu }, + { 1833, PT_SCX, ucp_Linear_A }, + { 1838, PT_SCX, ucp_Linear_B }, + { 1843, PT_SCX, ucp_Linear_A }, + { 1851, PT_SCX, ucp_Linear_B }, + { 1859, PT_SC, ucp_Lisu }, + { 1864, PT_PC, ucp_Ll }, + { 1867, PT_PC, ucp_Lm }, + { 1870, PT_PC, ucp_Lo }, + { 1873, PT_BOOL, ucp_Logical_Order_Exception }, + { 1877, PT_BOOL, ucp_Logical_Order_Exception }, + { 1899, PT_BOOL, ucp_Lowercase }, + { 1905, PT_BOOL, ucp_Lowercase }, + { 1915, PT_PC, ucp_Lt }, + { 1918, PT_PC, ucp_Lu }, + { 1921, PT_SC, ucp_Lycian }, + { 1926, PT_SC, ucp_Lycian }, + { 1933, PT_SC, ucp_Lydian }, + { 1938, PT_SC, ucp_Lydian }, + { 1945, PT_GC, ucp_M }, + { 1947, PT_SCX, ucp_Mahajani }, + { 1956, PT_SCX, ucp_Mahajani }, + { 1961, PT_SC, ucp_Makasar }, + { 1966, PT_SC, ucp_Makasar }, + { 1974, PT_SCX, ucp_Malayalam }, + { 1984, PT_SCX, ucp_Mandaic }, + { 1989, PT_SCX, ucp_Mandaic }, + { 1997, PT_SCX, ucp_Manichaean }, + { 2002, PT_SCX, ucp_Manichaean }, + { 2013, PT_SC, ucp_Marchen }, + { 2018, PT_SC, ucp_Marchen }, + { 2026, PT_SCX, ucp_Masaram_Gondi }, + { 2039, PT_BOOL, ucp_Math }, + { 2044, PT_PC, ucp_Mc }, + { 2047, PT_PC, ucp_Me }, + { 2050, PT_SC, ucp_Medefaidrin }, + { 2062, PT_SC, ucp_Medefaidrin }, + { 2067, PT_SC, ucp_Meetei_Mayek }, + { 2079, PT_SC, ucp_Mende_Kikakui }, + { 2084, PT_SC, ucp_Mende_Kikakui }, + { 2097, PT_SC, ucp_Meroitic_Cursive }, + { 2102, PT_SC, ucp_Meroitic_Hieroglyphs }, + { 2107, PT_SC, ucp_Meroitic_Cursive }, + { 2123, PT_SC, ucp_Meroitic_Hieroglyphs }, + { 2143, PT_SC, ucp_Miao }, + { 2148, PT_SCX, ucp_Malayalam }, + { 2153, PT_PC, ucp_Mn }, + { 2156, PT_SCX, ucp_Modi }, + { 2161, PT_SCX, ucp_Mongolian }, + { 2166, PT_SCX, ucp_Mongolian }, + { 2176, PT_SC, ucp_Mro }, + { 2180, PT_SC, ucp_Mro }, + { 2185, PT_SC, ucp_Meetei_Mayek }, + { 2190, PT_SCX, ucp_Multani }, + { 2195, PT_SCX, ucp_Multani }, + { 2203, PT_SCX, ucp_Myanmar }, + { 2211, PT_SCX, ucp_Myanmar }, + { 2216, PT_GC, ucp_N }, + { 2218, PT_SC, ucp_Nabataean }, + { 2228, PT_SCX, ucp_Nandinagari }, + { 2233, PT_SCX, ucp_Nandinagari }, + { 2245, PT_SC, ucp_Old_North_Arabian }, + { 2250, PT_SC, ucp_Nabataean }, + { 2255, PT_BOOL, ucp_Noncharacter_Code_Point }, + { 2261, PT_PC, ucp_Nd }, + { 2264, PT_SC, ucp_Newa }, + { 2269, PT_SC, ucp_New_Tai_Lue }, + { 2279, PT_SCX, ucp_Nko }, + { 2283, PT_SCX, ucp_Nko }, + { 2288, PT_PC, ucp_Nl }, + { 2291, PT_PC, ucp_No }, + { 2294, PT_BOOL, ucp_Noncharacter_Code_Point }, + { 2316, PT_SC, ucp_Nushu }, + { 2321, PT_SC, ucp_Nushu }, + { 2327, PT_SC, ucp_Nyiakeng_Puachue_Hmong }, + { 2348, PT_SC, ucp_Ogham }, + { 2353, PT_SC, ucp_Ogham }, + { 2359, PT_SC, ucp_Ol_Chiki }, + { 2367, PT_SC, ucp_Ol_Chiki }, + { 2372, PT_SC, ucp_Old_Hungarian }, + { 2385, PT_SC, ucp_Old_Italic }, + { 2395, PT_SC, ucp_Old_North_Arabian }, + { 2411, PT_SCX, ucp_Old_Permic }, + { 2421, PT_SC, ucp_Old_Persian }, + { 2432, PT_SC, ucp_Old_Sogdian }, + { 2443, PT_SC, ucp_Old_South_Arabian }, + { 2459, PT_SC, ucp_Old_Turkic }, + { 2469, PT_SCX, ucp_Old_Uyghur }, + { 2479, PT_SCX, ucp_Oriya }, + { 2485, PT_SC, ucp_Old_Turkic }, + { 2490, PT_SCX, ucp_Oriya }, + { 2495, PT_SC, ucp_Osage }, + { 2501, PT_SC, ucp_Osage }, + { 2506, PT_SC, ucp_Osmanya }, + { 2511, PT_SC, ucp_Osmanya }, + { 2519, PT_SCX, ucp_Old_Uyghur }, + { 2524, PT_GC, ucp_P }, + { 2526, PT_SC, ucp_Pahawh_Hmong }, + { 2538, PT_SC, ucp_Palmyrene }, + { 2543, PT_SC, ucp_Palmyrene }, + { 2553, PT_BOOL, ucp_Pattern_Syntax }, + { 2560, PT_BOOL, ucp_Pattern_Syntax }, + { 2574, PT_BOOL, ucp_Pattern_White_Space }, + { 2592, PT_BOOL, ucp_Pattern_White_Space }, + { 2598, PT_SC, ucp_Pau_Cin_Hau }, + { 2603, PT_SC, ucp_Pau_Cin_Hau }, + { 2613, PT_PC, ucp_Pc }, + { 2616, PT_BOOL, ucp_Prepended_Concatenation_Mark }, + { 2620, PT_PC, ucp_Pd }, + { 2623, PT_PC, ucp_Pe }, + { 2626, PT_SCX, ucp_Old_Permic }, + { 2631, PT_PC, ucp_Pf }, + { 2634, PT_SCX, ucp_Phags_Pa }, + { 2639, PT_SCX, ucp_Phags_Pa }, + { 2647, PT_SC, ucp_Inscriptional_Pahlavi }, + { 2652, PT_SCX, ucp_Psalter_Pahlavi }, + { 2657, PT_SC, ucp_Phoenician }, + { 2662, PT_SC, ucp_Phoenician }, + { 2673, PT_PC, ucp_Pi }, + { 2676, PT_SC, ucp_Miao }, + { 2681, PT_PC, ucp_Po }, + { 2684, PT_BOOL, ucp_Prepended_Concatenation_Mark }, + { 2711, PT_SC, ucp_Inscriptional_Parthian }, + { 2716, PT_PC, ucp_Ps }, + { 2719, PT_SCX, ucp_Psalter_Pahlavi }, + { 2734, PT_SCX, ucp_Coptic }, + { 2739, PT_SC, ucp_Inherited }, + { 2744, PT_BOOL, ucp_Quotation_Mark }, + { 2750, PT_BOOL, ucp_Quotation_Mark }, + { 2764, PT_BOOL, ucp_Radical }, + { 2772, PT_BOOL, ucp_Regional_Indicator }, + { 2790, PT_SC, ucp_Rejang }, + { 2797, PT_BOOL, ucp_Regional_Indicator }, + { 2800, PT_SC, ucp_Rejang }, + { 2805, PT_SCX, ucp_Hanifi_Rohingya }, + { 2810, PT_SC, ucp_Runic }, + { 2816, PT_SC, ucp_Runic }, + { 2821, PT_GC, ucp_S }, + { 2823, PT_SC, ucp_Samaritan }, + { 2833, PT_SC, ucp_Samaritan }, + { 2838, PT_SC, ucp_Old_South_Arabian }, + { 2843, PT_SC, ucp_Saurashtra }, + { 2848, PT_SC, ucp_Saurashtra }, + { 2859, PT_PC, ucp_Sc }, + { 2862, PT_BOOL, ucp_Soft_Dotted }, + { 2865, PT_BOOL, ucp_Sentence_Terminal }, + { 2882, PT_SC, ucp_SignWriting }, + { 2887, PT_SCX, ucp_Sharada }, + { 2895, PT_SC, ucp_Shavian }, + { 2903, PT_SC, ucp_Shavian }, + { 2908, PT_SCX, ucp_Sharada }, + { 2913, PT_SC, ucp_Siddham }, + { 2918, PT_SC, ucp_Siddham }, + { 2926, PT_SC, ucp_SignWriting }, + { 2938, PT_SCX, ucp_Khudawadi }, + { 2943, PT_SCX, ucp_Sinhala }, + { 2948, PT_SCX, ucp_Sinhala }, + { 2956, PT_PC, ucp_Sk }, + { 2959, PT_PC, ucp_Sm }, + { 2962, PT_PC, ucp_So }, + { 2965, PT_BOOL, ucp_Soft_Dotted }, + { 2976, PT_SCX, ucp_Sogdian }, + { 2981, PT_SCX, ucp_Sogdian }, + { 2989, PT_SC, ucp_Old_Sogdian }, + { 2994, PT_SC, ucp_Sora_Sompeng }, + { 2999, PT_SC, ucp_Sora_Sompeng }, + { 3011, PT_SC, ucp_Soyombo }, + { 3016, PT_SC, ucp_Soyombo }, + { 3024, PT_BOOL, ucp_White_Space }, + { 3030, PT_BOOL, ucp_Sentence_Terminal }, + { 3036, PT_SC, ucp_Sundanese }, + { 3041, PT_SC, ucp_Sundanese }, + { 3051, PT_SCX, ucp_Syloti_Nagri }, + { 3056, PT_SCX, ucp_Syloti_Nagri }, + { 3068, PT_SCX, ucp_Syriac }, + { 3073, PT_SCX, ucp_Syriac }, + { 3080, PT_SCX, ucp_Tagalog }, + { 3088, PT_SCX, ucp_Tagbanwa }, + { 3093, PT_SCX, ucp_Tagbanwa }, + { 3102, PT_SCX, ucp_Tai_Le }, + { 3108, PT_SC, ucp_Tai_Tham }, + { 3116, PT_SC, ucp_Tai_Viet }, + { 3124, PT_SCX, ucp_Takri }, + { 3129, PT_SCX, ucp_Takri }, + { 3135, PT_SCX, ucp_Tai_Le }, + { 3140, PT_SC, ucp_New_Tai_Lue }, + { 3145, PT_SCX, ucp_Tamil }, + { 3151, PT_SCX, ucp_Tamil }, + { 3156, PT_SC, ucp_Tangut }, + { 3161, PT_SC, ucp_Tangsa }, + { 3168, PT_SC, ucp_Tangut }, + { 3175, PT_SC, ucp_Tai_Viet }, + { 3180, PT_SCX, ucp_Telugu }, + { 3185, PT_SCX, ucp_Telugu }, + { 3192, PT_BOOL, ucp_Terminal_Punctuation }, + { 3197, PT_BOOL, ucp_Terminal_Punctuation }, + { 3217, PT_SC, ucp_Tifinagh }, + { 3222, PT_SCX, ucp_Tagalog }, + { 3227, PT_SCX, ucp_Thaana }, + { 3232, PT_SCX, ucp_Thaana }, + { 3239, PT_SC, ucp_Thai }, + { 3244, PT_SC, ucp_Tibetan }, + { 3252, PT_SC, ucp_Tibetan }, + { 3257, PT_SC, ucp_Tifinagh }, + { 3266, PT_SCX, ucp_Tirhuta }, + { 3271, PT_SCX, ucp_Tirhuta }, + { 3279, PT_SC, ucp_Tangsa }, + { 3284, PT_SC, ucp_Toto }, + { 3289, PT_SC, ucp_Ugaritic }, + { 3294, PT_SC, ucp_Ugaritic }, + { 3303, PT_BOOL, ucp_Unified_Ideograph }, + { 3309, PT_BOOL, ucp_Unified_Ideograph }, + { 3326, PT_SC, ucp_Unknown }, + { 3334, PT_BOOL, ucp_Uppercase }, + { 3340, PT_BOOL, ucp_Uppercase }, + { 3350, PT_SC, ucp_Vai }, + { 3354, PT_SC, ucp_Vai }, + { 3359, PT_BOOL, ucp_Variation_Selector }, + { 3377, PT_SC, ucp_Vithkuqi }, + { 3382, PT_SC, ucp_Vithkuqi }, + { 3391, PT_BOOL, ucp_Variation_Selector }, + { 3394, PT_SC, ucp_Wancho }, + { 3401, PT_SC, ucp_Warang_Citi }, + { 3406, PT_SC, ucp_Warang_Citi }, + { 3417, PT_SC, ucp_Wancho }, + { 3422, PT_BOOL, ucp_White_Space }, + { 3433, PT_BOOL, ucp_White_Space }, + { 3440, PT_ALNUM, 0 }, + { 3444, PT_BOOL, ucp_XID_Continue }, + { 3449, PT_BOOL, ucp_XID_Continue }, + { 3461, PT_BOOL, ucp_XID_Start }, + { 3466, PT_BOOL, ucp_XID_Start }, + { 3475, PT_SC, ucp_Old_Persian }, + { 3480, PT_PXSPACE, 0 }, + { 3484, PT_SPACE, 0 }, + { 3488, PT_SC, ucp_Cuneiform }, + { 3493, PT_UCNC, 0 }, + { 3497, PT_WORD, 0 }, + { 3501, PT_SCX, ucp_Yezidi }, + { 3506, PT_SCX, ucp_Yezidi }, + { 3513, PT_SCX, ucp_Yi }, + { 3516, PT_SCX, ucp_Yi }, + { 3521, PT_GC, ucp_Z }, + { 3523, PT_SC, ucp_Zanabazar_Square }, + { 3539, PT_SC, ucp_Zanabazar_Square }, + { 3544, PT_SC, ucp_Inherited }, + { 3549, PT_PC, ucp_Zl }, + { 3552, PT_PC, ucp_Zp }, + { 3555, PT_PC, ucp_Zs }, + { 3558, PT_SC, ucp_Common }, + { 3563, PT_SC, ucp_Unknown } +}; + +const size_t PRIV(utt_size) = sizeof(PRIV(utt)) / sizeof(ucp_type_table); + +#endif /* SUPPORT_UNICODE */ + +/* End of pcre2_ucptables.c */ diff --git a/thirdparty/pcre2/src/pcre2_xclass.c b/thirdparty/pcre2/src/pcre2_xclass.c index 8b052be66a..bb57196449 100644 --- a/thirdparty/pcre2/src/pcre2_xclass.c +++ b/thirdparty/pcre2/src/pcre2_xclass.c @@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Original API code Copyright (c) 1997-2012 University of Cambridge - New API code Copyright (c) 2016-2019 University of Cambridge + New API code Copyright (c) 2016-2022 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -135,6 +135,7 @@ while ((t = *data++) != XCL_END) { const ucd_record *prop = GET_UCD(c); BOOL isprop = t == XCL_PROP; + BOOL ok; switch(*data) { @@ -160,6 +161,12 @@ while ((t = *data++) != XCL_END) if ((data[1] == prop->script) == isprop) return !negated; break; + case PT_SCX: + ok = (data[1] == prop->script || + MAPBIT(PRIV(ucd_script_sets) + UCD_SCRIPTX_PROP(prop), data[1]) != 0); + if (ok == isprop) return !negated; + break; + case PT_ALNUM: if ((PRIV(ucp_gentype)[prop->chartype] == ucp_L || PRIV(ucp_gentype)[prop->chartype] == ucp_N) == isprop) @@ -207,6 +214,17 @@ while ((t = *data++) != XCL_END) } break; + case PT_BIDICL: + if ((UCD_BIDICLASS_PROP(prop) == data[1]) == isprop) + return !negated; + break; + + case PT_BOOL: + ok = MAPBIT(PRIV(ucd_boolprop_sets) + + UCD_BPROPS_PROP(prop), data[1]) != 0; + if (ok == isprop) return !negated; + break; + /* The following three properties can occur only in an XCLASS, as there is no \p or \P coding for them. */ diff --git a/thirdparty/pcre2/src/sljit/sljitConfigInternal.h b/thirdparty/pcre2/src/sljit/sljitConfigInternal.h index 7bb9990a59..55e4e39f13 100644 --- a/thirdparty/pcre2/src/sljit/sljitConfigInternal.h +++ b/thirdparty/pcre2/src/sljit/sljitConfigInternal.h @@ -60,7 +60,7 @@ extern "C" { SLJIT_LITTLE_ENDIAN : little endian architecture SLJIT_BIG_ENDIAN : big endian architecture SLJIT_UNALIGNED : allows unaligned memory accesses for non-fpu operations (only!) - SLJIT_INDIRECT_CALL : see SLJIT_FUNC_OFFSET() for more information + SLJIT_INDIRECT_CALL : see SLJIT_FUNC_ADDR() for more information Constants: SLJIT_NUMBER_OF_REGISTERS : number of available registers @@ -148,7 +148,7 @@ extern "C" { #endif #elif defined (__aarch64__) #define SLJIT_CONFIG_ARM_64 1 -#elif defined(__ppc64__) || defined(__powerpc64__) || defined(_ARCH_PPC64) || (defined(_POWER) && defined(__64BIT__)) +#elif defined(__ppc64__) || defined(__powerpc64__) || (defined(_ARCH_PPC64) && defined(__64BIT__)) || (defined(_POWER) && defined(__64BIT__)) #define SLJIT_CONFIG_PPC_64 1 #elif defined(__ppc__) || defined(__powerpc__) || defined(_ARCH_PPC) || defined(_ARCH_PWR) || defined(_ARCH_PWR2) || defined(_POWER) #define SLJIT_CONFIG_PPC_32 1 @@ -156,7 +156,7 @@ extern "C" { #define SLJIT_CONFIG_MIPS_32 1 #elif defined(__mips64) #define SLJIT_CONFIG_MIPS_64 1 -#elif defined(__sparc__) || defined(__sparc) +#elif (defined(__sparc__) || defined(__sparc)) && !defined(_LP64) #define SLJIT_CONFIG_SPARC_32 1 #elif defined(__s390x__) #define SLJIT_CONFIG_S390X 1 @@ -274,9 +274,13 @@ extern "C" { #ifndef SLJIT_INLINE /* Inline functions. Some old compilers do not support them. */ -#if defined(__SUNPRO_C) && __SUNPRO_C <= 0x510 +#ifdef __SUNPRO_C +#if __SUNPRO_C < 0x560 #define SLJIT_INLINE #else +#define SLJIT_INLINE inline +#endif /* __SUNPRO_C */ +#else #define SLJIT_INLINE __inline #endif #endif /* !SLJIT_INLINE */ @@ -319,18 +323,36 @@ extern "C" { /* Instruction cache flush. */ /****************************/ +/* + * TODO: + * + * clang >= 15 could be safe to enable below + * older versions are known to abort in some targets + * https://github.com/PhilipHazel/pcre2/issues/92 + * + * beware APPLE is known to have removed the code in iOS so + * it will need to be excempted or result in broken builds + */ #if (!defined SLJIT_CACHE_FLUSH && defined __has_builtin) -#if __has_builtin(__builtin___clear_cache) +#if __has_builtin(__builtin___clear_cache) && !defined(__clang__) +/* + * https://gcc.gnu.org/bugzilla//show_bug.cgi?id=91248 + * https://gcc.gnu.org/bugzilla//show_bug.cgi?id=93811 + * gcc's clear_cache builtin for power and sparc are broken + */ +#if !defined(SLJIT_CONFIG_PPC) && !defined(SLJIT_CONFIG_SPARC_32) #define SLJIT_CACHE_FLUSH(from, to) \ __builtin___clear_cache((char*)(from), (char*)(to)) +#endif -#endif /* __has_builtin(__builtin___clear_cache) */ +#endif /* gcc >= 10 */ #endif /* (!defined SLJIT_CACHE_FLUSH && defined __has_builtin) */ #ifndef SLJIT_CACHE_FLUSH -#if (defined SLJIT_CONFIG_X86 && SLJIT_CONFIG_X86) +#if (defined SLJIT_CONFIG_X86 && SLJIT_CONFIG_X86) \ + || (defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X) /* Not required to implement on archs with unified caches. */ #define SLJIT_CACHE_FLUSH(from, to) @@ -340,9 +362,9 @@ extern "C" { /* Supported by all macs since Mac OS 10.5. However, it does not work on non-jailbroken iOS devices, although the compilation is successful. */ - +#include <libkern/OSCacheControl.h> #define SLJIT_CACHE_FLUSH(from, to) \ - sys_icache_invalidate((char*)(from), (char*)(to) - (char*)(from)) + sys_icache_invalidate((void*)(from), (size_t)((char*)(to) - (char*)(from))) #elif (defined SLJIT_CONFIG_PPC && SLJIT_CONFIG_PPC) @@ -351,33 +373,33 @@ extern "C" { ppc_cache_flush((from), (to)) #define SLJIT_CACHE_FLUSH_OWN_IMPL 1 -#elif (defined(__GNUC__) && (__GNUC__ >= 5 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))) +#elif (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32) +/* The __clear_cache() implementation of GCC is a dummy function on Sparc. */ #define SLJIT_CACHE_FLUSH(from, to) \ - __builtin___clear_cache((char*)(from), (char*)(to)) - -#elif defined __ANDROID__ + sparc_cache_flush((from), (to)) +#define SLJIT_CACHE_FLUSH_OWN_IMPL 1 -/* Android lacks __clear_cache; instead, cacheflush should be used. */ +#elif (defined(__GNUC__) && (__GNUC__ >= 5 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))) || defined(__clang__) #define SLJIT_CACHE_FLUSH(from, to) \ - cacheflush((long)(from), (long)(to), 0) + __builtin___clear_cache((char*)(from), (char*)(to)) -#elif (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32) +#elif defined __ANDROID__ -/* The __clear_cache() implementation of GCC is a dummy function on Sparc. */ +/* Android ARMv7 with gcc lacks __clear_cache; use cacheflush instead. */ +#include <sys/cachectl.h> #define SLJIT_CACHE_FLUSH(from, to) \ - sparc_cache_flush((from), (to)) -#define SLJIT_CACHE_FLUSH_OWN_IMPL 1 + cacheflush((long)(from), (long)(to), 0) #elif defined _WIN32 #define SLJIT_CACHE_FLUSH(from, to) \ - FlushInstructionCache(GetCurrentProcess(), (char*)(from), (char*)(to) - (char*)(from)) + FlushInstructionCache(GetCurrentProcess(), (void*)(from), (char*)(to) - (char*)(from)) #else -/* Calls __ARM_NR_cacheflush on ARM-Linux. */ +/* Call __ARM_NR_cacheflush on ARM-Linux or the corresponding MIPS syscall. */ #define SLJIT_CACHE_FLUSH(from, to) \ __clear_cache((char*)(from), (char*)(to)) @@ -645,18 +667,23 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void* ptr); #define SLJIT_NUMBER_OF_REGISTERS 12 #define SLJIT_NUMBER_OF_SAVED_REGISTERS 9 +#define SLJIT_NUMBER_OF_FLOAT_REGISTERS 7 +#define SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS 0 #define SLJIT_LOCALS_OFFSET_BASE (compiler->locals_offset) #define SLJIT_PREF_SHIFT_REG SLJIT_R2 #elif (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64) #define SLJIT_NUMBER_OF_REGISTERS 13 +#define SLJIT_NUMBER_OF_FLOAT_REGISTERS 15 #ifndef _WIN64 #define SLJIT_NUMBER_OF_SAVED_REGISTERS 6 +#define SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS 0 #define SLJIT_LOCALS_OFFSET_BASE 0 #else /* _WIN64 */ #define SLJIT_NUMBER_OF_SAVED_REGISTERS 8 -#define SLJIT_LOCALS_OFFSET_BASE (compiler->locals_offset) +#define SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS 10 +#define SLJIT_LOCALS_OFFSET_BASE (4 * (sljit_s32)sizeof(sljit_sw)) #endif /* !_WIN64 */ #define SLJIT_PREF_SHIFT_REG SLJIT_R3 @@ -664,31 +691,39 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void* ptr); #define SLJIT_NUMBER_OF_REGISTERS 12 #define SLJIT_NUMBER_OF_SAVED_REGISTERS 8 +#define SLJIT_NUMBER_OF_FLOAT_REGISTERS 14 +#define SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS 8 #define SLJIT_LOCALS_OFFSET_BASE 0 #elif (defined SLJIT_CONFIG_ARM_THUMB2 && SLJIT_CONFIG_ARM_THUMB2) #define SLJIT_NUMBER_OF_REGISTERS 12 #define SLJIT_NUMBER_OF_SAVED_REGISTERS 8 +#define SLJIT_NUMBER_OF_FLOAT_REGISTERS 14 +#define SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS 8 #define SLJIT_LOCALS_OFFSET_BASE 0 #elif (defined SLJIT_CONFIG_ARM_64 && SLJIT_CONFIG_ARM_64) #define SLJIT_NUMBER_OF_REGISTERS 26 #define SLJIT_NUMBER_OF_SAVED_REGISTERS 10 -#define SLJIT_LOCALS_OFFSET_BASE 0 +#define SLJIT_NUMBER_OF_FLOAT_REGISTERS 30 +#define SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS 8 +#define SLJIT_LOCALS_OFFSET_BASE (2 * (sljit_s32)sizeof(sljit_sw)) #elif (defined SLJIT_CONFIG_PPC && SLJIT_CONFIG_PPC) #define SLJIT_NUMBER_OF_REGISTERS 23 #define SLJIT_NUMBER_OF_SAVED_REGISTERS 17 +#define SLJIT_NUMBER_OF_FLOAT_REGISTERS 30 +#define SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS 18 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64) || (defined _AIX) -#define SLJIT_LOCALS_OFFSET_BASE ((6 + 8) * sizeof(sljit_sw)) +#define SLJIT_LOCALS_OFFSET_BASE ((6 + 8) * (sljit_s32)sizeof(sljit_sw)) #elif (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32) /* Add +1 for double alignment. */ -#define SLJIT_LOCALS_OFFSET_BASE ((3 + 1) * sizeof(sljit_sw)) +#define SLJIT_LOCALS_OFFSET_BASE ((3 + 1) * (sljit_s32)sizeof(sljit_sw)) #else -#define SLJIT_LOCALS_OFFSET_BASE (3 * sizeof(sljit_sw)) +#define SLJIT_LOCALS_OFFSET_BASE (3 * (sljit_s32)sizeof(sljit_sw)) #endif /* SLJIT_CONFIG_PPC_64 || _AIX */ #elif (defined SLJIT_CONFIG_MIPS && SLJIT_CONFIG_MIPS) @@ -696,19 +731,25 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void* ptr); #define SLJIT_NUMBER_OF_REGISTERS 21 #define SLJIT_NUMBER_OF_SAVED_REGISTERS 8 #if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) -#define SLJIT_LOCALS_OFFSET_BASE (4 * sizeof(sljit_sw)) +#define SLJIT_LOCALS_OFFSET_BASE (4 * (sljit_s32)sizeof(sljit_sw)) +#define SLJIT_NUMBER_OF_FLOAT_REGISTERS 13 +#define SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS 6 #else #define SLJIT_LOCALS_OFFSET_BASE 0 +#define SLJIT_NUMBER_OF_FLOAT_REGISTERS 29 +#define SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS 8 #endif #elif (defined SLJIT_CONFIG_SPARC && SLJIT_CONFIG_SPARC) #define SLJIT_NUMBER_OF_REGISTERS 18 #define SLJIT_NUMBER_OF_SAVED_REGISTERS 14 +#define SLJIT_NUMBER_OF_FLOAT_REGISTERS 14 +#define SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS 0 #if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32) /* saved registers (16), return struct pointer (1), space for 6 argument words (1), 4th double arg (2), double alignment (1). */ -#define SLJIT_LOCALS_OFFSET_BASE ((16 + 1 + 6 + 2 + 1) * sizeof(sljit_sw)) +#define SLJIT_LOCALS_OFFSET_BASE ((16 + 1 + 6 + 2 + 1) * (sljit_s32)sizeof(sljit_sw)) #endif #elif (defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X) @@ -736,12 +777,16 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void* ptr); #define SLJIT_NUMBER_OF_REGISTERS 12 #define SLJIT_NUMBER_OF_SAVED_REGISTERS 8 +#define SLJIT_NUMBER_OF_FLOAT_REGISTERS 15 +#define SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS 8 #define SLJIT_LOCALS_OFFSET_BASE SLJIT_S390X_DEFAULT_STACK_FRAME_SIZE #elif (defined SLJIT_CONFIG_UNSUPPORTED && SLJIT_CONFIG_UNSUPPORTED) #define SLJIT_NUMBER_OF_REGISTERS 0 #define SLJIT_NUMBER_OF_SAVED_REGISTERS 0 +#define SLJIT_NUMBER_OF_FLOAT_REGISTERS 0 +#define SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS 0 #define SLJIT_LOCALS_OFFSET_BASE 0 #endif @@ -751,13 +796,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void* ptr); #define SLJIT_NUMBER_OF_SCRATCH_REGISTERS \ (SLJIT_NUMBER_OF_REGISTERS - SLJIT_NUMBER_OF_SAVED_REGISTERS) -#define SLJIT_NUMBER_OF_FLOAT_REGISTERS 6 -#if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64) && (defined _WIN64) -#define SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS 1 -#else -#define SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS 0 -#endif - #define SLJIT_NUMBER_OF_SCRATCH_FLOAT_REGISTERS \ (SLJIT_NUMBER_OF_FLOAT_REGISTERS - SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS) @@ -765,8 +803,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void* ptr); /* CPU status flags management. */ /********************************/ -#if (defined SLJIT_CONFIG_ARM_32 && SLJIT_CONFIG_ARM_32) \ - || (defined SLJIT_CONFIG_ARM_64 && SLJIT_CONFIG_ARM_64) \ +#if (defined SLJIT_CONFIG_ARM && SLJIT_CONFIG_ARM) \ + || (defined SLJIT_CONFIG_PPC && SLJIT_CONFIG_PPC) \ || (defined SLJIT_CONFIG_MIPS && SLJIT_CONFIG_MIPS) \ || (defined SLJIT_CONFIG_SPARC && SLJIT_CONFIG_SPARC) \ || (defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X) diff --git a/thirdparty/pcre2/src/sljit/sljitExecAllocator.c b/thirdparty/pcre2/src/sljit/sljitExecAllocator.c index 6e5bf78e45..6359848cd5 100644 --- a/thirdparty/pcre2/src/sljit/sljitExecAllocator.c +++ b/thirdparty/pcre2/src/sljit/sljitExecAllocator.c @@ -66,7 +66,7 @@ /* --------------------------------------------------------------------- */ /* 64 KByte. */ -#define CHUNK_SIZE 0x10000 +#define CHUNK_SIZE (sljit_uw)0x10000u /* alloc_chunk / free_chunk : @@ -112,7 +112,7 @@ static SLJIT_INLINE void free_chunk(void *chunk, sljit_uw size) static SLJIT_INLINE int get_map_jit_flag() { - sljit_sw page_size; + size_t page_size; void *ptr; struct utsname name; static int map_jit_flag = -1; @@ -139,8 +139,9 @@ static SLJIT_INLINE int get_map_jit_flag() #endif /* MAP_ANON */ #else /* !SLJIT_CONFIG_X86 */ #if !(defined SLJIT_CONFIG_ARM && SLJIT_CONFIG_ARM) -#error Unsupported architecture +#error "Unsupported architecture" #endif /* SLJIT_CONFIG_ARM */ +#include <AvailabilityMacros.h> #include <pthread.h> #define SLJIT_MAP_JIT (MAP_JIT) @@ -149,7 +150,14 @@ static SLJIT_INLINE int get_map_jit_flag() static SLJIT_INLINE void apple_update_wx_flags(sljit_s32 enable_exec) { +#if MAC_OS_X_VERSION_MIN_REQUIRED >= 110000 pthread_jit_write_protect_np(enable_exec); +#elif defined(__clang__) + if (__builtin_available(macOS 11.0, *)) + pthread_jit_write_protect_np(enable_exec); +#else +#error "Must target Big Sur or newer" +#endif /* BigSur */ } #endif /* SLJIT_CONFIG_X86 */ #else /* !TARGET_OS_OSX */ @@ -187,10 +195,13 @@ static SLJIT_INLINE void* alloc_chunk(sljit_uw size) if (retval == MAP_FAILED) return NULL; +#ifdef __FreeBSD__ + /* HardenedBSD's mmap lies, so check permissions again */ if (mprotect(retval, size, PROT_READ | PROT_WRITE | PROT_EXEC) < 0) { munmap(retval, size); return NULL; } +#endif /* FreeBSD */ SLJIT_UPDATE_WX_FLAGS(retval, (uint8_t *)retval + size, 0); @@ -227,7 +238,7 @@ struct free_block { #define AS_FREE_BLOCK(base, offset) \ ((struct free_block*)(((sljit_u8*)base) + offset)) #define MEM_START(base) ((void*)(((sljit_u8*)base) + sizeof(struct block_header))) -#define ALIGN_SIZE(size) (((size) + sizeof(struct block_header) + 7) & ~7) +#define ALIGN_SIZE(size) (((size) + sizeof(struct block_header) + 7u) & ~(sljit_uw)7) static struct free_block* free_blocks; static sljit_uw allocated_size; diff --git a/thirdparty/pcre2/src/sljit/sljitLir.c b/thirdparty/pcre2/src/sljit/sljitLir.c index a24a99ab87..313a061dd3 100644 --- a/thirdparty/pcre2/src/sljit/sljitLir.c +++ b/thirdparty/pcre2/src/sljit/sljitLir.c @@ -90,26 +90,28 @@ #if !(defined SLJIT_CONFIG_UNSUPPORTED && SLJIT_CONFIG_UNSUPPORTED) +#define SSIZE_OF(type) ((sljit_s32)sizeof(sljit_ ## type)) + #define VARIABLE_FLAG_SHIFT (10) #define VARIABLE_FLAG_MASK (0x3f << VARIABLE_FLAG_SHIFT) #define GET_FLAG_TYPE(op) ((op) >> VARIABLE_FLAG_SHIFT) #define GET_OPCODE(op) \ - ((op) & ~(SLJIT_I32_OP | SLJIT_SET_Z | VARIABLE_FLAG_MASK)) + ((op) & ~(SLJIT_32 | SLJIT_SET_Z | VARIABLE_FLAG_MASK)) #define HAS_FLAGS(op) \ ((op) & (SLJIT_SET_Z | VARIABLE_FLAG_MASK)) #define GET_ALL_FLAGS(op) \ - ((op) & (SLJIT_I32_OP | SLJIT_SET_Z | VARIABLE_FLAG_MASK)) + ((op) & (SLJIT_32 | SLJIT_SET_Z | VARIABLE_FLAG_MASK)) #if (defined SLJIT_64BIT_ARCHITECTURE && SLJIT_64BIT_ARCHITECTURE) #define TYPE_CAST_NEEDED(op) \ ((op) >= SLJIT_MOV_U8 && (op) <= SLJIT_MOV_S32) -#else +#else /* !SLJIT_64BIT_ARCHITECTURE */ #define TYPE_CAST_NEEDED(op) \ ((op) >= SLJIT_MOV_U8 && (op) <= SLJIT_MOV_S16) -#endif +#endif /* SLJIT_64BIT_ARCHITECTURE */ #define BUF_SIZE 4096 @@ -126,11 +128,10 @@ #define TO_OFFS_REG(reg) ((reg) << 8) /* When reg cannot be unused. */ #define FAST_IS_REG(reg) ((reg) <= REG_MASK) -/* When reg can be unused. */ -#define SLOW_IS_REG(reg) ((reg) > 0 && (reg) <= REG_MASK) /* Mask for argument types. */ -#define SLJIT_DEF_MASK ((1 << SLJIT_DEF_SHIFT) - 1) +#define SLJIT_ARG_MASK 0x7 +#define SLJIT_ARG_FULL_MASK (SLJIT_ARG_MASK | SLJIT_ARG_TYPE_SCRATCH_REG) /* Jump flags. */ #define JUMP_LABEL 0x1 @@ -247,8 +248,11 @@ #define GET_SAVED_REGISTERS_SIZE(scratches, saveds, extra) \ (((scratches < SLJIT_NUMBER_OF_SCRATCH_REGISTERS ? 0 : (scratches - SLJIT_NUMBER_OF_SCRATCH_REGISTERS)) + \ - (saveds < SLJIT_NUMBER_OF_SAVED_REGISTERS ? saveds : SLJIT_NUMBER_OF_SAVED_REGISTERS) + \ - extra) * sizeof(sljit_sw)) + (saveds) + (sljit_s32)(extra)) * (sljit_s32)sizeof(sljit_sw)) + +#define GET_SAVED_FLOAT_REGISTERS_SIZE(fscratches, fsaveds, size) \ + (((fscratches < SLJIT_NUMBER_OF_SCRATCH_FLOAT_REGISTERS ? 0 : (fscratches - SLJIT_NUMBER_OF_SCRATCH_FLOAT_REGISTERS)) + \ + (fsaveds)) * (sljit_s32)(size)) #define ADJUST_LOCAL_OFFSET(p, i) \ if ((p) == (SLJIT_MEM1(SLJIT_SP))) \ @@ -379,9 +383,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_compiler* sljit_create_compiler(void *allo && (sizeof(sljit_sw) == 4 || sizeof(sljit_sw) == 8) && (sizeof(sljit_uw) == 4 || sizeof(sljit_uw) == 8), invalid_integer_types); - SLJIT_COMPILE_ASSERT(SLJIT_I32_OP == SLJIT_F32_OP, - int_op_and_single_op_must_be_the_same); - SLJIT_COMPILE_ASSERT(SLJIT_REWRITABLE_JUMP != SLJIT_F32_OP, + SLJIT_COMPILE_ASSERT(SLJIT_REWRITABLE_JUMP != SLJIT_32, rewritable_jump_and_single_op_must_not_be_the_same); SLJIT_COMPILE_ASSERT(!(SLJIT_EQUAL & 0x1) && !(SLJIT_LESS & 0x1) && !(SLJIT_EQUAL_F64 & 0x1) && !(SLJIT_JUMP & 0x1), conditional_flags_must_be_even_numbers); @@ -415,7 +417,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_compiler* sljit_create_compiler(void *allo compiler->local_size = -1; #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32) - compiler->args = -1; + compiler->args_size = -1; #endif #if (defined SLJIT_CONFIG_ARM_V5 && SLJIT_CONFIG_ARM_V5) @@ -439,6 +441,13 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_compiler* sljit_create_compiler(void *allo compiler->delay_slot = UNMOVABLE_INS; #endif +#if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) \ + || (defined SLJIT_DEBUG && SLJIT_DEBUG) + compiler->last_flags = 0; + compiler->last_return = -1; + compiler->logical_local_size = 0; +#endif + #if (defined SLJIT_NEEDS_COMPILER_INIT && SLJIT_NEEDS_COMPILER_INIT) if (!compiler_initialized) { init_compiler(); @@ -488,7 +497,7 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_free_code(void* code, void *exec_allocator_d SLJIT_UNUSED_ARG(exec_allocator_data); /* Remove thumb mode flag. */ - SLJIT_FREE_EXEC((void*)((sljit_uw)code & ~0x1), exec_allocator_data); + SLJIT_FREE_EXEC((void*)((sljit_uw)code & ~(sljit_uw)0x1), exec_allocator_data); } #elif (defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL) SLJIT_API_FUNC_ATTRIBUTE void sljit_free_code(void* code, void *exec_allocator_data) @@ -511,7 +520,7 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_free_code(void* code, void *exec_allocator_d SLJIT_API_FUNC_ATTRIBUTE void sljit_set_label(struct sljit_jump *jump, struct sljit_label* label) { if (SLJIT_LIKELY(!!jump) && SLJIT_LIKELY(!!label)) { - jump->flags &= ~JUMP_ADDR; + jump->flags &= (sljit_uw)~JUMP_ADDR; jump->flags |= JUMP_LABEL; jump->u.label = label; } @@ -520,7 +529,7 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_set_label(struct sljit_jump *jump, struct sl SLJIT_API_FUNC_ATTRIBUTE void sljit_set_target(struct sljit_jump *jump, sljit_uw target) { if (SLJIT_LIKELY(!!jump)) { - jump->flags &= ~JUMP_LABEL; + jump->flags &= (sljit_uw)~JUMP_LABEL; jump->flags |= JUMP_ADDR; jump->u.target = target; } @@ -533,7 +542,7 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_set_put_label(struct sljit_put_label *put_la } #define SLJIT_CURRENT_FLAGS_ALL \ - (SLJIT_CURRENT_FLAGS_I32_OP | SLJIT_CURRENT_FLAGS_ADD_SUB | SLJIT_CURRENT_FLAGS_COMPARE) + (SLJIT_CURRENT_FLAGS_32 | SLJIT_CURRENT_FLAGS_ADD | SLJIT_CURRENT_FLAGS_SUB | SLJIT_CURRENT_FLAGS_COMPARE) SLJIT_API_FUNC_ATTRIBUTE void sljit_set_current_flags(struct sljit_compiler *compiler, sljit_s32 current_flags) { @@ -547,7 +556,7 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_set_current_flags(struct sljit_compiler *com #if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) compiler->last_flags = 0; if ((current_flags & ~(VARIABLE_FLAG_MASK | SLJIT_SET_Z | SLJIT_CURRENT_FLAGS_ALL)) == 0) { - compiler->last_flags = GET_FLAG_TYPE(current_flags) | (current_flags & (SLJIT_I32_OP | SLJIT_SET_Z)); + compiler->last_flags = GET_FLAG_TYPE(current_flags) | (current_flags & (SLJIT_32 | SLJIT_SET_Z)); } #endif } @@ -607,7 +616,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_alloc_memory(struct sljit_compiler *compile return NULL; size = (size + 3) & ~3; #endif - return ensure_abuf(compiler, size); + return ensure_abuf(compiler, (sljit_uw)size); } static SLJIT_INLINE void reverse_buf(struct sljit_compiler *compiler) @@ -626,20 +635,6 @@ static SLJIT_INLINE void reverse_buf(struct sljit_compiler *compiler) compiler->buf = prev; } -static SLJIT_INLINE sljit_s32 get_arg_count(sljit_s32 arg_types) -{ - sljit_s32 arg_count = 0; - - arg_types >>= SLJIT_DEF_SHIFT; - while (arg_types) { - arg_count++; - arg_types >>= SLJIT_DEF_SHIFT; - } - - return arg_count; -} - - /* Only used in RISC architectures where the instruction size is constant */ #if !(defined SLJIT_CONFIG_X86 && SLJIT_CONFIG_X86) \ && !(defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X) @@ -679,6 +674,7 @@ static SLJIT_INLINE void set_emit_enter(struct sljit_compiler *compiler, compiler->fscratches = fscratches; compiler->fsaveds = fsaveds; #if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) + compiler->last_return = args & SLJIT_ARG_MASK; compiler->logical_local_size = local_size; #endif } @@ -696,6 +692,7 @@ static SLJIT_INLINE void set_set_context(struct sljit_compiler *compiler, compiler->fscratches = fscratches; compiler->fsaveds = fsaveds; #if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) + compiler->last_return = args & SLJIT_ARG_MASK; compiler->logical_local_size = local_size; #endif } @@ -711,7 +708,7 @@ static SLJIT_INLINE void set_label(struct sljit_label *label, struct sljit_compi compiler->last_label = label; } -static SLJIT_INLINE void set_jump(struct sljit_jump *jump, struct sljit_compiler *compiler, sljit_s32 flags) +static SLJIT_INLINE void set_jump(struct sljit_jump *jump, struct sljit_compiler *compiler, sljit_u32 flags) { jump->next = NULL; jump->flags = flags; @@ -751,6 +748,58 @@ static SLJIT_INLINE void set_put_label(struct sljit_put_label *put_label, struct #if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) +static sljit_s32 function_check_arguments(sljit_s32 arg_types, sljit_s32 scratches, sljit_s32 saveds, sljit_s32 fscratches) +{ + sljit_s32 word_arg_count, scratch_arg_end, saved_arg_count, float_arg_count, curr_type; + + curr_type = (arg_types & SLJIT_ARG_FULL_MASK); + + if (curr_type >= SLJIT_ARG_TYPE_F64) { + if (curr_type > SLJIT_ARG_TYPE_F32 || fscratches == 0) + return 0; + } else if (curr_type >= SLJIT_ARG_TYPE_W) { + if (scratches == 0) + return 0; + } + + arg_types >>= SLJIT_ARG_SHIFT; + + word_arg_count = 0; + scratch_arg_end = 0; + saved_arg_count = 0; + float_arg_count = 0; + while (arg_types != 0) { + if (word_arg_count + float_arg_count >= 4) + return 0; + + curr_type = (arg_types & SLJIT_ARG_MASK); + + if (arg_types & SLJIT_ARG_TYPE_SCRATCH_REG) { + if (saveds == -1 || curr_type < SLJIT_ARG_TYPE_W || curr_type > SLJIT_ARG_TYPE_P) + return 0; + + word_arg_count++; + scratch_arg_end = word_arg_count; + } else { + if (curr_type < SLJIT_ARG_TYPE_W || curr_type > SLJIT_ARG_TYPE_F32) + return 0; + + if (curr_type < SLJIT_ARG_TYPE_F64) { + word_arg_count++; + saved_arg_count++; + } else + float_arg_count++; + } + + arg_types >>= SLJIT_ARG_SHIFT; + } + + if (saveds == -1) + return (word_arg_count <= scratches && float_arg_count <= fscratches); + + return (saved_arg_count <= saveds && scratch_arg_end <= scratches && float_arg_count <= fscratches); +} + #define FUNCTION_CHECK_IS_REG(r) \ (((r) >= SLJIT_R0 && (r) < (SLJIT_R0 + compiler->scratches)) \ || ((r) > (SLJIT_S0 - compiler->saveds) && (r) <= SLJIT_S0)) @@ -773,14 +822,14 @@ static sljit_s32 function_check_src_mem(struct sljit_compiler *compiler, sljit_s if (!(p & SLJIT_MEM)) return 0; - if (!((p & REG_MASK) == SLJIT_UNUSED || FUNCTION_CHECK_IS_REG(p & REG_MASK))) + if (!(!(p & REG_MASK) || FUNCTION_CHECK_IS_REG(p & REG_MASK))) return 0; if (CHECK_IF_VIRTUAL_REGISTER(p & REG_MASK)) return 0; if (p & OFFS_REG_MASK) { - if ((p & REG_MASK) == SLJIT_UNUSED) + if (!(p & REG_MASK)) return 0; if (!(FUNCTION_CHECK_IS_REG(OFFS_REG(p)))) @@ -819,12 +868,12 @@ static sljit_s32 function_check_src(struct sljit_compiler *compiler, sljit_s32 p #define FUNCTION_CHECK_SRC(p, i) \ CHECK_ARGUMENT(function_check_src(compiler, p, i)); -static sljit_s32 function_check_dst(struct sljit_compiler *compiler, sljit_s32 p, sljit_sw i, sljit_s32 unused) +static sljit_s32 function_check_dst(struct sljit_compiler *compiler, sljit_s32 p, sljit_sw i) { if (compiler->scratches == -1 || compiler->saveds == -1) return 0; - if (FUNCTION_CHECK_IS_REG(p) || ((unused) && (p) == SLJIT_UNUSED)) + if (FUNCTION_CHECK_IS_REG(p)) return (i == 0); if (p == SLJIT_MEM1(SLJIT_SP)) @@ -833,8 +882,8 @@ static sljit_s32 function_check_dst(struct sljit_compiler *compiler, sljit_s32 p return function_check_src_mem(compiler, p, i); } -#define FUNCTION_CHECK_DST(p, i, unused) \ - CHECK_ARGUMENT(function_check_dst(compiler, p, i, unused)); +#define FUNCTION_CHECK_DST(p, i) \ + CHECK_ARGUMENT(function_check_dst(compiler, p, i)); static sljit_s32 function_fcheck(struct sljit_compiler *compiler, sljit_s32 p, sljit_sw i) { @@ -910,10 +959,8 @@ static void sljit_verbose_param(struct sljit_compiler *compiler, sljit_s32 p, sl } else fprintf(compiler->verbose, "[#%" SLJIT_PRINT_D "d]", (i)); - } else if (p) + } else sljit_verbose_reg(compiler, p); - else - fprintf(compiler->verbose, "unused"); } static void sljit_verbose_fparam(struct sljit_compiler *compiler, sljit_s32 p, sljit_sw i) @@ -940,63 +987,61 @@ static void sljit_verbose_fparam(struct sljit_compiler *compiler, sljit_s32 p, s } static const char* op0_names[] = { - (char*)"breakpoint", (char*)"nop", (char*)"lmul.uw", (char*)"lmul.sw", - (char*)"divmod.u", (char*)"divmod.s", (char*)"div.u", (char*)"div.s", - (char*)"endbr", (char*)"skip_frames_before_return" + "breakpoint", "nop", "lmul.uw", "lmul.sw", + "divmod.u", "divmod.s", "div.u", "div.s", + "endbr", "skip_frames_before_return" }; static const char* op1_names[] = { - (char*)"", (char*)".u8", (char*)".s8", (char*)".u16", - (char*)".s16", (char*)".u32", (char*)".s32", (char*)".p", - (char*)"", (char*)".u8", (char*)".s8", (char*)".u16", - (char*)".s16", (char*)".u32", (char*)".s32", (char*)".p", - (char*)"not", (char*)"neg", (char*)"clz", + "", ".u8", ".s8", ".u16", + ".s16", ".u32", ".s32", "32", + ".p", "not", "clz", }; static const char* op2_names[] = { - (char*)"add", (char*)"addc", (char*)"sub", (char*)"subc", - (char*)"mul", (char*)"and", (char*)"or", (char*)"xor", - (char*)"shl", (char*)"lshr", (char*)"ashr", + "add", "addc", "sub", "subc", + "mul", "and", "or", "xor", + "shl", "lshr", "ashr", }; static const char* op_src_names[] = { - (char*)"fast_return", (char*)"skip_frames_before_fast_return", - (char*)"prefetch_l1", (char*)"prefetch_l2", - (char*)"prefetch_l3", (char*)"prefetch_once", + "fast_return", "skip_frames_before_fast_return", + "prefetch_l1", "prefetch_l2", + "prefetch_l3", "prefetch_once", }; static const char* fop1_names[] = { - (char*)"mov", (char*)"conv", (char*)"conv", (char*)"conv", - (char*)"conv", (char*)"conv", (char*)"cmp", (char*)"neg", - (char*)"abs", + "mov", "conv", "conv", "conv", + "conv", "conv", "cmp", "neg", + "abs", }; static const char* fop2_names[] = { - (char*)"add", (char*)"sub", (char*)"mul", (char*)"div" + "add", "sub", "mul", "div" }; #define JUMP_POSTFIX(type) \ - ((type & 0xff) <= SLJIT_NOT_OVERFLOW ? ((type & SLJIT_I32_OP) ? "32" : "") \ - : ((type & 0xff) <= SLJIT_ORDERED_F64 ? ((type & SLJIT_F32_OP) ? ".f32" : ".f64") : "")) - -static char* jump_names[] = { - (char*)"equal", (char*)"not_equal", - (char*)"less", (char*)"greater_equal", - (char*)"greater", (char*)"less_equal", - (char*)"sig_less", (char*)"sig_greater_equal", - (char*)"sig_greater", (char*)"sig_less_equal", - (char*)"overflow", (char*)"not_overflow", - (char*)"carry", (char*)"", - (char*)"equal", (char*)"not_equal", - (char*)"less", (char*)"greater_equal", - (char*)"greater", (char*)"less_equal", - (char*)"unordered", (char*)"ordered", - (char*)"jump", (char*)"fast_call", - (char*)"call", (char*)"call.cdecl" + ((type & 0xff) <= SLJIT_NOT_OVERFLOW ? ((type & SLJIT_32) ? "32" : "") \ + : ((type & 0xff) <= SLJIT_ORDERED_F64 ? ((type & SLJIT_32) ? ".f32" : ".f64") : "")) + +static const char* jump_names[] = { + "equal", "not_equal", + "less", "greater_equal", + "greater", "less_equal", + "sig_less", "sig_greater_equal", + "sig_greater", "sig_less_equal", + "overflow", "not_overflow", + "carry", "", + "equal", "not_equal", + "less", "greater_equal", + "greater", "less_equal", + "unordered", "ordered", + "jump", "fast_call", + "call", "call.cdecl" }; -static char* call_arg_names[] = { - (char*)"void", (char*)"sw", (char*)"uw", (char*)"s32", (char*)"u32", (char*)"f32", (char*)"f64" +static const char* call_arg_names[] = { + "void", "w", "32", "p", "f64", "f32" }; #endif /* SLJIT_VERBOSE */ @@ -1032,48 +1077,40 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_enter(struct sljit_compil sljit_s32 options, sljit_s32 arg_types, sljit_s32 scratches, sljit_s32 saveds, sljit_s32 fscratches, sljit_s32 fsaveds, sljit_s32 local_size) { -#if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) - sljit_s32 types, arg_count, curr_type; -#endif - SLJIT_UNUSED_ARG(compiler); #if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) - CHECK_ARGUMENT(!(options & ~SLJIT_F64_ALIGNMENT)); + CHECK_ARGUMENT(!(options & ~SLJIT_ENTER_CDECL)); CHECK_ARGUMENT(scratches >= 0 && scratches <= SLJIT_NUMBER_OF_REGISTERS); - CHECK_ARGUMENT(saveds >= 0 && saveds <= SLJIT_NUMBER_OF_REGISTERS); + CHECK_ARGUMENT(saveds >= 0 && saveds <= SLJIT_NUMBER_OF_SAVED_REGISTERS); CHECK_ARGUMENT(scratches + saveds <= SLJIT_NUMBER_OF_REGISTERS); CHECK_ARGUMENT(fscratches >= 0 && fscratches <= SLJIT_NUMBER_OF_FLOAT_REGISTERS); - CHECK_ARGUMENT(fsaveds >= 0 && fsaveds <= SLJIT_NUMBER_OF_FLOAT_REGISTERS); + CHECK_ARGUMENT(fsaveds >= 0 && fsaveds <= SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS); CHECK_ARGUMENT(fscratches + fsaveds <= SLJIT_NUMBER_OF_FLOAT_REGISTERS); CHECK_ARGUMENT(local_size >= 0 && local_size <= SLJIT_MAX_LOCAL_SIZE); - CHECK_ARGUMENT((arg_types & SLJIT_DEF_MASK) == 0); - - types = (arg_types >> SLJIT_DEF_SHIFT); - arg_count = 0; - while (types != 0 && arg_count < 3) { - curr_type = (types & SLJIT_DEF_MASK); - CHECK_ARGUMENT(curr_type == SLJIT_ARG_TYPE_SW || curr_type == SLJIT_ARG_TYPE_UW); - arg_count++; - types >>= SLJIT_DEF_SHIFT; - } - CHECK_ARGUMENT(arg_count <= saveds && types == 0); + CHECK_ARGUMENT((arg_types & SLJIT_ARG_FULL_MASK) < SLJIT_ARG_TYPE_F64); + CHECK_ARGUMENT(function_check_arguments(arg_types, scratches, saveds, fscratches)); compiler->last_flags = 0; #endif #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) if (SLJIT_UNLIKELY(!!compiler->verbose)) { - fprintf(compiler->verbose, " enter options:%s args[", (options & SLJIT_F64_ALIGNMENT) ? "f64_align" : ""); - - arg_types >>= SLJIT_DEF_SHIFT; - while (arg_types) { - fprintf(compiler->verbose, "%s", call_arg_names[arg_types & SLJIT_DEF_MASK]); - arg_types >>= SLJIT_DEF_SHIFT; - if (arg_types) - fprintf(compiler->verbose, ","); + fprintf(compiler->verbose, " enter ret[%s", call_arg_names[arg_types & SLJIT_ARG_MASK]); + + arg_types >>= SLJIT_ARG_SHIFT; + if (arg_types) { + fprintf(compiler->verbose, "], args["); + do { + fprintf(compiler->verbose, "%s%s", call_arg_names[arg_types & SLJIT_ARG_MASK], + (arg_types & SLJIT_ARG_TYPE_SCRATCH_REG) ? "_r" : ""); + arg_types >>= SLJIT_ARG_SHIFT; + if (arg_types) + fprintf(compiler->verbose, ","); + } while (arg_types); } - fprintf(compiler->verbose, "] scratches:%d saveds:%d fscratches:%d fsaveds:%d local_size:%d\n", + fprintf(compiler->verbose, "],%s scratches:%d, saveds:%d, fscratches:%d, fsaveds:%d, local_size:%d\n", + (options & SLJIT_ENTER_CDECL) ? " enter:cdecl," : "", scratches, saveds, fscratches, fsaveds, local_size); } #endif @@ -1084,74 +1121,94 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_set_context(struct sljit_compi sljit_s32 options, sljit_s32 arg_types, sljit_s32 scratches, sljit_s32 saveds, sljit_s32 fscratches, sljit_s32 fsaveds, sljit_s32 local_size) { -#if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) - sljit_s32 types, arg_count, curr_type; -#endif - SLJIT_UNUSED_ARG(compiler); #if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) - CHECK_ARGUMENT(!(options & ~SLJIT_F64_ALIGNMENT)); + CHECK_ARGUMENT(!(options & ~SLJIT_ENTER_CDECL)); CHECK_ARGUMENT(scratches >= 0 && scratches <= SLJIT_NUMBER_OF_REGISTERS); - CHECK_ARGUMENT(saveds >= 0 && saveds <= SLJIT_NUMBER_OF_REGISTERS); + CHECK_ARGUMENT(saveds >= 0 && saveds <= SLJIT_NUMBER_OF_SAVED_REGISTERS); CHECK_ARGUMENT(scratches + saveds <= SLJIT_NUMBER_OF_REGISTERS); CHECK_ARGUMENT(fscratches >= 0 && fscratches <= SLJIT_NUMBER_OF_FLOAT_REGISTERS); - CHECK_ARGUMENT(fsaveds >= 0 && fsaveds <= SLJIT_NUMBER_OF_FLOAT_REGISTERS); + CHECK_ARGUMENT(fsaveds >= 0 && fsaveds <= SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS); CHECK_ARGUMENT(fscratches + fsaveds <= SLJIT_NUMBER_OF_FLOAT_REGISTERS); CHECK_ARGUMENT(local_size >= 0 && local_size <= SLJIT_MAX_LOCAL_SIZE); - - types = (arg_types >> SLJIT_DEF_SHIFT); - arg_count = 0; - while (types != 0 && arg_count < 3) { - curr_type = (types & SLJIT_DEF_MASK); - CHECK_ARGUMENT(curr_type == SLJIT_ARG_TYPE_SW || curr_type == SLJIT_ARG_TYPE_UW); - arg_count++; - types >>= SLJIT_DEF_SHIFT; - } - CHECK_ARGUMENT(arg_count <= saveds && types == 0); + CHECK_ARGUMENT((arg_types & SLJIT_ARG_FULL_MASK) < SLJIT_ARG_TYPE_F64); + CHECK_ARGUMENT(function_check_arguments(arg_types, scratches, saveds, fscratches)); compiler->last_flags = 0; #endif #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) if (SLJIT_UNLIKELY(!!compiler->verbose)) { - fprintf(compiler->verbose, " set_context options:%s args[", (options & SLJIT_F64_ALIGNMENT) ? "f64_align" : ""); - - arg_types >>= SLJIT_DEF_SHIFT; - while (arg_types) { - fprintf(compiler->verbose, "%s", call_arg_names[arg_types & SLJIT_DEF_MASK]); - arg_types >>= SLJIT_DEF_SHIFT; - if (arg_types) - fprintf(compiler->verbose, ","); + fprintf(compiler->verbose, " set_context ret[%s", call_arg_names[arg_types & SLJIT_ARG_MASK]); + + arg_types >>= SLJIT_ARG_SHIFT; + if (arg_types) { + fprintf(compiler->verbose, "], args["); + do { + fprintf(compiler->verbose, "%s%s", call_arg_names[arg_types & SLJIT_ARG_MASK], + (arg_types & SLJIT_ARG_TYPE_SCRATCH_REG) ? "_r" : ""); + arg_types >>= SLJIT_ARG_SHIFT; + if (arg_types) + fprintf(compiler->verbose, ","); + } while (arg_types); } - fprintf(compiler->verbose, "] scratches:%d saveds:%d fscratches:%d fsaveds:%d local_size:%d\n", + fprintf(compiler->verbose, "],%s scratches:%d, saveds:%d, fscratches:%d, fsaveds:%d, local_size:%d\n", + (options & SLJIT_ENTER_CDECL) ? " enter:cdecl," : "", scratches, saveds, fscratches, fsaveds, local_size); } #endif CHECK_RETURN_OK; } +static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_return_void(struct sljit_compiler *compiler) +{ + if (SLJIT_UNLIKELY(compiler->skip_checks)) { + compiler->skip_checks = 0; + CHECK_RETURN_OK; + } + +#if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) + CHECK_ARGUMENT(compiler->last_return == SLJIT_ARG_TYPE_VOID); +#endif + +#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) + if (SLJIT_UNLIKELY(!!compiler->verbose)) { + fprintf(compiler->verbose, " return_void\n"); + } +#endif + CHECK_RETURN_OK; +} + static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_return(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src, sljit_sw srcw) { #if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) CHECK_ARGUMENT(compiler->scratches >= 0); - if (op != SLJIT_UNUSED) { - CHECK_ARGUMENT(op >= SLJIT_MOV && op <= SLJIT_MOV_P); - FUNCTION_CHECK_SRC(src, srcw); + + switch (compiler->last_return) { + case SLJIT_ARG_TYPE_W: + CHECK_ARGUMENT(op >= SLJIT_MOV && op <= SLJIT_MOV_S32); + break; + case SLJIT_ARG_TYPE_32: + CHECK_ARGUMENT(op == SLJIT_MOV32 || (op >= SLJIT_MOV32_U8 && op <= SLJIT_MOV32_S16)); + break; + case SLJIT_ARG_TYPE_P: + CHECK_ARGUMENT(op == SLJIT_MOV_P); + break; + default: + /* Context not initialized, void, etc. */ + CHECK_ARGUMENT(0); + break; } - else - CHECK_ARGUMENT(src == 0 && srcw == 0); + FUNCTION_CHECK_SRC(src, srcw); compiler->last_flags = 0; #endif #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) if (SLJIT_UNLIKELY(!!compiler->verbose)) { - if (op == SLJIT_UNUSED) - fprintf(compiler->verbose, " return\n"); - else { - fprintf(compiler->verbose, " return%s ", op1_names[op - SLJIT_OP1_BASE]); - sljit_verbose_param(compiler, src, srcw); - fprintf(compiler->verbose, "\n"); - } + fprintf(compiler->verbose, " return%s%s ", !(op & SLJIT_32) ? "" : "32", + op1_names[GET_OPCODE(op) - SLJIT_OP1_BASE]); + sljit_verbose_param(compiler, src, srcw); + fprintf(compiler->verbose, "\n"); } #endif CHECK_RETURN_OK; @@ -1160,7 +1217,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_return(struct sljit_compi static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_fast_enter(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw dstw) { #if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) - FUNCTION_CHECK_DST(dst, dstw, 0); + FUNCTION_CHECK_DST(dst, dstw); compiler->last_flags = 0; #endif #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) @@ -1177,7 +1234,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_op0(struct sljit_compiler { #if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) CHECK_ARGUMENT((op >= SLJIT_BREAKPOINT && op <= SLJIT_LMUL_SW) - || ((op & ~SLJIT_I32_OP) >= SLJIT_DIVMOD_UW && (op & ~SLJIT_I32_OP) <= SLJIT_DIV_SW) + || ((op & ~SLJIT_32) >= SLJIT_DIVMOD_UW && (op & ~SLJIT_32) <= SLJIT_DIV_SW) || (op >= SLJIT_ENDBR && op <= SLJIT_SKIP_FRAMES_BEFORE_RETURN)); CHECK_ARGUMENT(GET_OPCODE(op) < SLJIT_LMUL_UW || GET_OPCODE(op) >= SLJIT_ENDBR || compiler->scratches >= 2); if ((GET_OPCODE(op) >= SLJIT_LMUL_UW && GET_OPCODE(op) <= SLJIT_DIV_SW) || op == SLJIT_SKIP_FRAMES_BEFORE_RETURN) @@ -1188,7 +1245,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_op0(struct sljit_compiler { fprintf(compiler->verbose, " %s", op0_names[GET_OPCODE(op) - SLJIT_OP0_BASE]); if (GET_OPCODE(op) >= SLJIT_DIVMOD_UW && GET_OPCODE(op) <= SLJIT_DIV_SW) { - fprintf(compiler->verbose, (op & SLJIT_I32_OP) ? "32" : "w"); + fprintf(compiler->verbose, (op & SLJIT_32) ? "32" : "w"); } fprintf(compiler->verbose, "\n"); } @@ -1210,43 +1267,39 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_op1(struct sljit_compiler switch (GET_OPCODE(op)) { case SLJIT_NOT: - /* Only SLJIT_I32_OP and SLJIT_SET_Z are allowed. */ + /* Only SLJIT_32 and SLJIT_SET_Z are allowed. */ CHECK_ARGUMENT(!(op & VARIABLE_FLAG_MASK)); break; - case SLJIT_NEG: - CHECK_ARGUMENT(!(op & VARIABLE_FLAG_MASK) - || GET_FLAG_TYPE(op) == SLJIT_OVERFLOW); - break; case SLJIT_MOV: case SLJIT_MOV_U32: case SLJIT_MOV_P: /* Nothing allowed */ - CHECK_ARGUMENT(!(op & (SLJIT_I32_OP | SLJIT_SET_Z | VARIABLE_FLAG_MASK))); + CHECK_ARGUMENT(!(op & (SLJIT_32 | SLJIT_SET_Z | VARIABLE_FLAG_MASK))); break; default: - /* Only SLJIT_I32_OP is allowed. */ + /* Only SLJIT_32 is allowed. */ CHECK_ARGUMENT(!(op & (SLJIT_SET_Z | VARIABLE_FLAG_MASK))); break; } - FUNCTION_CHECK_DST(dst, dstw, HAS_FLAGS(op)); + FUNCTION_CHECK_DST(dst, dstw); FUNCTION_CHECK_SRC(src, srcw); if (GET_OPCODE(op) >= SLJIT_NOT) { CHECK_ARGUMENT(src != SLJIT_IMM); - compiler->last_flags = GET_FLAG_TYPE(op) | (op & (SLJIT_I32_OP | SLJIT_SET_Z)); + compiler->last_flags = GET_FLAG_TYPE(op) | (op & (SLJIT_32 | SLJIT_SET_Z)); } #endif #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) if (SLJIT_UNLIKELY(!!compiler->verbose)) { if (GET_OPCODE(op) <= SLJIT_MOV_P) { - fprintf(compiler->verbose, " mov%s%s ", !(op & SLJIT_I32_OP) ? "" : "32", - (op != SLJIT_MOV32) ? op1_names[GET_OPCODE(op) - SLJIT_OP1_BASE] : ""); + fprintf(compiler->verbose, " mov%s%s ", !(op & SLJIT_32) ? "" : "32", + op1_names[GET_OPCODE(op) - SLJIT_OP1_BASE]); } else { - fprintf(compiler->verbose, " %s%s%s%s%s ", op1_names[GET_OPCODE(op) - SLJIT_OP1_BASE], !(op & SLJIT_I32_OP) ? "" : "32", + fprintf(compiler->verbose, " %s%s%s%s%s ", op1_names[GET_OPCODE(op) - SLJIT_OP1_BASE], !(op & SLJIT_32) ? "" : "32", !(op & SLJIT_SET_Z) ? "" : ".z", !(op & VARIABLE_FLAG_MASK) ? "" : ".", !(op & VARIABLE_FLAG_MASK) ? "" : jump_names[GET_FLAG_TYPE(op)]); } @@ -1260,7 +1313,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_op1(struct sljit_compiler CHECK_RETURN_OK; } -static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_op2(struct sljit_compiler *compiler, sljit_s32 op, +static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_op2(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 unset, sljit_s32 dst, sljit_sw dstw, sljit_s32 src1, sljit_sw src1w, sljit_s32 src2, sljit_sw src2w) @@ -1302,24 +1355,31 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_op2(struct sljit_compiler CHECK_ARGUMENT(!(op & VARIABLE_FLAG_MASK) || GET_FLAG_TYPE(op) == GET_FLAG_TYPE(SLJIT_SET_CARRY)); CHECK_ARGUMENT((compiler->last_flags & 0xff) == GET_FLAG_TYPE(SLJIT_SET_CARRY)); - CHECK_ARGUMENT((op & SLJIT_I32_OP) == (compiler->last_flags & SLJIT_I32_OP)); + CHECK_ARGUMENT((op & SLJIT_32) == (compiler->last_flags & SLJIT_32)); break; default: SLJIT_UNREACHABLE(); break; } - FUNCTION_CHECK_DST(dst, dstw, HAS_FLAGS(op)); + if (unset) { + CHECK_ARGUMENT(HAS_FLAGS(op)); + } else { + FUNCTION_CHECK_DST(dst, dstw); + } FUNCTION_CHECK_SRC(src1, src1w); FUNCTION_CHECK_SRC(src2, src2w); - compiler->last_flags = GET_FLAG_TYPE(op) | (op & (SLJIT_I32_OP | SLJIT_SET_Z)); + compiler->last_flags = GET_FLAG_TYPE(op) | (op & (SLJIT_32 | SLJIT_SET_Z)); #endif #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) if (SLJIT_UNLIKELY(!!compiler->verbose)) { - fprintf(compiler->verbose, " %s%s%s%s%s ", op2_names[GET_OPCODE(op) - SLJIT_OP2_BASE], !(op & SLJIT_I32_OP) ? "" : "32", + fprintf(compiler->verbose, " %s%s%s%s%s ", op2_names[GET_OPCODE(op) - SLJIT_OP2_BASE], !(op & SLJIT_32) ? "" : "32", !(op & SLJIT_SET_Z) ? "" : ".z", !(op & VARIABLE_FLAG_MASK) ? "" : ".", !(op & VARIABLE_FLAG_MASK) ? "" : jump_names[GET_FLAG_TYPE(op)]); - sljit_verbose_param(compiler, dst, dstw); + if (unset) + fprintf(compiler->verbose, "unset"); + else + sljit_verbose_param(compiler, dst, dstw); fprintf(compiler->verbose, ", "); sljit_verbose_param(compiler, src1, src1w); fprintf(compiler->verbose, ", "); @@ -1376,10 +1436,10 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_get_float_register_index(sljit } static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_op_custom(struct sljit_compiler *compiler, - void *instruction, sljit_s32 size) + void *instruction, sljit_u32 size) { #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) - int i; + sljit_u32 i; #endif SLJIT_UNUSED_ARG(compiler); @@ -1431,10 +1491,10 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_fop1(struct sljit_compile if (SLJIT_UNLIKELY(!!compiler->verbose)) { if (GET_OPCODE(op) == SLJIT_CONV_F64_FROM_F32) fprintf(compiler->verbose, " %s%s ", fop1_names[SLJIT_CONV_F64_FROM_F32 - SLJIT_FOP1_BASE], - (op & SLJIT_F32_OP) ? ".f32.from.f64" : ".f64.from.f32"); + (op & SLJIT_32) ? ".f32.from.f64" : ".f64.from.f32"); else fprintf(compiler->verbose, " %s%s ", fop1_names[GET_OPCODE(op) - SLJIT_FOP1_BASE], - (op & SLJIT_F32_OP) ? ".f32" : ".f64"); + (op & SLJIT_32) ? ".f32" : ".f64"); sljit_verbose_fparam(compiler, dst, dstw); fprintf(compiler->verbose, ", "); @@ -1450,7 +1510,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_fop1_cmp(struct sljit_com sljit_s32 src2, sljit_sw src2w) { #if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) - compiler->last_flags = GET_FLAG_TYPE(op) | (op & (SLJIT_I32_OP | SLJIT_SET_Z)); + compiler->last_flags = GET_FLAG_TYPE(op) | (op & (SLJIT_32 | SLJIT_SET_Z)); #endif if (SLJIT_UNLIKELY(compiler->skip_checks)) { @@ -1469,7 +1529,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_fop1_cmp(struct sljit_com #endif #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) if (SLJIT_UNLIKELY(!!compiler->verbose)) { - fprintf(compiler->verbose, " %s%s", fop1_names[SLJIT_CMP_F64 - SLJIT_FOP1_BASE], (op & SLJIT_F32_OP) ? ".f32" : ".f64"); + fprintf(compiler->verbose, " %s%s", fop1_names[SLJIT_CMP_F64 - SLJIT_FOP1_BASE], (op & SLJIT_32) ? ".f32" : ".f64"); if (op & VARIABLE_FLAG_MASK) { fprintf(compiler->verbose, ".%s_f", jump_names[GET_FLAG_TYPE(op)]); } @@ -1497,13 +1557,13 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_fop1_conv_sw_from_f64(str CHECK_ARGUMENT(GET_OPCODE(op) >= SLJIT_CONV_SW_FROM_F64 && GET_OPCODE(op) <= SLJIT_CONV_S32_FROM_F64); CHECK_ARGUMENT(!(op & (SLJIT_SET_Z | VARIABLE_FLAG_MASK))); FUNCTION_FCHECK(src, srcw); - FUNCTION_CHECK_DST(dst, dstw, 0); + FUNCTION_CHECK_DST(dst, dstw); #endif #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) if (SLJIT_UNLIKELY(!!compiler->verbose)) { fprintf(compiler->verbose, " %s%s.from%s ", fop1_names[GET_OPCODE(op) - SLJIT_FOP1_BASE], (GET_OPCODE(op) == SLJIT_CONV_S32_FROM_F64) ? ".s32" : ".sw", - (op & SLJIT_F32_OP) ? ".f32" : ".f64"); + (op & SLJIT_32) ? ".f32" : ".f64"); sljit_verbose_param(compiler, dst, dstw); fprintf(compiler->verbose, ", "); sljit_verbose_fparam(compiler, src, srcw); @@ -1532,7 +1592,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_fop1_conv_f64_from_sw(str #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) if (SLJIT_UNLIKELY(!!compiler->verbose)) { fprintf(compiler->verbose, " %s%s.from%s ", fop1_names[GET_OPCODE(op) - SLJIT_FOP1_BASE], - (op & SLJIT_F32_OP) ? ".f32" : ".f64", + (op & SLJIT_32) ? ".f32" : ".f64", (GET_OPCODE(op) == SLJIT_CONV_F64_FROM_S32) ? ".s32" : ".sw"); sljit_verbose_fparam(compiler, dst, dstw); fprintf(compiler->verbose, ", "); @@ -1558,7 +1618,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_fop2(struct sljit_compile #endif #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) if (SLJIT_UNLIKELY(!!compiler->verbose)) { - fprintf(compiler->verbose, " %s%s ", fop2_names[GET_OPCODE(op) - SLJIT_FOP2_BASE], (op & SLJIT_F32_OP) ? ".f32" : ".f64"); + fprintf(compiler->verbose, " %s%s ", fop2_names[GET_OPCODE(op) - SLJIT_FOP2_BASE], (op & SLJIT_32) ? ".f32" : ".f64"); sljit_verbose_fparam(compiler, dst, dstw); fprintf(compiler->verbose, ", "); sljit_verbose_fparam(compiler, src1, src1w); @@ -1598,15 +1658,17 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_jump(struct sljit_compile } #if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) - CHECK_ARGUMENT(!(type & ~(0xff | SLJIT_REWRITABLE_JUMP | SLJIT_I32_OP))); - CHECK_ARGUMENT((type & 0xff) != GET_FLAG_TYPE(SLJIT_SET_CARRY) && (type & 0xff) != (GET_FLAG_TYPE(SLJIT_SET_CARRY) + 1)); + CHECK_ARGUMENT(!(type & ~(0xff | SLJIT_REWRITABLE_JUMP | SLJIT_32))); CHECK_ARGUMENT((type & 0xff) >= SLJIT_EQUAL && (type & 0xff) <= SLJIT_FAST_CALL); - CHECK_ARGUMENT((type & 0xff) < SLJIT_JUMP || !(type & SLJIT_I32_OP)); + CHECK_ARGUMENT((type & 0xff) < SLJIT_JUMP || !(type & SLJIT_32)); if ((type & 0xff) < SLJIT_JUMP) { if ((type & 0xff) <= SLJIT_NOT_ZERO) CHECK_ARGUMENT(compiler->last_flags & SLJIT_SET_Z); - else + else if ((compiler->last_flags & 0xff) == SLJIT_CARRY) { + CHECK_ARGUMENT((type & 0xff) == SLJIT_CARRY || (type & 0xff) == SLJIT_NOT_CARRY); + compiler->last_flags = 0; + } else CHECK_ARGUMENT((type & 0xff) == (compiler->last_flags & 0xff) || ((type & 0xff) == SLJIT_NOT_OVERFLOW && (compiler->last_flags & 0xff) == SLJIT_OVERFLOW)); } @@ -1623,49 +1685,27 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_call(struct sljit_compile sljit_s32 arg_types) { #if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) - sljit_s32 i, types, curr_type, scratches, fscratches; - - CHECK_ARGUMENT(!(type & ~(0xff | SLJIT_REWRITABLE_JUMP))); + CHECK_ARGUMENT(!(type & ~(0xff | SLJIT_REWRITABLE_JUMP | SLJIT_CALL_RETURN))); CHECK_ARGUMENT((type & 0xff) == SLJIT_CALL || (type & 0xff) == SLJIT_CALL_CDECL); + CHECK_ARGUMENT(function_check_arguments(arg_types, compiler->scratches, -1, compiler->fscratches)); - types = arg_types; - scratches = 0; - fscratches = 0; - for (i = 0; i < 5; i++) { - curr_type = (types & SLJIT_DEF_MASK); - CHECK_ARGUMENT(curr_type <= SLJIT_ARG_TYPE_F64); - if (i > 0) { - if (curr_type == 0) { - break; - } - if (curr_type >= SLJIT_ARG_TYPE_F32) - fscratches++; - else - scratches++; - } else { - if (curr_type >= SLJIT_ARG_TYPE_F32) { - CHECK_ARGUMENT(compiler->fscratches > 0); - } else if (curr_type >= SLJIT_ARG_TYPE_SW) { - CHECK_ARGUMENT(compiler->scratches > 0); - } - } - types >>= SLJIT_DEF_SHIFT; + if (type & SLJIT_CALL_RETURN) { + CHECK_ARGUMENT((arg_types & SLJIT_ARG_MASK) == compiler->last_return); } - CHECK_ARGUMENT(compiler->scratches >= scratches); - CHECK_ARGUMENT(compiler->fscratches >= fscratches); - CHECK_ARGUMENT(types == 0); #endif #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) if (SLJIT_UNLIKELY(!!compiler->verbose)) { - fprintf(compiler->verbose, " %s%s ret[%s", jump_names[type & 0xff], - !(type & SLJIT_REWRITABLE_JUMP) ? "" : ".r", call_arg_names[arg_types & SLJIT_DEF_MASK]); + fprintf(compiler->verbose, " %s%s%s ret[%s", jump_names[type & 0xff], + !(type & SLJIT_REWRITABLE_JUMP) ? "" : ".r", + !(type & SLJIT_CALL_RETURN) ? "" : ".ret", + call_arg_names[arg_types & SLJIT_ARG_MASK]); - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; if (arg_types) { fprintf(compiler->verbose, "], args["); do { - fprintf(compiler->verbose, "%s", call_arg_names[arg_types & SLJIT_DEF_MASK]); - arg_types >>= SLJIT_DEF_SHIFT; + fprintf(compiler->verbose, "%s", call_arg_names[arg_types & SLJIT_ARG_MASK]); + arg_types >>= SLJIT_ARG_SHIFT; if (arg_types) fprintf(compiler->verbose, ","); } while (arg_types); @@ -1681,7 +1721,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_cmp(struct sljit_compiler sljit_s32 src2, sljit_sw src2w) { #if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) - CHECK_ARGUMENT(!(type & ~(0xff | SLJIT_REWRITABLE_JUMP | SLJIT_I32_OP))); + CHECK_ARGUMENT(!(type & ~(0xff | SLJIT_REWRITABLE_JUMP | SLJIT_32))); CHECK_ARGUMENT((type & 0xff) >= SLJIT_EQUAL && (type & 0xff) <= SLJIT_SIG_LESS_EQUAL); FUNCTION_CHECK_SRC(src1, src1w); FUNCTION_CHECK_SRC(src2, src2w); @@ -1690,7 +1730,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_cmp(struct sljit_compiler #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) if (SLJIT_UNLIKELY(!!compiler->verbose)) { fprintf(compiler->verbose, " cmp%s %s%s, ", !(type & SLJIT_REWRITABLE_JUMP) ? "" : ".r", - jump_names[type & 0xff], (type & SLJIT_I32_OP) ? "32" : ""); + jump_names[type & 0xff], (type & SLJIT_32) ? "32" : ""); sljit_verbose_param(compiler, src1, src1w); fprintf(compiler->verbose, ", "); sljit_verbose_param(compiler, src2, src2w); @@ -1706,7 +1746,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_fcmp(struct sljit_compile { #if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) CHECK_ARGUMENT(sljit_has_cpu_feature(SLJIT_HAS_FPU)); - CHECK_ARGUMENT(!(type & ~(0xff | SLJIT_REWRITABLE_JUMP | SLJIT_F32_OP))); + CHECK_ARGUMENT(!(type & ~(0xff | SLJIT_REWRITABLE_JUMP | SLJIT_32))); CHECK_ARGUMENT((type & 0xff) >= SLJIT_EQUAL_F64 && (type & 0xff) <= SLJIT_ORDERED_F64); FUNCTION_FCHECK(src1, src1w); FUNCTION_FCHECK(src2, src2w); @@ -1715,7 +1755,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_fcmp(struct sljit_compile #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) if (SLJIT_UNLIKELY(!!compiler->verbose)) { fprintf(compiler->verbose, " fcmp%s %s%s, ", !(type & SLJIT_REWRITABLE_JUMP) ? "" : ".r", - jump_names[type & 0xff], (type & SLJIT_F32_OP) ? ".f32" : ".f64"); + jump_names[type & 0xff], (type & SLJIT_32) ? ".f32" : ".f64"); sljit_verbose_fparam(compiler, src1, src1w); fprintf(compiler->verbose, ", "); sljit_verbose_fparam(compiler, src2, src2w); @@ -1752,49 +1792,27 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_icall(struct sljit_compil sljit_s32 src, sljit_sw srcw) { #if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) - sljit_s32 i, types, curr_type, scratches, fscratches; - - CHECK_ARGUMENT(type == SLJIT_CALL || type == SLJIT_CALL_CDECL); + CHECK_ARGUMENT(!(type & ~(0xff | SLJIT_CALL_RETURN))); + CHECK_ARGUMENT((type & 0xff) == SLJIT_CALL || (type & 0xff) == SLJIT_CALL_CDECL); + CHECK_ARGUMENT(function_check_arguments(arg_types, compiler->scratches, -1, compiler->fscratches)); FUNCTION_CHECK_SRC(src, srcw); - types = arg_types; - scratches = 0; - fscratches = 0; - for (i = 0; i < 5; i++) { - curr_type = (types & SLJIT_DEF_MASK); - CHECK_ARGUMENT(curr_type <= SLJIT_ARG_TYPE_F64); - if (i > 0) { - if (curr_type == 0) { - break; - } - if (curr_type >= SLJIT_ARG_TYPE_F32) - fscratches++; - else - scratches++; - } else { - if (curr_type >= SLJIT_ARG_TYPE_F32) { - CHECK_ARGUMENT(compiler->fscratches > 0); - } else if (curr_type >= SLJIT_ARG_TYPE_SW) { - CHECK_ARGUMENT(compiler->scratches > 0); - } - } - types >>= SLJIT_DEF_SHIFT; + if (type & SLJIT_CALL_RETURN) { + CHECK_ARGUMENT((arg_types & SLJIT_ARG_MASK) == compiler->last_return); } - CHECK_ARGUMENT(compiler->scratches >= scratches); - CHECK_ARGUMENT(compiler->fscratches >= fscratches); - CHECK_ARGUMENT(types == 0); #endif #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) if (SLJIT_UNLIKELY(!!compiler->verbose)) { fprintf(compiler->verbose, " i%s%s ret[%s", jump_names[type & 0xff], - !(type & SLJIT_REWRITABLE_JUMP) ? "" : ".r", call_arg_names[arg_types & SLJIT_DEF_MASK]); + !(type & SLJIT_CALL_RETURN) ? "" : ".ret", + call_arg_names[arg_types & SLJIT_ARG_MASK]); - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; if (arg_types) { fprintf(compiler->verbose, "], args["); do { - fprintf(compiler->verbose, "%s", call_arg_names[arg_types & SLJIT_DEF_MASK]); - arg_types >>= SLJIT_DEF_SHIFT; + fprintf(compiler->verbose, "%s", call_arg_names[arg_types & SLJIT_ARG_MASK]); + arg_types >>= SLJIT_ARG_SHIFT; if (arg_types) fprintf(compiler->verbose, ","); } while (arg_types); @@ -1812,9 +1830,8 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_op_flags(struct sljit_com sljit_s32 type) { #if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) - CHECK_ARGUMENT(!(type & ~(0xff | SLJIT_I32_OP))); + CHECK_ARGUMENT(!(type & ~(0xff | SLJIT_32))); CHECK_ARGUMENT((type & 0xff) >= SLJIT_EQUAL && (type & 0xff) <= SLJIT_ORDERED_F64); - CHECK_ARGUMENT((type & 0xff) != GET_FLAG_TYPE(SLJIT_SET_CARRY) && (type & 0xff) != (GET_FLAG_TYPE(SLJIT_SET_CARRY) + 1)); CHECK_ARGUMENT(op == SLJIT_MOV || op == SLJIT_MOV32 || (GET_OPCODE(op) >= SLJIT_AND && GET_OPCODE(op) <= SLJIT_XOR)); CHECK_ARGUMENT(!(op & VARIABLE_FLAG_MASK)); @@ -1823,19 +1840,20 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_op_flags(struct sljit_com CHECK_ARGUMENT(compiler->last_flags & SLJIT_SET_Z); else CHECK_ARGUMENT((type & 0xff) == (compiler->last_flags & 0xff) + || ((type & 0xff) == SLJIT_NOT_CARRY && (compiler->last_flags & 0xff) == SLJIT_CARRY) || ((type & 0xff) == SLJIT_NOT_OVERFLOW && (compiler->last_flags & 0xff) == SLJIT_OVERFLOW)); - FUNCTION_CHECK_DST(dst, dstw, 0); + FUNCTION_CHECK_DST(dst, dstw); if (GET_OPCODE(op) >= SLJIT_ADD) - compiler->last_flags = GET_FLAG_TYPE(op) | (op & (SLJIT_I32_OP | SLJIT_SET_Z)); + compiler->last_flags = GET_FLAG_TYPE(op) | (op & (SLJIT_32 | SLJIT_SET_Z)); #endif #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) if (SLJIT_UNLIKELY(!!compiler->verbose)) { fprintf(compiler->verbose, " flags%s %s%s, ", !(op & SLJIT_SET_Z) ? "" : ".z", GET_OPCODE(op) < SLJIT_OP2_BASE ? "mov" : op2_names[GET_OPCODE(op) - SLJIT_OP2_BASE], - GET_OPCODE(op) < SLJIT_OP2_BASE ? op1_names[GET_OPCODE(op) - SLJIT_OP1_BASE] : ((op & SLJIT_I32_OP) ? "32" : "")); + GET_OPCODE(op) < SLJIT_OP2_BASE ? op1_names[GET_OPCODE(op) - SLJIT_OP1_BASE] : ((op & SLJIT_32) ? "32" : "")); sljit_verbose_param(compiler, dst, dstw); fprintf(compiler->verbose, ", %s%s\n", jump_names[type & 0xff], JUMP_POSTFIX(type)); } @@ -1848,11 +1866,11 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_cmov(struct sljit_compile sljit_s32 src, sljit_sw srcw) { #if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) - CHECK_ARGUMENT(!(type & ~(0xff | SLJIT_I32_OP))); + CHECK_ARGUMENT(!(type & ~(0xff | SLJIT_32))); CHECK_ARGUMENT((type & 0xff) >= SLJIT_EQUAL && (type & 0xff) <= SLJIT_ORDERED_F64); CHECK_ARGUMENT(compiler->scratches != -1 && compiler->saveds != -1); - CHECK_ARGUMENT(FUNCTION_CHECK_IS_REG(dst_reg & ~SLJIT_I32_OP)); + CHECK_ARGUMENT(FUNCTION_CHECK_IS_REG(dst_reg & ~SLJIT_32)); if (src != SLJIT_IMM) { CHECK_ARGUMENT(FUNCTION_CHECK_IS_REG(src)); CHECK_ARGUMENT(srcw == 0); @@ -1867,9 +1885,9 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_cmov(struct sljit_compile #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) if (SLJIT_UNLIKELY(!!compiler->verbose)) { fprintf(compiler->verbose, " cmov%s %s%s, ", - !(dst_reg & SLJIT_I32_OP) ? "" : "32", + !(dst_reg & SLJIT_32) ? "" : "32", jump_names[type & 0xff], JUMP_POSTFIX(type)); - sljit_verbose_reg(compiler, dst_reg & ~SLJIT_I32_OP); + sljit_verbose_reg(compiler, dst_reg & ~SLJIT_32); fprintf(compiler->verbose, ", "); sljit_verbose_param(compiler, src, srcw); fprintf(compiler->verbose, "\n"); @@ -1884,15 +1902,15 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_mem(struct sljit_compiler { #if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) CHECK_ARGUMENT((type & 0xff) >= SLJIT_MOV && (type & 0xff) <= SLJIT_MOV_P); - CHECK_ARGUMENT(!(type & SLJIT_I32_OP) || ((type & 0xff) != SLJIT_MOV && (type & 0xff) != SLJIT_MOV_U32 && (type & 0xff) != SLJIT_MOV_P)); + CHECK_ARGUMENT(!(type & SLJIT_32) || ((type & 0xff) != SLJIT_MOV && (type & 0xff) != SLJIT_MOV_U32 && (type & 0xff) != SLJIT_MOV_P)); CHECK_ARGUMENT((type & SLJIT_MEM_PRE) || (type & SLJIT_MEM_POST)); CHECK_ARGUMENT((type & (SLJIT_MEM_PRE | SLJIT_MEM_POST)) != (SLJIT_MEM_PRE | SLJIT_MEM_POST)); - CHECK_ARGUMENT((type & ~(0xff | SLJIT_I32_OP | SLJIT_MEM_STORE | SLJIT_MEM_SUPP | SLJIT_MEM_PRE | SLJIT_MEM_POST)) == 0); + CHECK_ARGUMENT((type & ~(0xff | SLJIT_32 | SLJIT_MEM_STORE | SLJIT_MEM_SUPP | SLJIT_MEM_PRE | SLJIT_MEM_POST)) == 0); FUNCTION_CHECK_SRC_MEM(mem, memw); CHECK_ARGUMENT(FUNCTION_CHECK_IS_REG(reg)); - CHECK_ARGUMENT((mem & REG_MASK) != SLJIT_UNUSED && (mem & REG_MASK) != reg); + CHECK_ARGUMENT((mem & REG_MASK) != 0 && (mem & REG_MASK) != reg); #endif #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) if (!(type & SLJIT_MEM_SUPP) && SLJIT_UNLIKELY(!!compiler->verbose)) { @@ -1900,7 +1918,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_mem(struct sljit_compiler fprintf(compiler->verbose, " //"); fprintf(compiler->verbose, " mem%s.%s%s%s ", - !(type & SLJIT_I32_OP) ? "" : "32", + !(type & SLJIT_32) ? "" : "32", (type & SLJIT_MEM_STORE) ? "st" : "ld", op1_names[(type & 0xff) - SLJIT_OP1_BASE], (type & SLJIT_MEM_PRE) ? ".pre" : ".post"); @@ -1921,7 +1939,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_fmem(struct sljit_compile CHECK_ARGUMENT((type & 0xff) == SLJIT_MOV_F64); CHECK_ARGUMENT((type & SLJIT_MEM_PRE) || (type & SLJIT_MEM_POST)); CHECK_ARGUMENT((type & (SLJIT_MEM_PRE | SLJIT_MEM_POST)) != (SLJIT_MEM_PRE | SLJIT_MEM_POST)); - CHECK_ARGUMENT((type & ~(0xff | SLJIT_I32_OP | SLJIT_MEM_STORE | SLJIT_MEM_SUPP | SLJIT_MEM_PRE | SLJIT_MEM_POST)) == 0); + CHECK_ARGUMENT((type & ~(0xff | SLJIT_32 | SLJIT_MEM_STORE | SLJIT_MEM_SUPP | SLJIT_MEM_PRE | SLJIT_MEM_POST)) == 0); FUNCTION_CHECK_SRC_MEM(mem, memw); CHECK_ARGUMENT(FUNCTION_CHECK_IS_FREG(freg)); @@ -1933,7 +1951,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_fmem(struct sljit_compile fprintf(compiler->verbose, " fmem.%s%s%s ", (type & SLJIT_MEM_STORE) ? "st" : "ld", - !(type & SLJIT_I32_OP) ? ".f64" : ".f32", + !(type & SLJIT_32) ? ".f64" : ".f32", (type & SLJIT_MEM_PRE) ? ".pre" : ".post"); sljit_verbose_freg(compiler, freg); fprintf(compiler->verbose, ", "); @@ -1950,7 +1968,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_get_local_base(struct sljit_co SLJIT_UNUSED_ARG(offset); #if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) - FUNCTION_CHECK_DST(dst, dstw, 0); + FUNCTION_CHECK_DST(dst, dstw); #endif #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) if (SLJIT_UNLIKELY(!!compiler->verbose)) { @@ -1967,7 +1985,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_const(struct sljit_compil SLJIT_UNUSED_ARG(init_value); #if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) - FUNCTION_CHECK_DST(dst, dstw, 0); + FUNCTION_CHECK_DST(dst, dstw); #endif #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) if (SLJIT_UNLIKELY(!!compiler->verbose)) { @@ -1982,7 +2000,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_const(struct sljit_compil static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_put_label(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw dstw) { #if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) - FUNCTION_CHECK_DST(dst, dstw, 0); + FUNCTION_CHECK_DST(dst, dstw); #endif #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) if (SLJIT_UNLIKELY(!!compiler->verbose)) { @@ -2023,10 +2041,6 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_put_label(struct sljit_co static SLJIT_INLINE sljit_s32 emit_mov_before_return(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src, sljit_sw srcw) { - /* Return if don't need to do anything. */ - if (op == SLJIT_UNUSED) - return SLJIT_SUCCESS; - #if (defined SLJIT_64BIT_ARCHITECTURE && SLJIT_64BIT_ARCHITECTURE) /* At the moment the pointer size is always equal to sljit_sw. May be changed in the future. */ if (src == SLJIT_RETURN_REG && (op == SLJIT_MOV || op == SLJIT_MOV_P)) @@ -2043,6 +2057,24 @@ static SLJIT_INLINE sljit_s32 emit_mov_before_return(struct sljit_compiler *comp return sljit_emit_op1(compiler, op, SLJIT_RETURN_REG, 0, src, srcw); } +#if !(defined SLJIT_CONFIG_SPARC && SLJIT_CONFIG_SPARC) + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src, sljit_sw srcw) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_return(compiler, op, src, srcw)); + + FAIL_IF(emit_mov_before_return(compiler, op, src, srcw)); + +#if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) \ + || (defined SLJIT_VERBOSE && SLJIT_VERBOSE) + compiler->skip_checks = 1; +#endif + return sljit_emit_return_void(compiler); +} + +#endif + #if (defined SLJIT_CONFIG_X86 && SLJIT_CONFIG_X86) \ || (defined SLJIT_CONFIG_PPC && SLJIT_CONFIG_PPC) \ || (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32) \ @@ -2054,7 +2086,7 @@ static SLJIT_INLINE sljit_s32 sljit_emit_cmov_generic(struct sljit_compiler *com { struct sljit_label *label; struct sljit_jump *jump; - sljit_s32 op = (dst_reg & SLJIT_I32_OP) ? SLJIT_MOV32 : SLJIT_MOV; + sljit_s32 op = (dst_reg & SLJIT_32) ? SLJIT_MOV32 : SLJIT_MOV; #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) @@ -2067,7 +2099,7 @@ static SLJIT_INLINE sljit_s32 sljit_emit_cmov_generic(struct sljit_compiler *com || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) compiler->skip_checks = 1; #endif - FAIL_IF(sljit_emit_op1(compiler, op, dst_reg & ~SLJIT_I32_OP, 0, src, srcw)); + FAIL_IF(sljit_emit_op1(compiler, op, dst_reg & ~SLJIT_32, 0, src, srcw)); #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) @@ -2183,7 +2215,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_cmp(struct sljit_compiler break; } - type = condition | (type & (SLJIT_I32_OP | SLJIT_REWRITABLE_JUMP)); + type = condition | (type & (SLJIT_32 | SLJIT_REWRITABLE_JUMP)); tmp_src = src1; src1 = src2; src2 = tmp_src; @@ -2201,13 +2233,13 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_cmp(struct sljit_compiler || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) compiler->skip_checks = 1; #endif - PTR_FAIL_IF(sljit_emit_op2(compiler, SLJIT_SUB | flags | (type & SLJIT_I32_OP), - SLJIT_UNUSED, 0, src1, src1w, src2, src2w)); + PTR_FAIL_IF(sljit_emit_op2u(compiler, + SLJIT_SUB | flags | (type & SLJIT_32), src1, src1w, src2, src2w)); #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) compiler->skip_checks = 1; #endif - return sljit_emit_jump(compiler, condition | (type & (SLJIT_REWRITABLE_JUMP | SLJIT_I32_OP))); + return sljit_emit_jump(compiler, condition | (type & (SLJIT_REWRITABLE_JUMP | SLJIT_32))); } #endif @@ -2223,7 +2255,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_fcmp(struct sljit_compile || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) compiler->skip_checks = 1; #endif - sljit_emit_fop1(compiler, SLJIT_CMP_F64 | ((type & 0xff) << VARIABLE_FLAG_SHIFT) | (type & SLJIT_I32_OP), src1, src1w, src2, src2w); + sljit_emit_fop1(compiler, SLJIT_CMP_F64 | ((type & 0xff) << VARIABLE_FLAG_SHIFT) | (type & SLJIT_32), src1, src1w, src2, src2w); #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) @@ -2404,6 +2436,13 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return(struct sljit_compiler *comp return SLJIT_ERR_UNSUPPORTED; } +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return_void(struct sljit_compiler *compiler) +{ + SLJIT_UNUSED_ARG(compiler); + SLJIT_UNREACHABLE(); + return SLJIT_ERR_UNSUPPORTED; +} + SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_enter(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw dstw) { SLJIT_UNUSED_ARG(compiler); @@ -2452,6 +2491,20 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile return SLJIT_ERR_UNSUPPORTED; } +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2u(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2, sljit_sw src2w) +{ + SLJIT_UNUSED_ARG(compiler); + SLJIT_UNUSED_ARG(op); + SLJIT_UNUSED_ARG(src1); + SLJIT_UNUSED_ARG(src1w); + SLJIT_UNUSED_ARG(src2); + SLJIT_UNUSED_ARG(src2w); + SLJIT_UNREACHABLE(); + return SLJIT_ERR_UNSUPPORTED; +} + SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_src(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src, sljit_sw srcw) { @@ -2470,7 +2523,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_register_index(sljit_s32 reg) } SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_custom(struct sljit_compiler *compiler, - void *instruction, sljit_s32 size) + void *instruction, sljit_u32 size) { SLJIT_UNUSED_ARG(compiler); SLJIT_UNUSED_ARG(instruction); diff --git a/thirdparty/pcre2/src/sljit/sljitLir.h b/thirdparty/pcre2/src/sljit/sljitLir.h index 0eb62fc21b..1162658156 100644 --- a/thirdparty/pcre2/src/sljit/sljitLir.h +++ b/thirdparty/pcre2/src/sljit/sljitLir.h @@ -163,13 +163,6 @@ extern "C" { is not available at all. */ -/* When SLJIT_UNUSED is specified as the destination of sljit_emit_op1 - or sljit_emit_op2 operations the result is discarded. Some status - flags must be set when the destination is SLJIT_UNUSED, because the - operation would have no effect otherwise. Other SLJIT operations do - not support SLJIT_UNUSED as a destination operand. */ -#define SLJIT_UNUSED 0 - /* Scratch registers. */ #define SLJIT_R0 1 #define SLJIT_R1 2 @@ -231,9 +224,6 @@ extern "C" { value. The FR and FS register sets are overlap in the same way as R and S register sets. See above. */ -/* Note: SLJIT_UNUSED as destination is not valid for floating point - operations, since they cannot be used for setting flags. */ - /* Floating point scratch registers. */ #define SLJIT_FR0 1 #define SLJIT_FR1 2 @@ -263,39 +253,38 @@ extern "C" { /* Argument type definitions */ /* --------------------------------------------------------------------- */ -/* Argument type definitions. - Used by SLJIT_[DEF_]ARGx and SLJIT_[DEF]_RET macros. */ - -#define SLJIT_ARG_TYPE_VOID 0 -#define SLJIT_ARG_TYPE_SW 1 -#define SLJIT_ARG_TYPE_UW 2 -#define SLJIT_ARG_TYPE_S32 3 -#define SLJIT_ARG_TYPE_U32 4 -#define SLJIT_ARG_TYPE_F32 5 -#define SLJIT_ARG_TYPE_F64 6 - /* The following argument type definitions are used by sljit_emit_enter, sljit_set_context, sljit_emit_call, and sljit_emit_icall functions. - The following return type definitions are used by sljit_emit_call - and sljit_emit_icall functions. - When a function is called, the first integer argument must be placed - in SLJIT_R0, the second in SLJIT_R1, and so on. Similarly the first - floating point argument must be placed in SLJIT_FR0, the second in - SLJIT_FR1, and so on. + As for sljit_emit_call and sljit_emit_icall, the first integer argument + must be placed into SLJIT_R0, the second one into SLJIT_R1, and so on. + Similarly the first floating point argument must be placed into SLJIT_FR0, + the second one into SLJIT_FR1, and so on. + + As for sljit_emit_enter, the integer arguments can be stored in scratch + or saved registers. The first integer argument without _R postfix is + stored in SLJIT_S0, the next one in SLJIT_S1, and so on. The integer + arguments with _R postfix are placed into scratch registers. The index + of the scratch register is the count of the previous integer arguments + starting from SLJIT_R0. The floating point arguments are always placed + into SLJIT_FR0, SLJIT_FR1, and so on. + + Note: if a function is called by sljit_emit_call/sljit_emit_icall and + an argument is stored in a scratch register by sljit_emit_enter, + that argument uses the same scratch register index for both + integer and floating point arguments. Example function definition: - sljit_f32 SLJIT_FUNC example_c_callback(sljit_sw arg_a, + sljit_f32 SLJIT_FUNC example_c_callback(void *arg_a, sljit_f64 arg_b, sljit_u32 arg_c, sljit_f32 arg_d); Argument type definition: - SLJIT_DEF_RET(SLJIT_ARG_TYPE_F32) - | SLJIT_DEF_ARG1(SLJIT_ARG_TYPE_SW) | SLJIT_DEF_ARG2(SLJIT_ARG_TYPE_F64) - | SLJIT_DEF_ARG3(SLJIT_ARG_TYPE_U32) | SLJIT_DEF_ARG2(SLJIT_ARG_TYPE_F32) + SLJIT_ARG_RETURN(SLJIT_ARG_TYPE_F32) + | SLJIT_ARG_VALUE(SLJIT_ARG_TYPE_P, 1) | SLJIT_ARG_VALUE(SLJIT_ARG_TYPE_F64, 2) + | SLJIT_ARG_VALUE(SLJIT_ARG_TYPE_32, 3) | SLJIT_ARG_VALUE(SLJIT_ARG_TYPE_F32, 4) Short form of argument type definition: - SLJIT_RET(F32) | SLJIT_ARG1(SW) | SLJIT_ARG2(F64) - | SLJIT_ARG3(S32) | SLJIT_ARG4(F32) + SLJIT_ARGS4(32, P, F64, 32, F32) Argument passing: arg_a must be placed in SLJIT_R0 @@ -303,34 +292,73 @@ extern "C" { arg_b must be placed in SLJIT_FR0 arg_d must be placed in SLJIT_FR1 -Note: - The SLJIT_ARG_TYPE_VOID type is only supported by - SLJIT_DEF_RET, and SLJIT_ARG_TYPE_VOID is also the - default value when SLJIT_DEF_RET is not specified. */ -#define SLJIT_DEF_SHIFT 4 -#define SLJIT_DEF_RET(type) (type) -#define SLJIT_DEF_ARG1(type) ((type) << SLJIT_DEF_SHIFT) -#define SLJIT_DEF_ARG2(type) ((type) << (2 * SLJIT_DEF_SHIFT)) -#define SLJIT_DEF_ARG3(type) ((type) << (3 * SLJIT_DEF_SHIFT)) -#define SLJIT_DEF_ARG4(type) ((type) << (4 * SLJIT_DEF_SHIFT)) + Examples for argument processing by sljit_emit_enter: + SLJIT_ARGS4(VOID, P, 32_R, F32, W) + Arguments are placed into: SLJIT_S0, SLJIT_R1, SLJIT_FR0, SLJIT_S1 + + SLJIT_ARGS4(VOID, W, W_R, W, W_R) + Arguments are placed into: SLJIT_S0, SLJIT_R1, SLJIT_S1, SLJIT_R3 -/* Short form of the macros above. + SLJIT_ARGS4(VOID, F64, W, F32, W_R) + Arguments are placed into: SLJIT_FR0, SLJIT_S0, SLJIT_FR1, SLJIT_R1 - For example the following definition: - SLJIT_DEF_RET(SLJIT_ARG_TYPE_SW) | SLJIT_DEF_ARG1(SLJIT_ARG_TYPE_F32) + Note: it is recommended to pass the scratch arguments first + followed by the saved arguments: + + SLJIT_ARGS4(VOID, W_R, W_R, W, W) + Arguments are placed into: SLJIT_R0, SLJIT_R1, SLJIT_S0, SLJIT_S1 +*/ + +/* The following flag is only allowed for the integer arguments of + sljit_emit_enter. When the flag is set, the integer argument is + stored in a scratch register instead of a saved register. */ +#define SLJIT_ARG_TYPE_SCRATCH_REG 0x8 + +/* Void result, can only be used by SLJIT_ARG_RETURN. */ +#define SLJIT_ARG_TYPE_VOID 0 +/* Machine word sized integer argument or result. */ +#define SLJIT_ARG_TYPE_W 1 +#define SLJIT_ARG_TYPE_W_R (SLJIT_ARG_TYPE_W | SLJIT_ARG_TYPE_SCRATCH_REG) +/* 32 bit integer argument or result. */ +#define SLJIT_ARG_TYPE_32 2 +#define SLJIT_ARG_TYPE_32_R (SLJIT_ARG_TYPE_32 | SLJIT_ARG_TYPE_SCRATCH_REG) +/* Pointer sized integer argument or result. */ +#define SLJIT_ARG_TYPE_P 3 +#define SLJIT_ARG_TYPE_P_R (SLJIT_ARG_TYPE_P | SLJIT_ARG_TYPE_SCRATCH_REG) +/* 64 bit floating point argument or result. */ +#define SLJIT_ARG_TYPE_F64 4 +/* 32 bit floating point argument or result. */ +#define SLJIT_ARG_TYPE_F32 5 + +#define SLJIT_ARG_SHIFT 4 +#define SLJIT_ARG_RETURN(type) (type) +#define SLJIT_ARG_VALUE(type, idx) ((type) << ((idx) * SLJIT_ARG_SHIFT)) + +/* Simplified argument list definitions. + + The following definition: + SLJIT_ARG_RETURN(SLJIT_ARG_TYPE_W) | SLJIT_ARG_VALUE(SLJIT_ARG_TYPE_F32, 1) can be shortened to: - SLJIT_RET(SW) | SLJIT_ARG1(F32) - -Note: - The VOID type is only supported by SLJIT_RET, and - VOID is also the default value when SLJIT_RET is - not specified. */ -#define SLJIT_RET(type) SLJIT_DEF_RET(SLJIT_ARG_TYPE_ ## type) -#define SLJIT_ARG1(type) SLJIT_DEF_ARG1(SLJIT_ARG_TYPE_ ## type) -#define SLJIT_ARG2(type) SLJIT_DEF_ARG2(SLJIT_ARG_TYPE_ ## type) -#define SLJIT_ARG3(type) SLJIT_DEF_ARG3(SLJIT_ARG_TYPE_ ## type) -#define SLJIT_ARG4(type) SLJIT_DEF_ARG4(SLJIT_ARG_TYPE_ ## type) + SLJIT_ARGS1(W, F32) +*/ + +#define SLJIT_ARG_TO_TYPE(type) SLJIT_ARG_TYPE_ ## type + +#define SLJIT_ARGS0(ret) \ + SLJIT_ARG_RETURN(SLJIT_ARG_TO_TYPE(ret)) + +#define SLJIT_ARGS1(ret, arg1) \ + (SLJIT_ARGS0(ret) | SLJIT_ARG_VALUE(SLJIT_ARG_TO_TYPE(arg1), 1)) + +#define SLJIT_ARGS2(ret, arg1, arg2) \ + (SLJIT_ARGS1(ret, arg1) | SLJIT_ARG_VALUE(SLJIT_ARG_TO_TYPE(arg2), 2)) + +#define SLJIT_ARGS3(ret, arg1, arg2, arg3) \ + (SLJIT_ARGS2(ret, arg1, arg2) | SLJIT_ARG_VALUE(SLJIT_ARG_TO_TYPE(arg3), 3)) + +#define SLJIT_ARGS4(ret, arg1, arg2, arg3, arg4) \ + (SLJIT_ARGS3(ret, arg1, arg2, arg3) | SLJIT_ARG_VALUE(SLJIT_ARG_TO_TYPE(arg4), 4)) /* --------------------------------------------------------------------- */ /* Main structures and functions */ @@ -408,7 +436,7 @@ struct sljit_compiler { /* Code size. */ sljit_uw size; /* Relative offset of the executable mapping from the writable mapping. */ - sljit_uw executable_offset; + sljit_sw executable_offset; /* Executable size for statistical purposes. */ sljit_uw executable_size; @@ -417,17 +445,13 @@ struct sljit_compiler { #endif #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32) - sljit_s32 args; + sljit_s32 args_size; sljit_s32 locals_offset; - sljit_s32 saveds_offset; - sljit_s32 stack_tmp_size; + sljit_s32 scratches_offset; #endif #if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64) sljit_s32 mode32; -#ifdef _WIN64 - sljit_s32 locals_offset; -#endif #endif #if (defined SLJIT_CONFIG_ARM_V5 && SLJIT_CONFIG_ARM_V5) @@ -444,10 +468,14 @@ struct sljit_compiler { #if (defined SLJIT_CONFIG_ARM_V5 && SLJIT_CONFIG_ARM_V5) || (defined SLJIT_CONFIG_ARM_V7 && SLJIT_CONFIG_ARM_V7) /* Temporary fields. */ sljit_uw shift_imm; +#endif /* SLJIT_CONFIG_ARM_V5 || SLJIT_CONFIG_ARM_V7 */ + +#if (defined SLJIT_CONFIG_ARM_32 && SLJIT_CONFIG_ARM_32) && (defined __SOFTFP__) + sljit_uw args_size; #endif #if (defined SLJIT_CONFIG_PPC && SLJIT_CONFIG_PPC) - sljit_sw imm; + sljit_u32 imm; #endif #if (defined SLJIT_CONFIG_MIPS && SLJIT_CONFIG_MIPS) @@ -456,6 +484,10 @@ struct sljit_compiler { sljit_sw cache_argw; #endif +#if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) + sljit_uw args_size; +#endif + #if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32) sljit_s32 delay_slot; sljit_s32 cache_arg; @@ -476,7 +508,9 @@ struct sljit_compiler { /* Flags specified by the last arithmetic instruction. It contains the type of the variable flag. */ sljit_s32 last_flags; - /* Local size passed to the functions. */ + /* Return value type set by entry functions. */ + sljit_s32 last_return; + /* Local size passed to entry functions. */ sljit_s32 logical_local_size; #endif @@ -615,38 +649,43 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_has_cpu_feature(sljit_s32 feature_type) available options are listed before sljit_emit_enter. The function argument list is the combination of SLJIT_ARGx - (SLJIT_DEF_ARG1) macros. Currently maximum 3 SW / UW - (SLJIT_ARG_TYPE_SW / LJIT_ARG_TYPE_UW) arguments are supported. - The first argument goes to SLJIT_S0, the second goes to SLJIT_S1 - and so on. The register set used by the function must be declared - as well. The number of scratch and saved registers used by the - function must be passed to sljit_emit_enter. Only R registers - between R0 and "scratches" argument can be used later. E.g. if - "scratches" is set to 2, the scratch register set will be limited - to SLJIT_R0 and SLJIT_R1. The S registers and the floating point - registers ("fscratches" and "fsaveds") are specified in a similar - manner. The sljit_emit_enter is also capable of allocating a stack - space for local variables. The "local_size" argument contains the - size in bytes of this local area and its staring address is stored + (SLJIT_DEF_ARG1) macros. Currently maximum 4 arguments are + supported. The first integer argument is loaded into SLJIT_S0, + the second one is loaded into SLJIT_S1, and so on. Similarly, + the first floating point argument is loaded into SLJIT_FR0, + the second one is loaded into SLJIT_FR1, and so on. Furthermore + the register set used by the function must be declared as well. + The number of scratch and saved registers used by the function + must be passed to sljit_emit_enter. Only R registers between R0 + and "scratches" argument can be used later. E.g. if "scratches" + is set to 2, the scratch register set will be limited to SLJIT_R0 + and SLJIT_R1. The S registers and the floating point registers + ("fscratches" and "fsaveds") are specified in a similar manner. + The sljit_emit_enter is also capable of allocating a stack space + for local variables. The "local_size" argument contains the size + in bytes of this local area and its staring address is stored in SLJIT_SP. The memory area between SLJIT_SP (inclusive) and SLJIT_SP + local_size (exclusive) can be modified freely until the function returns. The stack space is not initialized. Note: the following conditions must met: 0 <= scratches <= SLJIT_NUMBER_OF_REGISTERS - 0 <= saveds <= SLJIT_NUMBER_OF_REGISTERS + 0 <= saveds <= SLJIT_NUMBER_OF_SAVED_REGISTERS scratches + saveds <= SLJIT_NUMBER_OF_REGISTERS 0 <= fscratches <= SLJIT_NUMBER_OF_FLOAT_REGISTERS - 0 <= fsaveds <= SLJIT_NUMBER_OF_FLOAT_REGISTERS + 0 <= fsaveds <= SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS fscratches + fsaveds <= SLJIT_NUMBER_OF_FLOAT_REGISTERS + Note: the compiler can use saved registers as scratch registers, + but the opposite is not supported + Note: every call of sljit_emit_enter and sljit_set_context overwrites the previous context. */ -/* The absolute address returned by sljit_get_local_base with -offset 0 is aligned to sljit_f64. Otherwise it is aligned to sljit_sw. */ -#define SLJIT_F64_ALIGNMENT 0x00000001 +/* The compiled function uses cdecl calling + * convention instead of SLJIT_FUNC. */ +#define SLJIT_ENTER_CDECL 0x00000001 /* The local_size must be >= 0 and <= SLJIT_MAX_LOCAL_SIZE. */ #define SLJIT_MAX_LOCAL_SIZE 65536 @@ -657,7 +696,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_enter(struct sljit_compiler *compi /* The machine code has a context (which contains the local stack space size, number of used registers, etc.) which initialized by sljit_emit_enter. Several - functions (like sljit_emit_return) requres this context to be able to generate + functions (such as sljit_emit_return) requres this context to be able to generate the appropriate code. However, some code fragments (like inline cache) may have no normal entry point so their context is unknown for the compiler. Their context can be provided to the compiler by the sljit_set_context function. @@ -669,11 +708,12 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_set_context(struct sljit_compiler *comp sljit_s32 options, sljit_s32 arg_types, sljit_s32 scratches, sljit_s32 saveds, sljit_s32 fscratches, sljit_s32 fsaveds, sljit_s32 local_size); -/* Return from machine code. The op argument can be SLJIT_UNUSED which means the - function does not return with anything or any opcode between SLJIT_MOV and - SLJIT_MOV_P (see sljit_emit_op1). As for src and srcw they must be 0 if op - is SLJIT_UNUSED, otherwise see below the description about source and - destination arguments. */ +/* Return from machine code. The sljit_emit_return_void function does not return with + any value. The sljit_emit_return function returns with a single value which stores + the result of a data move instruction. The instruction is specified by the op + argument, and must be between SLJIT_MOV and SLJIT_MOV_P (see sljit_emit_op1). */ + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return_void(struct sljit_compiler *compiler); SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src, sljit_sw srcw); @@ -766,7 +806,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_enter(struct sljit_compiler * #define SLJIT_MEM2(r1, r2) (SLJIT_MEM | (r1) | ((r2) << 8)) #define SLJIT_IMM 0x40 -/* Set 32 bit operation mode (I) on 64 bit CPUs. This option is ignored on +/* Sets 32 bit operation mode on 64 bit CPUs. This option is ignored on 32 bit CPUs. When this option is set for an arithmetic operation, only the lower 32 bit of the input registers are used, and the CPU status flags are set according to the 32 bit result. Although the higher 32 bit @@ -774,12 +814,16 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_enter(struct sljit_compiler * be defined by the CPU architecture (e.g. MIPS). To satisfy these CPU requirements all source registers must be the result of those operations where this option was also set. Memory loads read 32 bit values rather - than 64 bit ones. In other words 32 bit and 64 bit operations cannot - be mixed. The only exception is SLJIT_MOV32 and SLJIT_MOVU32 whose source - register can hold any 32 or 64 bit value, and it is converted to a 32 bit - compatible format first. This conversion is free (no instructions are - emitted) on most CPUs. A 32 bit value can also be converted to a 64 bit - value by SLJIT_MOV_S32 (sign extension) or SLJIT_MOV_U32 (zero extension). + than 64 bit ones. In other words 32 bit and 64 bit operations cannot be + mixed. The only exception is SLJIT_MOV32 whose source register can hold + any 32 or 64 bit value, and it is converted to a 32 bit compatible format + first. This conversion is free (no instructions are emitted) on most CPUs. + A 32 bit value can also be converted to a 64 bit value by SLJIT_MOV_S32 + (sign extension) or SLJIT_MOV_U32 (zero extension). + + As for floating-point operations, this option sets 32 bit single + precision mode. Similar to the integer operations, all register arguments + must be the result of those operations where this option was also set. Note: memory addressing always uses 64 bit values on 64 bit systems so the result of a 32 bit operation must not be used with SLJIT_MEMx @@ -788,22 +832,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_enter(struct sljit_compiler * This option is part of the instruction name, so there is no need to manually set it. E.g: - SLJIT_ADD32 == (SLJIT_ADD | SLJIT_I32_OP) */ -#define SLJIT_I32_OP 0x100 - -/* Set F32 (single) precision mode for floating-point computation. This - option is similar to SLJIT_I32_OP, it just applies to floating point - registers. When this option is passed, the CPU performs 32 bit floating - point operations, rather than 64 bit one. Similar to SLJIT_I32_OP, all - register arguments must be the result of those operations where this - option was also set. - - This option is part of the instruction name, so there is no need to - manually set it. E.g: - - SLJIT_MOV_F32 = (SLJIT_MOV_F64 | SLJIT_F32_OP) - */ -#define SLJIT_F32_OP SLJIT_I32_OP + SLJIT_ADD32 == (SLJIT_ADD | SLJIT_32) */ +#define SLJIT_32 0x100 /* Many CPUs (x86, ARM, PPC) have status flags which can be set according to the result of an operation. Other CPUs (MIPS) do not have status @@ -887,7 +917,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_enter(struct sljit_compiler * The result is placed into SLJIT_R0 and the remainder into SLJIT_R1. Note: if SLJIT_R1 is 0, the behaviour is undefined. */ #define SLJIT_DIVMOD_UW (SLJIT_OP0_BASE + 4) -#define SLJIT_DIVMOD_U32 (SLJIT_DIVMOD_UW | SLJIT_I32_OP) +#define SLJIT_DIVMOD_U32 (SLJIT_DIVMOD_UW | SLJIT_32) /* Flags: - (may destroy flags) Signed divide of the value in SLJIT_R0 by the value in SLJIT_R1. The result is placed into SLJIT_R0 and the remainder into SLJIT_R1. @@ -895,13 +925,13 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_enter(struct sljit_compiler * Note: if SLJIT_R1 is -1 and SLJIT_R0 is integer min (0x800..00), the behaviour is undefined. */ #define SLJIT_DIVMOD_SW (SLJIT_OP0_BASE + 5) -#define SLJIT_DIVMOD_S32 (SLJIT_DIVMOD_SW | SLJIT_I32_OP) +#define SLJIT_DIVMOD_S32 (SLJIT_DIVMOD_SW | SLJIT_32) /* Flags: - (may destroy flags) Unsigned divide of the value in SLJIT_R0 by the value in SLJIT_R1. The result is placed into SLJIT_R0. SLJIT_R1 preserves its value. Note: if SLJIT_R1 is 0, the behaviour is undefined. */ #define SLJIT_DIV_UW (SLJIT_OP0_BASE + 6) -#define SLJIT_DIV_U32 (SLJIT_DIV_UW | SLJIT_I32_OP) +#define SLJIT_DIV_U32 (SLJIT_DIV_UW | SLJIT_32) /* Flags: - (may destroy flags) Signed divide of the value in SLJIT_R0 by the value in SLJIT_R1. The result is placed into SLJIT_R0. SLJIT_R1 preserves its value. @@ -909,7 +939,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_enter(struct sljit_compiler * Note: if SLJIT_R1 is -1 and SLJIT_R0 is integer min (0x800..00), the behaviour is undefined. */ #define SLJIT_DIV_SW (SLJIT_OP0_BASE + 7) -#define SLJIT_DIV_S32 (SLJIT_DIV_SW | SLJIT_I32_OP) +#define SLJIT_DIV_S32 (SLJIT_DIV_SW | SLJIT_32) /* Flags: - (does not modify flags) ENDBR32 instruction for x86-32 and ENDBR64 instruction for x86-64 when Intel Control-flow Enforcement Technology (CET) is enabled. @@ -941,16 +971,16 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compile #define SLJIT_MOV (SLJIT_OP1_BASE + 0) /* Flags: - (does not modify flags) */ #define SLJIT_MOV_U8 (SLJIT_OP1_BASE + 1) -#define SLJIT_MOV32_U8 (SLJIT_MOV_U8 | SLJIT_I32_OP) +#define SLJIT_MOV32_U8 (SLJIT_MOV_U8 | SLJIT_32) /* Flags: - (does not modify flags) */ #define SLJIT_MOV_S8 (SLJIT_OP1_BASE + 2) -#define SLJIT_MOV32_S8 (SLJIT_MOV_S8 | SLJIT_I32_OP) +#define SLJIT_MOV32_S8 (SLJIT_MOV_S8 | SLJIT_32) /* Flags: - (does not modify flags) */ #define SLJIT_MOV_U16 (SLJIT_OP1_BASE + 3) -#define SLJIT_MOV32_U16 (SLJIT_MOV_U16 | SLJIT_I32_OP) +#define SLJIT_MOV32_U16 (SLJIT_MOV_U16 | SLJIT_32) /* Flags: - (does not modify flags) */ #define SLJIT_MOV_S16 (SLJIT_OP1_BASE + 4) -#define SLJIT_MOV32_S16 (SLJIT_MOV_S16 | SLJIT_I32_OP) +#define SLJIT_MOV32_S16 (SLJIT_MOV_S16 | SLJIT_32) /* Flags: - (does not modify flags) Note: no SLJIT_MOV32_U32 form, since it is the same as SLJIT_MOV32 */ #define SLJIT_MOV_U32 (SLJIT_OP1_BASE + 5) @@ -958,25 +988,21 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compile Note: no SLJIT_MOV32_S32 form, since it is the same as SLJIT_MOV32 */ #define SLJIT_MOV_S32 (SLJIT_OP1_BASE + 6) /* Flags: - (does not modify flags) */ -#define SLJIT_MOV32 (SLJIT_MOV_S32 | SLJIT_I32_OP) +#define SLJIT_MOV32 (SLJIT_OP1_BASE + 7) /* Flags: - (does not modify flags) Note: load a pointer sized data, useful on x32 (a 32 bit mode on x86-64 where all x64 features are available, e.g. 16 register) or similar compiling modes */ -#define SLJIT_MOV_P (SLJIT_OP1_BASE + 7) +#define SLJIT_MOV_P (SLJIT_OP1_BASE + 8) /* Flags: Z Note: immediate source argument is not supported */ -#define SLJIT_NOT (SLJIT_OP1_BASE + 8) -#define SLJIT_NOT32 (SLJIT_NOT | SLJIT_I32_OP) -/* Flags: Z | OVERFLOW - Note: immediate source argument is not supported */ -#define SLJIT_NEG (SLJIT_OP1_BASE + 9) -#define SLJIT_NEG32 (SLJIT_NEG | SLJIT_I32_OP) +#define SLJIT_NOT (SLJIT_OP1_BASE + 9) +#define SLJIT_NOT32 (SLJIT_NOT | SLJIT_32) /* Count leading zeroes Flags: - (may destroy flags) Note: immediate source argument is not supported */ #define SLJIT_CLZ (SLJIT_OP1_BASE + 10) -#define SLJIT_CLZ32 (SLJIT_CLZ | SLJIT_I32_OP) +#define SLJIT_CLZ32 (SLJIT_CLZ | SLJIT_32) SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 dst, sljit_sw dstw, @@ -987,58 +1013,64 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile /* Flags: Z | OVERFLOW | CARRY */ #define SLJIT_ADD (SLJIT_OP2_BASE + 0) -#define SLJIT_ADD32 (SLJIT_ADD | SLJIT_I32_OP) +#define SLJIT_ADD32 (SLJIT_ADD | SLJIT_32) /* Flags: CARRY */ #define SLJIT_ADDC (SLJIT_OP2_BASE + 1) -#define SLJIT_ADDC32 (SLJIT_ADDC | SLJIT_I32_OP) +#define SLJIT_ADDC32 (SLJIT_ADDC | SLJIT_32) /* Flags: Z | LESS | GREATER_EQUAL | GREATER | LESS_EQUAL SIG_LESS | SIG_GREATER_EQUAL | SIG_GREATER SIG_LESS_EQUAL | CARRY */ #define SLJIT_SUB (SLJIT_OP2_BASE + 2) -#define SLJIT_SUB32 (SLJIT_SUB | SLJIT_I32_OP) +#define SLJIT_SUB32 (SLJIT_SUB | SLJIT_32) /* Flags: CARRY */ #define SLJIT_SUBC (SLJIT_OP2_BASE + 3) -#define SLJIT_SUBC32 (SLJIT_SUBC | SLJIT_I32_OP) +#define SLJIT_SUBC32 (SLJIT_SUBC | SLJIT_32) /* Note: integer mul Flags: OVERFLOW */ #define SLJIT_MUL (SLJIT_OP2_BASE + 4) -#define SLJIT_MUL32 (SLJIT_MUL | SLJIT_I32_OP) +#define SLJIT_MUL32 (SLJIT_MUL | SLJIT_32) /* Flags: Z */ #define SLJIT_AND (SLJIT_OP2_BASE + 5) -#define SLJIT_AND32 (SLJIT_AND | SLJIT_I32_OP) +#define SLJIT_AND32 (SLJIT_AND | SLJIT_32) /* Flags: Z */ #define SLJIT_OR (SLJIT_OP2_BASE + 6) -#define SLJIT_OR32 (SLJIT_OR | SLJIT_I32_OP) +#define SLJIT_OR32 (SLJIT_OR | SLJIT_32) /* Flags: Z */ #define SLJIT_XOR (SLJIT_OP2_BASE + 7) -#define SLJIT_XOR32 (SLJIT_XOR | SLJIT_I32_OP) +#define SLJIT_XOR32 (SLJIT_XOR | SLJIT_32) /* Flags: Z Let bit_length be the length of the shift operation: 32 or 64. If src2 is immediate, src2w is masked by (bit_length - 1). Otherwise, if the content of src2 is outside the range from 0 to bit_length - 1, the result is undefined. */ #define SLJIT_SHL (SLJIT_OP2_BASE + 8) -#define SLJIT_SHL32 (SLJIT_SHL | SLJIT_I32_OP) +#define SLJIT_SHL32 (SLJIT_SHL | SLJIT_32) /* Flags: Z Let bit_length be the length of the shift operation: 32 or 64. If src2 is immediate, src2w is masked by (bit_length - 1). Otherwise, if the content of src2 is outside the range from 0 to bit_length - 1, the result is undefined. */ #define SLJIT_LSHR (SLJIT_OP2_BASE + 9) -#define SLJIT_LSHR32 (SLJIT_LSHR | SLJIT_I32_OP) +#define SLJIT_LSHR32 (SLJIT_LSHR | SLJIT_32) /* Flags: Z Let bit_length be the length of the shift operation: 32 or 64. If src2 is immediate, src2w is masked by (bit_length - 1). Otherwise, if the content of src2 is outside the range from 0 to bit_length - 1, the result is undefined. */ #define SLJIT_ASHR (SLJIT_OP2_BASE + 10) -#define SLJIT_ASHR32 (SLJIT_ASHR | SLJIT_I32_OP) +#define SLJIT_ASHR32 (SLJIT_ASHR | SLJIT_32) SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 dst, sljit_sw dstw, sljit_s32 src1, sljit_sw src1w, sljit_s32 src2, sljit_sw src2w); +/* The sljit_emit_op2u function is the same as sljit_emit_op2 except the result is discarded. */ + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2u(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2, sljit_sw src2w); + /* Starting index of opcodes for sljit_emit_op2. */ #define SLJIT_OP_SRC_BASE 128 @@ -1082,35 +1114,35 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_src(struct sljit_compiler *comp /* Flags: - (does not modify flags) */ #define SLJIT_MOV_F64 (SLJIT_FOP1_BASE + 0) -#define SLJIT_MOV_F32 (SLJIT_MOV_F64 | SLJIT_F32_OP) +#define SLJIT_MOV_F32 (SLJIT_MOV_F64 | SLJIT_32) /* Convert opcodes: CONV[DST_TYPE].FROM[SRC_TYPE] SRC/DST TYPE can be: D - double, S - single, W - signed word, I - signed int Rounding mode when the destination is W or I: round towards zero. */ -/* Flags: - (does not modify flags) */ +/* Flags: - (may destroy flags) */ #define SLJIT_CONV_F64_FROM_F32 (SLJIT_FOP1_BASE + 1) -#define SLJIT_CONV_F32_FROM_F64 (SLJIT_CONV_F64_FROM_F32 | SLJIT_F32_OP) -/* Flags: - (does not modify flags) */ +#define SLJIT_CONV_F32_FROM_F64 (SLJIT_CONV_F64_FROM_F32 | SLJIT_32) +/* Flags: - (may destroy flags) */ #define SLJIT_CONV_SW_FROM_F64 (SLJIT_FOP1_BASE + 2) -#define SLJIT_CONV_SW_FROM_F32 (SLJIT_CONV_SW_FROM_F64 | SLJIT_F32_OP) -/* Flags: - (does not modify flags) */ +#define SLJIT_CONV_SW_FROM_F32 (SLJIT_CONV_SW_FROM_F64 | SLJIT_32) +/* Flags: - (may destroy flags) */ #define SLJIT_CONV_S32_FROM_F64 (SLJIT_FOP1_BASE + 3) -#define SLJIT_CONV_S32_FROM_F32 (SLJIT_CONV_S32_FROM_F64 | SLJIT_F32_OP) -/* Flags: - (does not modify flags) */ +#define SLJIT_CONV_S32_FROM_F32 (SLJIT_CONV_S32_FROM_F64 | SLJIT_32) +/* Flags: - (may destroy flags) */ #define SLJIT_CONV_F64_FROM_SW (SLJIT_FOP1_BASE + 4) -#define SLJIT_CONV_F32_FROM_SW (SLJIT_CONV_F64_FROM_SW | SLJIT_F32_OP) -/* Flags: - (does not modify flags) */ +#define SLJIT_CONV_F32_FROM_SW (SLJIT_CONV_F64_FROM_SW | SLJIT_32) +/* Flags: - (may destroy flags) */ #define SLJIT_CONV_F64_FROM_S32 (SLJIT_FOP1_BASE + 5) -#define SLJIT_CONV_F32_FROM_S32 (SLJIT_CONV_F64_FROM_S32 | SLJIT_F32_OP) +#define SLJIT_CONV_F32_FROM_S32 (SLJIT_CONV_F64_FROM_S32 | SLJIT_32) /* Note: dst is the left and src is the right operand for SLJIT_CMPD. Flags: EQUAL_F | LESS_F | GREATER_EQUAL_F | GREATER_F | LESS_EQUAL_F */ #define SLJIT_CMP_F64 (SLJIT_FOP1_BASE + 6) -#define SLJIT_CMP_F32 (SLJIT_CMP_F64 | SLJIT_F32_OP) -/* Flags: - (does not modify flags) */ +#define SLJIT_CMP_F32 (SLJIT_CMP_F64 | SLJIT_32) +/* Flags: - (may destroy flags) */ #define SLJIT_NEG_F64 (SLJIT_FOP1_BASE + 7) -#define SLJIT_NEG_F32 (SLJIT_NEG_F64 | SLJIT_F32_OP) -/* Flags: - (does not modify flags) */ +#define SLJIT_NEG_F32 (SLJIT_NEG_F64 | SLJIT_32) +/* Flags: - (may destroy flags) */ #define SLJIT_ABS_F64 (SLJIT_FOP1_BASE + 8) -#define SLJIT_ABS_F32 (SLJIT_ABS_F64 | SLJIT_F32_OP) +#define SLJIT_ABS_F32 (SLJIT_ABS_F64 | SLJIT_32) SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 dst, sljit_sw dstw, @@ -1119,18 +1151,18 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compil /* Starting index of opcodes for sljit_emit_fop2. */ #define SLJIT_FOP2_BASE 192 -/* Flags: - (does not modify flags) */ +/* Flags: - (may destroy flags) */ #define SLJIT_ADD_F64 (SLJIT_FOP2_BASE + 0) -#define SLJIT_ADD_F32 (SLJIT_ADD_F64 | SLJIT_F32_OP) -/* Flags: - (does not modify flags) */ +#define SLJIT_ADD_F32 (SLJIT_ADD_F64 | SLJIT_32) +/* Flags: - (may destroy flags) */ #define SLJIT_SUB_F64 (SLJIT_FOP2_BASE + 1) -#define SLJIT_SUB_F32 (SLJIT_SUB_F64 | SLJIT_F32_OP) -/* Flags: - (does not modify flags) */ +#define SLJIT_SUB_F32 (SLJIT_SUB_F64 | SLJIT_32) +/* Flags: - (may destroy flags) */ #define SLJIT_MUL_F64 (SLJIT_FOP2_BASE + 2) -#define SLJIT_MUL_F32 (SLJIT_MUL_F64 | SLJIT_F32_OP) -/* Flags: - (does not modify flags) */ +#define SLJIT_MUL_F32 (SLJIT_MUL_F64 | SLJIT_32) +/* Flags: - (may destroy flags) */ #define SLJIT_DIV_F64 (SLJIT_FOP2_BASE + 3) -#define SLJIT_DIV_F32 (SLJIT_DIV_F64 | SLJIT_F32_OP) +#define SLJIT_DIV_F32 (SLJIT_DIV_F64 | SLJIT_32) SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop2(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 dst, sljit_sw dstw, @@ -1170,33 +1202,35 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_label* sljit_emit_label(struct sljit_compi #define SLJIT_SET_OVERFLOW SLJIT_SET(SLJIT_OVERFLOW) #define SLJIT_NOT_OVERFLOW 11 -/* There is no SLJIT_CARRY or SLJIT_NOT_CARRY. */ -#define SLJIT_SET_CARRY SLJIT_SET(12) +/* Unlike other flags, sljit_emit_jump may destroy this flag. */ +#define SLJIT_CARRY 12 +#define SLJIT_SET_CARRY SLJIT_SET(SLJIT_CARRY) +#define SLJIT_NOT_CARRY 13 /* Floating point comparison types. */ #define SLJIT_EQUAL_F64 14 -#define SLJIT_EQUAL_F32 (SLJIT_EQUAL_F64 | SLJIT_F32_OP) +#define SLJIT_EQUAL_F32 (SLJIT_EQUAL_F64 | SLJIT_32) #define SLJIT_SET_EQUAL_F SLJIT_SET(SLJIT_EQUAL_F64) #define SLJIT_NOT_EQUAL_F64 15 -#define SLJIT_NOT_EQUAL_F32 (SLJIT_NOT_EQUAL_F64 | SLJIT_F32_OP) +#define SLJIT_NOT_EQUAL_F32 (SLJIT_NOT_EQUAL_F64 | SLJIT_32) #define SLJIT_SET_NOT_EQUAL_F SLJIT_SET(SLJIT_NOT_EQUAL_F64) #define SLJIT_LESS_F64 16 -#define SLJIT_LESS_F32 (SLJIT_LESS_F64 | SLJIT_F32_OP) +#define SLJIT_LESS_F32 (SLJIT_LESS_F64 | SLJIT_32) #define SLJIT_SET_LESS_F SLJIT_SET(SLJIT_LESS_F64) #define SLJIT_GREATER_EQUAL_F64 17 -#define SLJIT_GREATER_EQUAL_F32 (SLJIT_GREATER_EQUAL_F64 | SLJIT_F32_OP) +#define SLJIT_GREATER_EQUAL_F32 (SLJIT_GREATER_EQUAL_F64 | SLJIT_32) #define SLJIT_SET_GREATER_EQUAL_F SLJIT_SET(SLJIT_GREATER_EQUAL_F64) #define SLJIT_GREATER_F64 18 -#define SLJIT_GREATER_F32 (SLJIT_GREATER_F64 | SLJIT_F32_OP) +#define SLJIT_GREATER_F32 (SLJIT_GREATER_F64 | SLJIT_32) #define SLJIT_SET_GREATER_F SLJIT_SET(SLJIT_GREATER_F64) #define SLJIT_LESS_EQUAL_F64 19 -#define SLJIT_LESS_EQUAL_F32 (SLJIT_LESS_EQUAL_F64 | SLJIT_F32_OP) +#define SLJIT_LESS_EQUAL_F32 (SLJIT_LESS_EQUAL_F64 | SLJIT_32) #define SLJIT_SET_LESS_EQUAL_F SLJIT_SET(SLJIT_LESS_EQUAL_F64) #define SLJIT_UNORDERED_F64 20 -#define SLJIT_UNORDERED_F32 (SLJIT_UNORDERED_F64 | SLJIT_F32_OP) +#define SLJIT_UNORDERED_F32 (SLJIT_UNORDERED_F64 | SLJIT_32) #define SLJIT_SET_UNORDERED_F SLJIT_SET(SLJIT_UNORDERED_F64) #define SLJIT_ORDERED_F64 21 -#define SLJIT_ORDERED_F32 (SLJIT_ORDERED_F64 | SLJIT_F32_OP) +#define SLJIT_ORDERED_F32 (SLJIT_ORDERED_F64 | SLJIT_32) #define SLJIT_SET_ORDERED_F SLJIT_SET(SLJIT_ORDERED_F64) /* Unconditional jump types. */ @@ -1211,6 +1245,15 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_label* sljit_emit_label(struct sljit_compi /* The target can be changed during runtime (see: sljit_set_jump_addr). */ #define SLJIT_REWRITABLE_JUMP 0x1000 +/* When this flag is passed, the execution of the current function ends and + the called function returns to the caller of the current function. The + stack usage is reduced before the call, but it is not necessarily reduced + to zero. In the latter case the compiler needs to allocate space for some + arguments and the return register must be kept as well. + + This feature is highly experimental and not supported on SPARC platform + at the moment. */ +#define SLJIT_CALL_RETURN 0x2000 /* Emit a jump instruction. The destination is not set, only the type of the jump. type must be between SLJIT_EQUAL and SLJIT_FAST_CALL @@ -1221,15 +1264,14 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile /* Emit a C compiler (ABI) compatible function call. type must be SLJIT_CALL or SLJIT_CALL_CDECL - type can be combined (or'ed) with SLJIT_REWRITABLE_JUMP + type can be combined (or'ed) with SLJIT_REWRITABLE_JUMP and SLJIT_CALL_RETURN arg_types is the combination of SLJIT_RET / SLJIT_ARGx (SLJIT_DEF_RET / SLJIT_DEF_ARGx) macros Flags: destroy all flags. */ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_call(struct sljit_compiler *compiler, sljit_s32 type, sljit_s32 arg_types); /* Basic arithmetic comparison. In most architectures it is implemented as - an SLJIT_SUB operation (with SLJIT_UNUSED destination and setting - appropriate flags) followed by a sljit_emit_jump. However some + an compare operation followed by a sljit_emit_jump. However some architectures (i.e: ARM64 or MIPS) may employ special optimizations here. It is suggested to use this comparison form when appropriate. type must be between SLJIT_EQUAL and SLJIT_I_SIG_LESS_EQUAL @@ -1271,6 +1313,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_ijump(struct sljit_compiler *compi Direct form: set src to SLJIT_IMM() and srcw to the address Indirect form: any other valid addressing mode type must be SLJIT_CALL or SLJIT_CALL_CDECL + type can be combined (or'ed) with SLJIT_CALL_RETURN arg_types is the combination of SLJIT_RET / SLJIT_ARGx (SLJIT_DEF_RET / SLJIT_DEF_ARGx) macros Flags: destroy all flags. */ @@ -1298,7 +1341,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co type must be between SLJIT_EQUAL and SLJIT_ORDERED_F64 dst_reg must be a valid register and it can be combined - with SLJIT_I32_OP to perform a 32 bit arithmetic operation + with SLJIT_32 to perform a 32 bit arithmetic operation src must be register or immediate (SLJIT_IMM) Flags: - (does not modify flags) */ @@ -1454,26 +1497,29 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_u8 *SLJIT_FUNC sljit_stack_resize(struct sljit_st #if !(defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL) -/* Get the entry address of a given function. */ -#define SLJIT_FUNC_OFFSET(func_name) ((sljit_sw)func_name) +/* Get the entry address of a given function (signed, unsigned result). */ +#define SLJIT_FUNC_ADDR(func_name) ((sljit_sw)func_name) +#define SLJIT_FUNC_UADDR(func_name) ((sljit_uw)func_name) #else /* !(defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL) */ /* All JIT related code should be placed in the same context (library, binary, etc.). */ -#define SLJIT_FUNC_OFFSET(func_name) (*(sljit_sw*)(void*)func_name) +/* Get the entry address of a given function (signed, unsigned result). */ +#define SLJIT_FUNC_ADDR(func_name) (*(sljit_sw*)(void*)func_name) +#define SLJIT_FUNC_UADDR(func_name) (*(sljit_uw*)(void*)func_name) /* For powerpc64, the function pointers point to a context descriptor. */ struct sljit_function_context { - sljit_sw addr; - sljit_sw r2; - sljit_sw r11; + sljit_uw addr; + sljit_uw r2; + sljit_uw r11; }; /* Fill the context arguments using the addr and the function. If func_ptr is NULL, it will not be set to the address of context If addr is NULL, the function address also comes from the func pointer. */ -SLJIT_API_FUNC_ATTRIBUTE void sljit_set_function_context(void** func_ptr, struct sljit_function_context* context, sljit_sw addr, void* func); +SLJIT_API_FUNC_ATTRIBUTE void sljit_set_function_context(void** func_ptr, struct sljit_function_context* context, sljit_uw addr, void* func); #endif /* !(defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL) */ @@ -1516,17 +1562,19 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_float_register_index(sljit_s32 reg) Otherwise: size must be 4 and instruction argument must be 4 byte aligned. */ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_custom(struct sljit_compiler *compiler, - void *instruction, sljit_s32 size); + void *instruction, sljit_u32 size); /* Flags were set by a 32 bit operation. */ -#define SLJIT_CURRENT_FLAGS_I32_OP SLJIT_I32_OP +#define SLJIT_CURRENT_FLAGS_32 SLJIT_32 -/* Flags were set by an ADD, ADDC, SUB, SUBC, or NEG operation. */ -#define SLJIT_CURRENT_FLAGS_ADD_SUB 0x01 +/* Flags were set by an ADD or ADDC operations. */ +#define SLJIT_CURRENT_FLAGS_ADD 0x01 +/* Flags were set by a SUB, SUBC, or NEG operation. */ +#define SLJIT_CURRENT_FLAGS_SUB 0x02 -/* Flags were set by a SUB with unused destination. - Must be combined with SLJIT_CURRENT_FLAGS_ADD_SUB. */ -#define SLJIT_CURRENT_FLAGS_COMPARE 0x02 +/* Flags were set by sljit_emit_op2u with SLJIT_SUB opcode. + Must be combined with SLJIT_CURRENT_FLAGS_SUB. */ +#define SLJIT_CURRENT_FLAGS_COMPARE 0x04 /* Define the currently available CPU status flags. It is usually used after an sljit_emit_label or sljit_emit_op_custom operations to define which CPU diff --git a/thirdparty/pcre2/src/sljit/sljitNativeARM_32.c b/thirdparty/pcre2/src/sljit/sljitNativeARM_32.c index 74cf55fcd2..7b87f5907a 100644 --- a/thirdparty/pcre2/src/sljit/sljitNativeARM_32.c +++ b/thirdparty/pcre2/src/sljit/sljitNativeARM_32.c @@ -65,12 +65,17 @@ static const sljit_u8 reg_map[SLJIT_NUMBER_OF_REGISTERS + 5] = { }; static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { - 0, 0, 1, 2, 3, 4, 5, 6, 7 + 0, 0, 1, 2, 3, 4, 5, 15, 14, 13, 12, 11, 10, 9, 8, 6, 7 }; -#define RM(rm) (reg_map[rm]) -#define RD(rd) (reg_map[rd] << 12) -#define RN(rn) (reg_map[rn] << 16) +#define RM(rm) ((sljit_uw)reg_map[rm]) +#define RM8(rm) ((sljit_uw)reg_map[rm] << 8) +#define RD(rd) ((sljit_uw)reg_map[rd] << 12) +#define RN(rn) ((sljit_uw)reg_map[rn] << 16) + +#define VM(rm) ((sljit_uw)freg_map[rm]) +#define VD(rd) ((sljit_uw)freg_map[rd] << 12) +#define VN(rn) ((sljit_uw)freg_map[rn] << 16) /* --------------------------------------------------------------------- */ /* Instrucion forms */ @@ -107,6 +112,7 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { #define SBC 0xe0c00000 #define SMULL 0xe0c00090 #define SUB 0xe0400000 +#define TST 0xe1000000 #define UMULL 0xe0800090 #define VABS_F32 0xeeb00ac0 #define VADD_F32 0xee300a00 @@ -115,12 +121,15 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { #define VCVT_F64_F32 0xeeb70ac0 #define VCVT_S32_F32 0xeebd0ac0 #define VDIV_F32 0xee800a00 +#define VLDR_F32 0xed100a00 #define VMOV_F32 0xeeb00a40 #define VMOV 0xee000a10 #define VMOV2 0xec400a10 #define VMRS 0xeef1fa10 #define VMUL_F32 0xee200a00 #define VNEG_F32 0xeeb10a40 +#define VPOP 0xecbd0b00 +#define VPUSH 0xed2d0b00 #define VSTR_F32 0xed000a00 #define VSUB_F32 0xee300a40 @@ -204,7 +213,7 @@ static sljit_s32 push_inst_with_literal(struct sljit_compiler *compiler, sljit_u cpool_unique_ptr = compiler->cpool_unique; do { if ((*cpool_ptr == literal) && !(*cpool_unique_ptr)) { - cpool_index = cpool_ptr - compiler->cpool; + cpool_index = (sljit_uw)(cpool_ptr - compiler->cpool); break; } cpool_ptr++; @@ -293,7 +302,7 @@ static sljit_uw patch_pc_relative_loads(sljit_uw *last_pc_patch, sljit_uw *code_ while (last_pc_patch < code_ptr) { /* Data transfer instruction with Rn == r15. */ if ((*last_pc_patch & 0x0c0f0000) == 0x040f0000) { - diff = const_pool - last_pc_patch; + diff = (sljit_uw)(const_pool - last_pc_patch); ind = (*last_pc_patch) & 0xfff; /* Must be a load instruction with immediate offset. */ @@ -308,12 +317,12 @@ static sljit_uw patch_pc_relative_loads(sljit_uw *last_pc_patch, sljit_uw *code_ SLJIT_ASSERT(diff >= 1); if (diff >= 2 || ind > 0) { - diff = (diff + ind - 2) << 2; + diff = (diff + (sljit_uw)ind - 2) << 2; SLJIT_ASSERT(diff <= 0xfff); - *last_pc_patch = (*last_pc_patch & ~0xfff) | diff; + *last_pc_patch = (*last_pc_patch & ~(sljit_uw)0xfff) | diff; } else - *last_pc_patch = (*last_pc_patch & ~(0xfff | (1 << 23))) | 0x004; + *last_pc_patch = (*last_pc_patch & ~(sljit_uw)(0xfff | (1 << 23))) | 0x004; } last_pc_patch++; } @@ -329,24 +338,24 @@ struct future_patch { static sljit_s32 resolve_const_pool_index(struct sljit_compiler *compiler, struct future_patch **first_patch, sljit_uw cpool_current_index, sljit_uw *cpool_start_address, sljit_uw *buf_ptr) { - sljit_s32 value; + sljit_u32 value; struct future_patch *curr_patch, *prev_patch; SLJIT_UNUSED_ARG(compiler); /* Using the values generated by patch_pc_relative_loads. */ if (!*first_patch) - value = (sljit_s32)cpool_start_address[cpool_current_index]; + value = cpool_start_address[cpool_current_index]; else { curr_patch = *first_patch; prev_patch = NULL; while (1) { if (!curr_patch) { - value = (sljit_s32)cpool_start_address[cpool_current_index]; + value = cpool_start_address[cpool_current_index]; break; } if ((sljit_uw)curr_patch->index == cpool_current_index) { - value = curr_patch->value; + value = (sljit_uw)curr_patch->value; if (prev_patch) prev_patch->next = curr_patch->next; else @@ -359,8 +368,8 @@ static sljit_s32 resolve_const_pool_index(struct sljit_compiler *compiler, struc } } - if (value >= 0) { - if ((sljit_uw)value > cpool_current_index) { + if ((sljit_sw)value >= 0) { + if (value > cpool_current_index) { curr_patch = (struct future_patch*)SLJIT_MALLOC(sizeof(struct future_patch), compiler->allocator_data); if (!curr_patch) { while (*first_patch) { @@ -371,8 +380,8 @@ static sljit_s32 resolve_const_pool_index(struct sljit_compiler *compiler, struc return SLJIT_ERR_ALLOC_FAILED; } curr_patch->next = *first_patch; - curr_patch->index = value; - curr_patch->value = cpool_start_address[value]; + curr_patch->index = (sljit_sw)value; + curr_patch->value = (sljit_sw)cpool_start_address[value]; *first_patch = curr_patch; } cpool_start_address[value] = *buf_ptr; @@ -395,8 +404,8 @@ static sljit_s32 push_inst(struct sljit_compiler *compiler, sljit_uw inst) static SLJIT_INLINE sljit_s32 emit_imm(struct sljit_compiler *compiler, sljit_s32 reg, sljit_sw imm) { - FAIL_IF(push_inst(compiler, MOVW | RD(reg) | ((imm << 4) & 0xf0000) | (imm & 0xfff))); - return push_inst(compiler, MOVT | RD(reg) | ((imm >> 12) & 0xf0000) | ((imm >> 16) & 0xfff)); + FAIL_IF(push_inst(compiler, MOVW | RD(reg) | ((imm << 4) & 0xf0000) | ((sljit_u32)imm & 0xfff))); + return push_inst(compiler, MOVT | RD(reg) | ((imm >> 12) & 0xf0000) | (((sljit_u32)imm >> 16) & 0xfff)); } #endif @@ -554,8 +563,9 @@ static SLJIT_INLINE void inline_set_jump_addr(sljit_uw jump_ptr, sljit_sw execut } static sljit_uw get_imm(sljit_uw imm); +static sljit_s32 load_immediate(struct sljit_compiler *compiler, sljit_s32 reg, sljit_uw imm); -static SLJIT_INLINE void inline_set_const(sljit_uw addr, sljit_sw executable_offset, sljit_sw new_constant, sljit_s32 flush_cache) +static SLJIT_INLINE void inline_set_const(sljit_uw addr, sljit_sw executable_offset, sljit_uw new_constant, sljit_s32 flush_cache) { #if (defined SLJIT_CONFIG_ARM_V5 && SLJIT_CONFIG_ARM_V5) sljit_uw *ptr = (sljit_uw*)addr; @@ -658,7 +668,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil sljit_uw word_count; sljit_uw next_addr; sljit_sw executable_offset; - sljit_sw addr; + sljit_uw addr; #if (defined SLJIT_CONFIG_ARM_V5 && SLJIT_CONFIG_ARM_V5) sljit_uw cpool_size; sljit_uw cpool_skip_alignment; @@ -737,7 +747,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil if (label && label->size == word_count) { /* Points after the current instruction. */ label->addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset); - label->size = code_ptr - code; + label->size = (sljit_uw)(code_ptr - code); label = label->next; next_addr = compute_next_addr(label, jump, const_, put_label); @@ -770,7 +780,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil if (label && label->size == word_count) { /* code_ptr can be affected above. */ label->addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr + 1, executable_offset); - label->size = (code_ptr + 1) - code; + label->size = (sljit_uw)((code_ptr + 1) - code); label = label->next; } if (const_ && const_->addr == word_count) { @@ -799,8 +809,8 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil cpool_current_index = patch_pc_relative_loads(last_pc_patch, code_ptr, cpool_start_address, cpool_size); if (cpool_current_index > 0) { /* Unconditional branch. */ - *code_ptr = B | (((cpool_start_address - code_ptr) + cpool_current_index - 2) & ~PUSH_POOL); - code_ptr = cpool_start_address + cpool_current_index; + *code_ptr = B | (((sljit_uw)(cpool_start_address - code_ptr) + cpool_current_index - 2) & ~PUSH_POOL); + code_ptr = (sljit_uw*)(cpool_start_address + cpool_current_index); } cpool_skip_alignment = CONST_POOL_ALIGNMENT - 1; cpool_current_index = 0; @@ -822,7 +832,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil cpool_start_address = ALIGN_INSTRUCTION(code_ptr); cpool_current_index = patch_pc_relative_loads(last_pc_patch, code_ptr, cpool_start_address, compiler->cpool_fill); if (cpool_current_index > 0) - code_ptr = cpool_start_address + cpool_current_index; + code_ptr = (sljit_uw*)(cpool_start_address + cpool_current_index); buf_ptr = compiler->cpool; buf_end = buf_ptr + compiler->cpool_fill; @@ -845,15 +855,15 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil buf_ptr = (sljit_uw *)jump->addr; if (jump->flags & PATCH_B) { - addr = (sljit_sw)SLJIT_ADD_EXEC_OFFSET(buf_ptr + 2, executable_offset); + addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(buf_ptr + 2, executable_offset); if (!(jump->flags & JUMP_ADDR)) { SLJIT_ASSERT(jump->flags & JUMP_LABEL); - SLJIT_ASSERT(((sljit_sw)jump->u.label->addr - addr) <= 0x01ffffff && ((sljit_sw)jump->u.label->addr - addr) >= -0x02000000); - *buf_ptr |= (((sljit_sw)jump->u.label->addr - addr) >> 2) & 0x00ffffff; + SLJIT_ASSERT((sljit_sw)(jump->u.label->addr - addr) <= 0x01ffffff && (sljit_sw)(jump->u.label->addr - addr) >= -0x02000000); + *buf_ptr |= ((jump->u.label->addr - addr) >> 2) & 0x00ffffff; } else { - SLJIT_ASSERT(((sljit_sw)jump->u.target - addr) <= 0x01ffffff && ((sljit_sw)jump->u.target - addr) >= -0x02000000); - *buf_ptr |= (((sljit_sw)jump->u.target - addr) >> 2) & 0x00ffffff; + SLJIT_ASSERT((sljit_sw)(jump->u.target - addr) <= 0x01ffffff && (sljit_sw)(jump->u.target - addr) >= -0x02000000); + *buf_ptr |= ((jump->u.target - addr) >> 2) & 0x00ffffff; } } else if (jump->flags & SLJIT_REWRITABLE_JUMP) { @@ -923,7 +933,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil compiler->error = SLJIT_ERR_COMPILED; compiler->executable_offset = executable_offset; - compiler->executable_size = (code_ptr - code) * sizeof(sljit_uw); + compiler->executable_size = (sljit_uw)(code_ptr - code) * sizeof(sljit_uw); code = (sljit_uw *)SLJIT_ADD_EXEC_OFFSET(code, executable_offset); code_ptr = (sljit_uw *)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset); @@ -972,6 +982,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_has_cpu_feature(sljit_s32 feature_type) #define ALLOW_IMM 0x10 #define ALLOW_INV_IMM 0x20 #define ALLOW_ANY_IMM (ALLOW_IMM | ALLOW_INV_IMM) +#define ALLOW_NEG_IMM 0x40 /* s/l - store/load (1 bit) u/s - signed/unsigned (1 bit) @@ -999,7 +1010,7 @@ static const sljit_uw data_transfer_insts[16] = { }; #define EMIT_DATA_TRANSFER(type, add, target_reg, base_reg, arg) \ - (data_transfer_insts[(type) & 0xf] | ((add) << 23) | RD(target_reg) | RN(base_reg) | (arg)) + (data_transfer_insts[(type) & 0xf] | ((add) << 23) | RD(target_reg) | RN(base_reg) | (sljit_uw)(arg)) /* Normal ldr/str instruction. Type2: ldrsb, ldrh, ldrsh */ @@ -1008,6 +1019,26 @@ static const sljit_uw data_transfer_insts[16] = { #define TYPE2_TRANSFER_IMM(imm) \ (((imm) & 0xf) | (((imm) & 0xf0) << 4) | (1 << 22)) +#define EMIT_FPU_OPERATION(opcode, mode, dst, src1, src2) \ + ((sljit_uw)(opcode) | (sljit_uw)(mode) | VD(dst) | VM(src1) | VN(src2)) + +/* Flags for emit_op: */ + /* Arguments are swapped. */ +#define ARGS_SWAPPED 0x01 + /* Inverted immediate. */ +#define INV_IMM 0x02 + /* Source and destination is register. */ +#define MOVE_REG_CONV 0x04 + /* Unused return value. */ +#define UNUSED_RETURN 0x08 +/* SET_FLAGS must be (1 << 20) as it is also the value of S bit (can be used for optimization). */ +#define SET_FLAGS (1 << 20) +/* dst: reg + src1: reg + src2: reg or imm (if allowed) + SRC2_IMM must be (1 << 25) as it is also the value of I bit (can be used for optimization). */ +#define SRC2_IMM (1 << 25) + static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 inp_flags, sljit_s32 dst, sljit_sw dstw, sljit_s32 src1, sljit_sw src1w, @@ -1017,41 +1048,161 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_enter(struct sljit_compiler *compi sljit_s32 options, sljit_s32 arg_types, sljit_s32 scratches, sljit_s32 saveds, sljit_s32 fscratches, sljit_s32 fsaveds, sljit_s32 local_size) { - sljit_s32 args, size, i, tmp; - sljit_uw push; + sljit_uw imm, offset; + sljit_s32 i, tmp, size, word_arg_count, saved_arg_count; +#ifdef __SOFTFP__ + sljit_u32 float_arg_count; +#else + sljit_u32 old_offset, f32_offset; + sljit_u32 remap[3]; + sljit_u32 *remap_ptr = remap; +#endif CHECK_ERROR(); CHECK(check_sljit_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size)); set_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size); - /* Push saved registers, temporary registers - stmdb sp!, {..., lr} */ - push = PUSH | (1 << 14); + imm = 0; - tmp = saveds < SLJIT_NUMBER_OF_SAVED_REGISTERS ? (SLJIT_S0 + 1 - saveds) : SLJIT_FIRST_SAVED_REG; - for (i = SLJIT_S0; i >= tmp; i--) - push |= 1 << reg_map[i]; + tmp = SLJIT_S0 - saveds; + for (i = SLJIT_S0; i > tmp; i--) + imm |= (sljit_uw)1 << reg_map[i]; for (i = scratches; i >= SLJIT_FIRST_SAVED_REG; i--) - push |= 1 << reg_map[i]; + imm |= (sljit_uw)1 << reg_map[i]; + + SLJIT_ASSERT(reg_map[TMP_REG2] == 14); - FAIL_IF(push_inst(compiler, push)); + /* Push saved and temporary registers + multiple registers: stmdb sp!, {..., lr} + single register: str reg, [sp, #-4]! */ + if (imm != 0) + FAIL_IF(push_inst(compiler, PUSH | (1 << 14) | imm)); + else + FAIL_IF(push_inst(compiler, 0xe52d0004 | RD(TMP_REG2))); /* Stack must be aligned to 8 bytes: */ size = GET_SAVED_REGISTERS_SIZE(scratches, saveds, 1); - local_size = ((size + local_size + 7) & ~7) - size; + + if (fsaveds > 0 || fscratches >= SLJIT_FIRST_SAVED_FLOAT_REG) { + if ((size & SSIZE_OF(sw)) != 0) { + FAIL_IF(push_inst(compiler, SUB | RD(SLJIT_SP) | RN(SLJIT_SP) | SRC2_IMM | sizeof(sljit_sw))); + size += SSIZE_OF(sw); + } + + if (fsaveds + fscratches >= SLJIT_NUMBER_OF_FLOAT_REGISTERS) { + FAIL_IF(push_inst(compiler, VPUSH | VD(SLJIT_FS0) | ((sljit_uw)SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS << 1))); + } else { + if (fsaveds > 0) + FAIL_IF(push_inst(compiler, VPUSH | VD(SLJIT_FS0) | ((sljit_uw)fsaveds << 1))); + if (fscratches >= SLJIT_FIRST_SAVED_FLOAT_REG) + FAIL_IF(push_inst(compiler, VPUSH | VD(fscratches) | ((sljit_uw)(fscratches - (SLJIT_FIRST_SAVED_FLOAT_REG - 1)) << 1))); + } + } + + local_size = ((size + local_size + 0x7) & ~0x7) - size; compiler->local_size = local_size; - if (local_size > 0) - FAIL_IF(emit_op(compiler, SLJIT_SUB, ALLOW_IMM, SLJIT_SP, 0, SLJIT_SP, 0, SLJIT_IMM, local_size)); - args = get_arg_count(arg_types); + arg_types >>= SLJIT_ARG_SHIFT; + word_arg_count = 0; + saved_arg_count = 0; +#ifdef __SOFTFP__ + SLJIT_COMPILE_ASSERT(SLJIT_FR0 == 1, float_register_index_start); + + offset = 0; + float_arg_count = 0; + + while (arg_types) { + switch (arg_types & SLJIT_ARG_MASK) { + case SLJIT_ARG_TYPE_F64: + if (offset & 0x7) + offset += sizeof(sljit_sw); + + if (offset < 4 * sizeof(sljit_sw)) + FAIL_IF(push_inst(compiler, VMOV2 | (offset << 10) | ((offset + sizeof(sljit_sw)) << 14) | float_arg_count)); + else + FAIL_IF(push_inst(compiler, VLDR_F32 | 0x800100 | RN(SLJIT_SP) + | (float_arg_count << 12) | ((offset + (sljit_uw)size - 4 * sizeof(sljit_sw)) >> 2))); + float_arg_count++; + offset += sizeof(sljit_f64) - sizeof(sljit_sw); + break; + case SLJIT_ARG_TYPE_F32: + if (offset < 4 * sizeof(sljit_sw)) + FAIL_IF(push_inst(compiler, VMOV | (float_arg_count << 16) | (offset << 10))); + else + FAIL_IF(push_inst(compiler, VLDR_F32 | 0x800000 | RN(SLJIT_SP) + | (float_arg_count << 12) | ((offset + (sljit_uw)size - 4 * sizeof(sljit_sw)) >> 2))); + float_arg_count++; + break; + default: + word_arg_count++; + + if (!(arg_types & SLJIT_ARG_TYPE_SCRATCH_REG)) { + tmp = SLJIT_S0 - saved_arg_count; + saved_arg_count++; + } else if (word_arg_count - 1 != (sljit_s32)(offset >> 2)) + tmp = word_arg_count; + else + break; + + if (offset < 4 * sizeof(sljit_sw)) + FAIL_IF(push_inst(compiler, MOV | RD(tmp) | (offset >> 2))); + else + FAIL_IF(push_inst(compiler, data_transfer_insts[WORD_SIZE | LOAD_DATA] | 0x800000 + | RN(SLJIT_SP) | RD(tmp) | (offset + (sljit_uw)size - 4 * sizeof(sljit_sw)))); + break; + } + + offset += sizeof(sljit_sw); + arg_types >>= SLJIT_ARG_SHIFT; + } + + compiler->args_size = offset; +#else + offset = SLJIT_FR0; + old_offset = SLJIT_FR0; + f32_offset = 0; + + while (arg_types) { + switch (arg_types & SLJIT_ARG_MASK) { + case SLJIT_ARG_TYPE_F64: + if (offset != old_offset) + *remap_ptr++ = EMIT_FPU_OPERATION(VMOV_F32, SLJIT_32, offset, old_offset, 0); + old_offset++; + offset++; + break; + case SLJIT_ARG_TYPE_F32: + if (f32_offset != 0) { + *remap_ptr++ = EMIT_FPU_OPERATION(VMOV_F32, 0x20, offset, f32_offset, 0); + f32_offset = 0; + } else { + if (offset != old_offset) + *remap_ptr++ = EMIT_FPU_OPERATION(VMOV_F32, 0, offset, old_offset, 0); + f32_offset = old_offset; + old_offset++; + } + offset++; + break; + default: + if (!(arg_types & SLJIT_ARG_TYPE_SCRATCH_REG)) { + FAIL_IF(push_inst(compiler, MOV | RD(SLJIT_S0 - saved_arg_count) | RM(SLJIT_R0 + word_arg_count))); + saved_arg_count++; + } + + word_arg_count++; + break; + } + arg_types >>= SLJIT_ARG_SHIFT; + } - if (args >= 1) - FAIL_IF(push_inst(compiler, MOV | RD(SLJIT_S0) | RM(SLJIT_R0))); - if (args >= 2) - FAIL_IF(push_inst(compiler, MOV | RD(SLJIT_S1) | RM(SLJIT_R1))); - if (args >= 3) - FAIL_IF(push_inst(compiler, MOV | RD(SLJIT_S2) | RM(SLJIT_R2))); + SLJIT_ASSERT((sljit_uw)(remap_ptr - remap) <= sizeof(remap)); + + while (remap_ptr > remap) + FAIL_IF(push_inst(compiler, *(--remap_ptr))); +#endif + + if (local_size > 0) + FAIL_IF(emit_op(compiler, SLJIT_SUB, ALLOW_IMM, SLJIT_SP, 0, SLJIT_SP, 0, SLJIT_IMM, local_size)); return SLJIT_SUCCESS; } @@ -1067,58 +1218,129 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_set_context(struct sljit_compiler *comp set_set_context(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size); size = GET_SAVED_REGISTERS_SIZE(scratches, saveds, 1); - compiler->local_size = ((size + local_size + 7) & ~7) - size; + + if ((size & SSIZE_OF(sw)) != 0 && (fsaveds > 0 || fscratches >= SLJIT_FIRST_SAVED_FLOAT_REG)) + size += SSIZE_OF(sw); + + compiler->local_size = ((size + local_size + 0x7) & ~0x7) - size; return SLJIT_SUCCESS; } -SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src, sljit_sw srcw) +static sljit_s32 emit_add_sp(struct sljit_compiler *compiler, sljit_uw imm) { - sljit_s32 i, tmp; - sljit_uw pop; + sljit_uw imm2 = get_imm(imm); - CHECK_ERROR(); - CHECK(check_sljit_emit_return(compiler, op, src, srcw)); + if (imm2 == 0) { + FAIL_IF(load_immediate(compiler, TMP_REG2, imm)); + imm2 = RM(TMP_REG2); + } - FAIL_IF(emit_mov_before_return(compiler, op, src, srcw)); + return push_inst(compiler, ADD | RD(SLJIT_SP) | RN(SLJIT_SP) | imm2); +} + +static sljit_s32 emit_stack_frame_release(struct sljit_compiler *compiler, sljit_s32 frame_size) +{ + sljit_s32 local_size, fscratches, fsaveds, i, tmp; + sljit_s32 lr_dst = TMP_PC; + sljit_uw reg_list; - if (compiler->local_size > 0) - FAIL_IF(emit_op(compiler, SLJIT_ADD, ALLOW_IMM, SLJIT_SP, 0, SLJIT_SP, 0, SLJIT_IMM, compiler->local_size)); + SLJIT_ASSERT(reg_map[TMP_REG2] == 14); - /* Push saved registers, temporary registers - ldmia sp!, {..., pc} */ - pop = POP | (1 << 15); + local_size = compiler->local_size; + fscratches = compiler->fscratches; + fsaveds = compiler->fsaveds; - tmp = compiler->saveds < SLJIT_NUMBER_OF_SAVED_REGISTERS ? (SLJIT_S0 + 1 - compiler->saveds) : SLJIT_FIRST_SAVED_REG; - for (i = SLJIT_S0; i >= tmp; i--) - pop |= 1 << reg_map[i]; + if (fsaveds > 0 || fscratches >= SLJIT_FIRST_SAVED_FLOAT_REG) { + if (local_size > 0) + FAIL_IF(emit_add_sp(compiler, (sljit_uw)local_size)); + + if (fsaveds + fscratches >= SLJIT_NUMBER_OF_FLOAT_REGISTERS) { + FAIL_IF(push_inst(compiler, VPOP | VD(SLJIT_FS0) | ((sljit_uw)SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS << 1))); + } else { + if (fscratches >= SLJIT_FIRST_SAVED_FLOAT_REG) + FAIL_IF(push_inst(compiler, VPOP | VD(fscratches) | ((sljit_uw)(fscratches - (SLJIT_FIRST_SAVED_FLOAT_REG - 1)) << 1))); + if (fsaveds > 0) + FAIL_IF(push_inst(compiler, VPOP | VD(SLJIT_FS0) | ((sljit_uw)fsaveds << 1))); + } + + local_size = GET_SAVED_REGISTERS_SIZE(compiler->scratches, compiler->saveds, 1) & 0x7; + } + + if (frame_size < 0) { + lr_dst = TMP_REG2; + frame_size = 0; + } else if (frame_size > 0) + lr_dst = 0; + + reg_list = 0; + if (lr_dst != 0) + reg_list |= (sljit_uw)1 << reg_map[lr_dst]; + + tmp = SLJIT_S0 - compiler->saveds; + for (i = SLJIT_S0; i > tmp; i--) + reg_list |= (sljit_uw)1 << reg_map[i]; for (i = compiler->scratches; i >= SLJIT_FIRST_SAVED_REG; i--) - pop |= 1 << reg_map[i]; + reg_list |= (sljit_uw)1 << reg_map[i]; + + if (lr_dst == 0 && (reg_list & (reg_list - 1)) == 0) { + /* The local_size does not include the saved registers. */ + local_size += SSIZE_OF(sw); + + if (reg_list != 0) + local_size += SSIZE_OF(sw); + + if (frame_size > local_size) + FAIL_IF(push_inst(compiler, SUB | RD(SLJIT_SP) | RN(SLJIT_SP) | (1 << 25) | (sljit_uw)(frame_size - local_size))); + else if (frame_size < local_size) + FAIL_IF(emit_add_sp(compiler, (sljit_uw)(local_size - frame_size))); + + if (reg_list == 0) + return SLJIT_SUCCESS; + + if (compiler->saveds > 0) { + SLJIT_ASSERT(reg_list == ((sljit_uw)1 << reg_map[SLJIT_S0])); + lr_dst = SLJIT_S0; + } else { + SLJIT_ASSERT(reg_list == ((sljit_uw)1 << reg_map[SLJIT_FIRST_SAVED_REG])); + lr_dst = SLJIT_FIRST_SAVED_REG; + } + + return push_inst(compiler, data_transfer_insts[WORD_SIZE | LOAD_DATA] | 0x800000 + | RN(SLJIT_SP) | RD(lr_dst) | (sljit_uw)(frame_size - 2 * SSIZE_OF(sw))); + } - return push_inst(compiler, pop); + if (local_size > 0) + FAIL_IF(emit_add_sp(compiler, (sljit_uw)local_size)); + + /* Pop saved and temporary registers + multiple registers: ldmia sp!, {...} + single register: ldr reg, [sp], #4 */ + if ((reg_list & (reg_list - 1)) == 0) { + SLJIT_ASSERT(lr_dst != 0); + SLJIT_ASSERT(reg_list == (sljit_uw)1 << reg_map[lr_dst]); + + return push_inst(compiler, 0xe49d0004 | RD(lr_dst)); + } + + FAIL_IF(push_inst(compiler, POP | reg_list)); + if (frame_size > 0) + return push_inst(compiler, SUB | RD(SLJIT_SP) | RN(SLJIT_SP) | (1 << 25) | ((sljit_uw)frame_size - sizeof(sljit_sw))); + return SLJIT_SUCCESS; +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return_void(struct sljit_compiler *compiler) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_return_void(compiler)); + + return emit_stack_frame_release(compiler, 0); } /* --------------------------------------------------------------------- */ /* Operators */ /* --------------------------------------------------------------------- */ -/* flags: */ - /* Arguments are swapped. */ -#define ARGS_SWAPPED 0x01 - /* Inverted immediate. */ -#define INV_IMM 0x02 - /* Source and destination is register. */ -#define MOVE_REG_CONV 0x04 - /* Unused return value. */ -#define UNUSED_RETURN 0x08 -/* SET_FLAGS must be (1 << 20) as it is also the value of S bit (can be used for optimization). */ -#define SET_FLAGS (1 << 20) -/* dst: reg - src1: reg - src2: reg or imm (if allowed) - SRC2_IMM must be (1 << 25) as it is also the value of I bit (can be used for optimization). */ -#define SRC2_IMM (1 << 25) - #define EMIT_SHIFT_INS_AND_RETURN(opcode) \ SLJIT_ASSERT(!(flags & INV_IMM) && !(src2 & SRC2_IMM)); \ if (compiler->shift_imm != 0x20) { \ @@ -1130,11 +1352,12 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return(struct sljit_compiler *comp RD(dst) | (compiler->shift_imm << 7) | (opcode << 5) | RM(src2)); \ return push_inst(compiler, MOV | (flags & SET_FLAGS) | RD(dst) | RM(src2)); \ } \ - return push_inst(compiler, MOV | (flags & SET_FLAGS) | RD(dst) | \ - (reg_map[(flags & ARGS_SWAPPED) ? src1 : src2] << 8) | (opcode << 5) | 0x10 | RM((flags & ARGS_SWAPPED) ? src2 : src1)); + return push_inst(compiler, MOV | (flags & SET_FLAGS) | RD(dst) \ + | RM8((flags & ARGS_SWAPPED) ? src1 : src2) | (sljit_uw)(opcode << 5) \ + | 0x10 | RM((flags & ARGS_SWAPPED) ? src2 : src1)); static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 flags, - sljit_s32 dst, sljit_s32 src1, sljit_s32 src2) + sljit_uw dst, sljit_uw src1, sljit_uw src2) { switch (GET_OPCODE(op)) { case SLJIT_MOV: @@ -1184,9 +1407,9 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl return SLJIT_SUCCESS; case SLJIT_NOT: - if (src2 & SRC2_IMM) { + if (src2 & SRC2_IMM) return push_inst(compiler, ((flags & INV_IMM) ? MOV : MVN) | (flags & SET_FLAGS) | RD(dst) | src2); - } + return push_inst(compiler, MVN | (flags & SET_FLAGS) | RD(dst) | RM(src2)); case SLJIT_CLZ: @@ -1197,9 +1420,8 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl case SLJIT_ADD: SLJIT_ASSERT(!(flags & INV_IMM)); - compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; - if ((flags & (UNUSED_RETURN | SET_FLAGS)) == (UNUSED_RETURN | SET_FLAGS) && !(flags & ARGS_SWAPPED)) + if ((flags & (UNUSED_RETURN | ARGS_SWAPPED)) == UNUSED_RETURN) return push_inst(compiler, CMN | SET_FLAGS | RN(src1) | ((src2 & SRC2_IMM) ? src2 : RM(src2))); return push_inst(compiler, ADD | (flags & SET_FLAGS) | RD(dst) | RN(src1) | ((src2 & SRC2_IMM) ? src2 : RM(src2))); @@ -1209,10 +1431,10 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl case SLJIT_SUB: SLJIT_ASSERT(!(flags & INV_IMM)); - compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; - if ((flags & (UNUSED_RETURN | SET_FLAGS)) == (UNUSED_RETURN | SET_FLAGS) && !(flags & ARGS_SWAPPED)) + if ((flags & (UNUSED_RETURN | ARGS_SWAPPED)) == UNUSED_RETURN) return push_inst(compiler, CMP | SET_FLAGS | RN(src1) | ((src2 & SRC2_IMM) ? src2 : RM(src2))); + return push_inst(compiler, (!(flags & ARGS_SWAPPED) ? SUB : RSB) | (flags & SET_FLAGS) | RD(dst) | RN(src1) | ((src2 & SRC2_IMM) ? src2 : RM(src2))); @@ -1227,14 +1449,16 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl compiler->status_flags_state = 0; if (!HAS_FLAGS(op)) - return push_inst(compiler, MUL | (reg_map[dst] << 16) | (reg_map[src2] << 8) | reg_map[src1]); + return push_inst(compiler, MUL | RN(dst) | RM8(src2) | RM(src1)); - FAIL_IF(push_inst(compiler, SMULL | (reg_map[TMP_REG1] << 16) | (reg_map[dst] << 12) | (reg_map[src2] << 8) | reg_map[src1])); + FAIL_IF(push_inst(compiler, SMULL | RN(TMP_REG1) | RD(dst) | RM8(src2) | RM(src1))); /* cmp TMP_REG1, dst asr #31. */ return push_inst(compiler, CMP | SET_FLAGS | RN(TMP_REG1) | RM(dst) | 0xfc0); case SLJIT_AND: + if ((flags & (UNUSED_RETURN | INV_IMM)) == UNUSED_RETURN) + return push_inst(compiler, TST | SET_FLAGS | RN(src1) | ((src2 & SRC2_IMM) ? src2 : RM(src2))); return push_inst(compiler, (!(flags & INV_IMM) ? AND : BIC) | (flags & SET_FLAGS) | RD(dst) | RN(src1) | ((src2 & SRC2_IMM) ? src2 : RM(src2))); @@ -1266,7 +1490,7 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl Returns with 0 if not possible. */ static sljit_uw get_imm(sljit_uw imm) { - sljit_s32 rol; + sljit_u32 rol; if (imm <= 0xff) return SRC2_IMM | imm; @@ -1307,7 +1531,7 @@ static sljit_s32 generate_int(struct sljit_compiler *compiler, sljit_s32 reg, sl sljit_uw mask; sljit_uw imm1; sljit_uw imm2; - sljit_s32 rol; + sljit_uw rol; /* Step1: Search a zero byte (8 continous zero bit). */ mask = 0xff000000; @@ -1418,7 +1642,7 @@ static sljit_s32 load_immediate(struct sljit_compiler *compiler, sljit_s32 reg, sljit_uw tmp; #if (defined SLJIT_CONFIG_ARM_V7 && SLJIT_CONFIG_ARM_V7) - if (!(imm & ~0xffff)) + if (!(imm & ~(sljit_uw)0xffff)) return push_inst(compiler, MOVW | RD(reg) | ((imm << 4) & 0xf0000) | (imm & 0xfff)); #endif @@ -1455,13 +1679,13 @@ static SLJIT_INLINE sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit SLJIT_ASSERT (arg & SLJIT_MEM); SLJIT_ASSERT((arg & REG_MASK) != tmp_reg); - if ((arg & REG_MASK) == SLJIT_UNUSED) { + if (!(arg & REG_MASK)) { if (is_type1_transfer) { - FAIL_IF(load_immediate(compiler, tmp_reg, argw & ~0xfff)); + FAIL_IF(load_immediate(compiler, tmp_reg, (sljit_uw)argw & ~(sljit_uw)0xfff)); argw &= 0xfff; } else { - FAIL_IF(load_immediate(compiler, tmp_reg, argw & ~0xff)); + FAIL_IF(load_immediate(compiler, tmp_reg, (sljit_uw)argw & ~(sljit_uw)0xff)); argw &= 0xff; } @@ -1475,20 +1699,20 @@ static SLJIT_INLINE sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit argw &= 0x3; if (argw != 0 && !is_type1_transfer) { - FAIL_IF(push_inst(compiler, ADD | RD(tmp_reg) | RN(arg) | RM(offset_reg) | (argw << 7))); + FAIL_IF(push_inst(compiler, ADD | RD(tmp_reg) | RN(arg) | RM(offset_reg) | ((sljit_uw)argw << 7))); return push_inst(compiler, EMIT_DATA_TRANSFER(flags, 1, reg, tmp_reg, TYPE2_TRANSFER_IMM(0))); } /* Bit 25: RM is offset. */ return push_inst(compiler, EMIT_DATA_TRANSFER(flags, 1, reg, arg, - RM(offset_reg) | (is_type1_transfer ? (1 << 25) : 0) | (argw << 7))); + RM(offset_reg) | (is_type1_transfer ? (1 << 25) : 0) | ((sljit_uw)argw << 7))); } arg &= REG_MASK; if (is_type1_transfer) { if (argw > 0xfff) { - imm = get_imm(argw & ~0xfff); + imm = get_imm((sljit_uw)argw & ~(sljit_uw)0xfff); if (imm) { FAIL_IF(push_inst(compiler, ADD | RD(tmp_reg) | RN(arg) | imm)); argw = argw & 0xfff; @@ -1496,7 +1720,7 @@ static SLJIT_INLINE sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit } } else if (argw < -0xfff) { - imm = get_imm(-argw & ~0xfff); + imm = get_imm((sljit_uw)-argw & ~(sljit_uw)0xfff); if (imm) { FAIL_IF(push_inst(compiler, SUB | RD(tmp_reg) | RN(arg) | imm)); argw = -(-argw & 0xfff); @@ -1512,7 +1736,7 @@ static SLJIT_INLINE sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit } else { if (argw > 0xff) { - imm = get_imm(argw & ~0xff); + imm = get_imm((sljit_uw)argw & ~(sljit_uw)0xff); if (imm) { FAIL_IF(push_inst(compiler, ADD | RD(tmp_reg) | RN(arg) | imm)); argw = argw & 0xff; @@ -1520,7 +1744,7 @@ static SLJIT_INLINE sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit } } else if (argw < -0xff) { - imm = get_imm(-argw & ~0xff); + imm = get_imm((sljit_uw)-argw & ~(sljit_uw)0xff); if (imm) { FAIL_IF(push_inst(compiler, SUB | RD(tmp_reg) | RN(arg) | imm)); argw = -(-argw & 0xff); @@ -1537,7 +1761,7 @@ static SLJIT_INLINE sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit } } - FAIL_IF(load_immediate(compiler, tmp_reg, argw)); + FAIL_IF(load_immediate(compiler, tmp_reg, (sljit_uw)argw)); return push_inst(compiler, EMIT_DATA_TRANSFER(flags, 1, reg, arg, RM(tmp_reg) | (is_type1_transfer ? (1 << 25) : 0))); } @@ -1554,50 +1778,62 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3 /* We prefers register and simple consts. */ sljit_s32 dst_reg; sljit_s32 src1_reg; - sljit_s32 src2_reg; + sljit_s32 src2_reg = 0; sljit_s32 flags = HAS_FLAGS(op) ? SET_FLAGS : 0; + sljit_s32 neg_op = 0; - /* Destination check. */ - if (SLJIT_UNLIKELY(dst == SLJIT_UNUSED)) + if (dst == TMP_REG2) flags |= UNUSED_RETURN; SLJIT_ASSERT(!(inp_flags & ALLOW_INV_IMM) || (inp_flags & ALLOW_IMM)); - src2_reg = 0; + if (inp_flags & ALLOW_NEG_IMM) { + switch (GET_OPCODE(op)) { + case SLJIT_ADD: + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD; + neg_op = SLJIT_SUB; + break; + case SLJIT_ADDC: + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD; + neg_op = SLJIT_SUBC; + break; + case SLJIT_SUB: + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_SUB; + neg_op = SLJIT_ADD; + break; + case SLJIT_SUBC: + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_SUB; + neg_op = SLJIT_ADDC; + break; + } + } do { if (!(inp_flags & ALLOW_IMM)) break; if (src2 & SLJIT_IMM) { - src2_reg = get_imm(src2w); + src2_reg = (sljit_s32)get_imm((sljit_uw)src2w); if (src2_reg) break; if (inp_flags & ALLOW_INV_IMM) { - src2_reg = get_imm(~src2w); + src2_reg = (sljit_s32)get_imm(~(sljit_uw)src2w); if (src2_reg) { flags |= INV_IMM; break; } } - if (GET_OPCODE(op) == SLJIT_ADD) { - src2_reg = get_imm(-src2w); + if (neg_op != 0) { + src2_reg = (sljit_s32)get_imm((sljit_uw)-src2w); if (src2_reg) { - op = SLJIT_SUB | GET_ALL_FLAGS(op); - break; - } - } - if (GET_OPCODE(op) == SLJIT_SUB) { - src2_reg = get_imm(-src2w); - if (src2_reg) { - op = SLJIT_ADD | GET_ALL_FLAGS(op); + op = neg_op | GET_ALL_FLAGS(op); break; } } } if (src1 & SLJIT_IMM) { - src2_reg = get_imm(src1w); + src2_reg = (sljit_s32)get_imm((sljit_uw)src1w); if (src2_reg) { flags |= ARGS_SWAPPED; src1 = src2; @@ -1605,7 +1841,7 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3 break; } if (inp_flags & ALLOW_INV_IMM) { - src2_reg = get_imm(~src1w); + src2_reg = (sljit_s32)get_imm(~(sljit_uw)src1w); if (src2_reg) { flags |= ARGS_SWAPPED | INV_IMM; src1 = src2; @@ -1613,13 +1849,13 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3 break; } } - if (GET_OPCODE(op) == SLJIT_ADD) { - src2_reg = get_imm(-src1w); + if (neg_op >= SLJIT_SUB) { + /* Note: additive operation (commutative). */ + src2_reg = (sljit_s32)get_imm((sljit_uw)-src1w); if (src2_reg) { - /* Note: add is commutative operation. */ src1 = src2; src1w = src2w; - op = SLJIT_SUB | GET_ALL_FLAGS(op); + op = neg_op | GET_ALL_FLAGS(op); break; } } @@ -1634,12 +1870,12 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3 src1_reg = TMP_REG1; } else { - FAIL_IF(load_immediate(compiler, TMP_REG1, src1w)); + FAIL_IF(load_immediate(compiler, TMP_REG1, (sljit_uw)src1w)); src1_reg = TMP_REG1; } /* Destination. */ - dst_reg = SLOW_IS_REG(dst) ? dst : TMP_REG2; + dst_reg = FAST_IS_REG(dst) ? dst : TMP_REG2; if (op <= SLJIT_MOV_P) { if (dst & SLJIT_MEM) { @@ -1663,10 +1899,10 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3 else if (src2 & SLJIT_MEM) FAIL_IF(emit_op_mem(compiler, inp_flags | LOAD_DATA, src2_reg, src2, src2w, TMP_REG2)); else - FAIL_IF(load_immediate(compiler, src2_reg, src2w)); + FAIL_IF(load_immediate(compiler, src2_reg, (sljit_uw)src2w)); } - FAIL_IF(emit_single_op(compiler, op, flags, dst_reg, src1_reg, src2_reg)); + FAIL_IF(emit_single_op(compiler, op, flags, (sljit_uw)dst_reg, (sljit_uw)src1_reg, (sljit_uw)src2_reg)); if (!(dst & SLJIT_MEM)) return SLJIT_SUCCESS; @@ -1691,7 +1927,7 @@ extern int __aeabi_idivmod(int numerator, int denominator); SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compiler, sljit_s32 op) { - sljit_sw saved_reg_list[3]; + sljit_uw saved_reg_list[3]; sljit_sw saved_reg_count; CHECK_ERROR(); @@ -1708,10 +1944,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compile case SLJIT_LMUL_UW: case SLJIT_LMUL_SW: return push_inst(compiler, (op == SLJIT_LMUL_UW ? UMULL : SMULL) - | (reg_map[SLJIT_R1] << 16) - | (reg_map[SLJIT_R0] << 12) - | (reg_map[SLJIT_R0] << 8) - | reg_map[SLJIT_R1]); + | RN(SLJIT_R1) | RD(SLJIT_R0) | RM8(SLJIT_R0) | RM(SLJIT_R1)); case SLJIT_DIVMOD_UW: case SLJIT_DIVMOD_SW: case SLJIT_DIV_UW: @@ -1742,7 +1975,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compile #if defined(__GNUC__) FAIL_IF(sljit_emit_ijump(compiler, SLJIT_FAST_CALL, SLJIT_IMM, - ((op | 0x2) == SLJIT_DIV_UW ? SLJIT_FUNC_OFFSET(__aeabi_uidivmod) : SLJIT_FUNC_OFFSET(__aeabi_idivmod)))); + ((op | 0x2) == SLJIT_DIV_UW ? SLJIT_FUNC_ADDR(__aeabi_uidivmod) : SLJIT_FUNC_ADDR(__aeabi_idivmod)))); #else #error "Software divmod functions are needed" #endif @@ -1756,7 +1989,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compile SLJIT_ASSERT(saved_reg_list[1] < 8); FAIL_IF(push_inst(compiler, 0xe59d0004 | (saved_reg_list[1] << 12) /* ldr rX, [sp, #4] */)); } - return push_inst(compiler, 0xe49d0000 | (saved_reg_count >= 3 ? 16 : 8) + return push_inst(compiler, 0xe49d0000 | (sljit_uw)(saved_reg_count >= 3 ? 16 : 8) | (saved_reg_list[0] << 12) /* ldr rX, [sp], #8/16 */); } return SLJIT_SUCCESS; @@ -1781,6 +2014,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile case SLJIT_MOV: case SLJIT_MOV_U32: case SLJIT_MOV_S32: + case SLJIT_MOV32: case SLJIT_MOV_P: return emit_op(compiler, SLJIT_MOV, ALLOW_ANY_IMM, dst, dstw, TMP_REG1, 0, src, srcw); @@ -1799,13 +2033,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile case SLJIT_NOT: return emit_op(compiler, op, ALLOW_ANY_IMM, dst, dstw, TMP_REG1, 0, src, srcw); - case SLJIT_NEG: -#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ - || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) - compiler->skip_checks = 1; -#endif - return sljit_emit_op2(compiler, SLJIT_SUB | GET_ALL_FLAGS(op), dst, dstw, SLJIT_IMM, 0, src, srcw); - case SLJIT_CLZ: return emit_op(compiler, op, 0, dst, dstw, TMP_REG1, 0, src, srcw); } @@ -1819,19 +2046,18 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile sljit_s32 src2, sljit_sw src2w) { CHECK_ERROR(); - CHECK(check_sljit_emit_op2(compiler, op, dst, dstw, src1, src1w, src2, src2w)); + CHECK(check_sljit_emit_op2(compiler, op, 0, dst, dstw, src1, src1w, src2, src2w)); ADJUST_LOCAL_OFFSET(dst, dstw); ADJUST_LOCAL_OFFSET(src1, src1w); ADJUST_LOCAL_OFFSET(src2, src2w); - if (dst == SLJIT_UNUSED && !HAS_FLAGS(op)) - return SLJIT_SUCCESS; - switch (GET_OPCODE(op)) { case SLJIT_ADD: case SLJIT_ADDC: case SLJIT_SUB: case SLJIT_SUBC: + return emit_op(compiler, op, ALLOW_IMM | ALLOW_NEG_IMM, dst, dstw, src1, src1w, src2, src2w); + case SLJIT_OR: case SLJIT_XOR: return emit_op(compiler, op, ALLOW_IMM, dst, dstw, src1, src1w, src2, src2w); @@ -1858,6 +2084,20 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile return SLJIT_SUCCESS; } +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2u(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2, sljit_sw src2w) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_op2(compiler, op, 1, 0, 0, src1, src1w, src2, src2w)); + +#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ + || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) + compiler->skip_checks = 1; +#endif + return sljit_emit_op2(compiler, op, TMP_REG2, 0, src1, src1w, src2, src2w); +} + SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_src(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src, sljit_sw srcw) { @@ -1905,8 +2145,9 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_float_register_index(sljit_s32 reg) } SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_custom(struct sljit_compiler *compiler, - void *instruction, sljit_s32 size) + void *instruction, sljit_u32 size) { + SLJIT_UNUSED_ARG(size); CHECK_ERROR(); CHECK(check_sljit_emit_op_custom(compiler, instruction, size)); @@ -1917,23 +2158,20 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_custom(struct sljit_compiler *c /* Floating point operators */ /* --------------------------------------------------------------------- */ - #define FPU_LOAD (1 << 20) #define EMIT_FPU_DATA_TRANSFER(inst, add, base, freg, offs) \ - ((inst) | ((add) << 23) | (reg_map[base] << 16) | (freg_map[freg] << 12) | (offs)) -#define EMIT_FPU_OPERATION(opcode, mode, dst, src1, src2) \ - ((opcode) | (mode) | (freg_map[dst] << 12) | freg_map[src1] | (freg_map[src2] << 16)) + ((inst) | (sljit_uw)((add) << 23) | RN(base) | VD(freg) | (sljit_uw)(offs)) static sljit_s32 emit_fop_mem(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg, sljit_s32 arg, sljit_sw argw) { sljit_uw imm; - sljit_sw inst = VSTR_F32 | (flags & (SLJIT_F32_OP | FPU_LOAD)); + sljit_uw inst = VSTR_F32 | (flags & (SLJIT_32 | FPU_LOAD)); SLJIT_ASSERT(arg & SLJIT_MEM); arg &= ~SLJIT_MEM; if (SLJIT_UNLIKELY(arg & OFFS_REG_MASK)) { - FAIL_IF(push_inst(compiler, ADD | RD(TMP_REG2) | RN(arg & REG_MASK) | RM(OFFS_REG(arg)) | ((argw & 0x3) << 7))); + FAIL_IF(push_inst(compiler, ADD | RD(TMP_REG2) | RN(arg & REG_MASK) | RM(OFFS_REG(arg)) | (((sljit_uw)argw & 0x3) << 7))); arg = TMP_REG2; argw = 0; } @@ -1945,12 +2183,12 @@ static sljit_s32 emit_fop_mem(struct sljit_compiler *compiler, sljit_s32 flags, if (!(-argw & ~0x3fc)) return push_inst(compiler, EMIT_FPU_DATA_TRANSFER(inst, 0, arg & REG_MASK, reg, (-argw) >> 2)); - imm = get_imm(argw & ~0x3fc); + imm = get_imm((sljit_uw)argw & ~(sljit_uw)0x3fc); if (imm) { FAIL_IF(push_inst(compiler, ADD | RD(TMP_REG2) | RN(arg & REG_MASK) | imm)); return push_inst(compiler, EMIT_FPU_DATA_TRANSFER(inst, 1, TMP_REG2, reg, (argw & 0x3fc) >> 2)); } - imm = get_imm(-argw & ~0x3fc); + imm = get_imm((sljit_uw)-argw & ~(sljit_uw)0x3fc); if (imm) { argw = -argw; FAIL_IF(push_inst(compiler, SUB | RD(TMP_REG2) | RN(arg & REG_MASK) | imm)); @@ -1959,11 +2197,11 @@ static sljit_s32 emit_fop_mem(struct sljit_compiler *compiler, sljit_s32 flags, } if (arg) { - FAIL_IF(load_immediate(compiler, TMP_REG2, argw)); + FAIL_IF(load_immediate(compiler, TMP_REG2, (sljit_uw)argw)); FAIL_IF(push_inst(compiler, ADD | RD(TMP_REG2) | RN(arg & REG_MASK) | RM(TMP_REG2))); } else - FAIL_IF(load_immediate(compiler, TMP_REG2, argw)); + FAIL_IF(load_immediate(compiler, TMP_REG2, (sljit_uw)argw)); return push_inst(compiler, EMIT_FPU_DATA_TRANSFER(inst, 1, TMP_REG2, reg, 0)); } @@ -1972,17 +2210,17 @@ static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_sw_from_f64(struct sljit_comp sljit_s32 dst, sljit_sw dstw, sljit_s32 src, sljit_sw srcw) { - op ^= SLJIT_F32_OP; + op ^= SLJIT_32; if (src & SLJIT_MEM) { - FAIL_IF(emit_fop_mem(compiler, (op & SLJIT_F32_OP) | FPU_LOAD, TMP_FREG1, src, srcw)); + FAIL_IF(emit_fop_mem(compiler, (op & SLJIT_32) | FPU_LOAD, TMP_FREG1, src, srcw)); src = TMP_FREG1; } - FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VCVT_S32_F32, op & SLJIT_F32_OP, TMP_FREG1, src, 0))); + FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VCVT_S32_F32, op & SLJIT_32, TMP_FREG1, src, 0))); if (FAST_IS_REG(dst)) - return push_inst(compiler, VMOV | (1 << 20) | RD(dst) | (freg_map[TMP_FREG1] << 16)); + return push_inst(compiler, VMOV | (1 << 20) | RD(dst) | VN(TMP_FREG1)); /* Store the integer value from a VFP register. */ return emit_fop_mem(compiler, 0, TMP_FREG1, dst, dstw); @@ -1994,23 +2232,23 @@ static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_f64_from_sw(struct sljit_comp { sljit_s32 dst_r = FAST_IS_REG(dst) ? dst : TMP_FREG1; - op ^= SLJIT_F32_OP; + op ^= SLJIT_32; if (FAST_IS_REG(src)) - FAIL_IF(push_inst(compiler, VMOV | RD(src) | (freg_map[TMP_FREG1] << 16))); + FAIL_IF(push_inst(compiler, VMOV | RD(src) | VN(TMP_FREG1))); else if (src & SLJIT_MEM) { /* Load the integer value into a VFP register. */ FAIL_IF(emit_fop_mem(compiler, FPU_LOAD, TMP_FREG1, src, srcw)); } else { - FAIL_IF(load_immediate(compiler, TMP_REG1, srcw)); - FAIL_IF(push_inst(compiler, VMOV | RD(TMP_REG1) | (freg_map[TMP_FREG1] << 16))); + FAIL_IF(load_immediate(compiler, TMP_REG1, (sljit_uw)srcw)); + FAIL_IF(push_inst(compiler, VMOV | RD(TMP_REG1) | VN(TMP_FREG1))); } - FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VCVT_F32_S32, op & SLJIT_F32_OP, dst_r, TMP_FREG1, 0))); + FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VCVT_F32_S32, op & SLJIT_32, dst_r, TMP_FREG1, 0))); if (dst & SLJIT_MEM) - return emit_fop_mem(compiler, (op & SLJIT_F32_OP), TMP_FREG1, dst, dstw); + return emit_fop_mem(compiler, (op & SLJIT_32), TMP_FREG1, dst, dstw); return SLJIT_SUCCESS; } @@ -2018,19 +2256,19 @@ static SLJIT_INLINE sljit_s32 sljit_emit_fop1_cmp(struct sljit_compiler *compile sljit_s32 src1, sljit_sw src1w, sljit_s32 src2, sljit_sw src2w) { - op ^= SLJIT_F32_OP; + op ^= SLJIT_32; if (src1 & SLJIT_MEM) { - FAIL_IF(emit_fop_mem(compiler, (op & SLJIT_F32_OP) | FPU_LOAD, TMP_FREG1, src1, src1w)); + FAIL_IF(emit_fop_mem(compiler, (op & SLJIT_32) | FPU_LOAD, TMP_FREG1, src1, src1w)); src1 = TMP_FREG1; } if (src2 & SLJIT_MEM) { - FAIL_IF(emit_fop_mem(compiler, (op & SLJIT_F32_OP) | FPU_LOAD, TMP_FREG2, src2, src2w)); + FAIL_IF(emit_fop_mem(compiler, (op & SLJIT_32) | FPU_LOAD, TMP_FREG2, src2, src2w)); src2 = TMP_FREG2; } - FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VCMP_F32, op & SLJIT_F32_OP, src1, src2, 0))); + FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VCMP_F32, op & SLJIT_32, src1, src2, 0))); return push_inst(compiler, VMRS); } @@ -2042,16 +2280,16 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compil CHECK_ERROR(); - SLJIT_COMPILE_ASSERT((SLJIT_F32_OP == 0x100), float_transfer_bit_error); + SLJIT_COMPILE_ASSERT((SLJIT_32 == 0x100), float_transfer_bit_error); SELECT_FOP1_OPERATION_WITH_CHECKS(compiler, op, dst, dstw, src, srcw); dst_r = FAST_IS_REG(dst) ? dst : TMP_FREG1; if (GET_OPCODE(op) != SLJIT_CONV_F64_FROM_F32) - op ^= SLJIT_F32_OP; + op ^= SLJIT_32; if (src & SLJIT_MEM) { - FAIL_IF(emit_fop_mem(compiler, (op & SLJIT_F32_OP) | FPU_LOAD, dst_r, src, srcw)); + FAIL_IF(emit_fop_mem(compiler, (op & SLJIT_32) | FPU_LOAD, dst_r, src, srcw)); src = dst_r; } @@ -2059,25 +2297,25 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compil case SLJIT_MOV_F64: if (src != dst_r) { if (dst_r != TMP_FREG1) - FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VMOV_F32, op & SLJIT_F32_OP, dst_r, src, 0))); + FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VMOV_F32, op & SLJIT_32, dst_r, src, 0))); else dst_r = src; } break; case SLJIT_NEG_F64: - FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VNEG_F32, op & SLJIT_F32_OP, dst_r, src, 0))); + FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VNEG_F32, op & SLJIT_32, dst_r, src, 0))); break; case SLJIT_ABS_F64: - FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VABS_F32, op & SLJIT_F32_OP, dst_r, src, 0))); + FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VABS_F32, op & SLJIT_32, dst_r, src, 0))); break; case SLJIT_CONV_F64_FROM_F32: - FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VCVT_F64_F32, op & SLJIT_F32_OP, dst_r, src, 0))); - op ^= SLJIT_F32_OP; + FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VCVT_F64_F32, op & SLJIT_32, dst_r, src, 0))); + op ^= SLJIT_32; break; } if (dst & SLJIT_MEM) - return emit_fop_mem(compiler, (op & SLJIT_F32_OP), dst_r, dst, dstw); + return emit_fop_mem(compiler, (op & SLJIT_32), dst_r, dst, dstw); return SLJIT_SUCCESS; } @@ -2094,40 +2332,40 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop2(struct sljit_compiler *compil ADJUST_LOCAL_OFFSET(src1, src1w); ADJUST_LOCAL_OFFSET(src2, src2w); - op ^= SLJIT_F32_OP; + op ^= SLJIT_32; dst_r = FAST_IS_REG(dst) ? dst : TMP_FREG1; if (src2 & SLJIT_MEM) { - FAIL_IF(emit_fop_mem(compiler, (op & SLJIT_F32_OP) | FPU_LOAD, TMP_FREG2, src2, src2w)); + FAIL_IF(emit_fop_mem(compiler, (op & SLJIT_32) | FPU_LOAD, TMP_FREG2, src2, src2w)); src2 = TMP_FREG2; } if (src1 & SLJIT_MEM) { - FAIL_IF(emit_fop_mem(compiler, (op & SLJIT_F32_OP) | FPU_LOAD, TMP_FREG1, src1, src1w)); + FAIL_IF(emit_fop_mem(compiler, (op & SLJIT_32) | FPU_LOAD, TMP_FREG1, src1, src1w)); src1 = TMP_FREG1; } switch (GET_OPCODE(op)) { case SLJIT_ADD_F64: - FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VADD_F32, op & SLJIT_F32_OP, dst_r, src2, src1))); + FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VADD_F32, op & SLJIT_32, dst_r, src2, src1))); break; case SLJIT_SUB_F64: - FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VSUB_F32, op & SLJIT_F32_OP, dst_r, src2, src1))); + FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VSUB_F32, op & SLJIT_32, dst_r, src2, src1))); break; case SLJIT_MUL_F64: - FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VMUL_F32, op & SLJIT_F32_OP, dst_r, src2, src1))); + FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VMUL_F32, op & SLJIT_32, dst_r, src2, src1))); break; case SLJIT_DIV_F64: - FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VDIV_F32, op & SLJIT_F32_OP, dst_r, src2, src1))); + FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VDIV_F32, op & SLJIT_32, dst_r, src2, src1))); break; } if (dst_r == TMP_FREG1) - FAIL_IF(emit_fop_mem(compiler, (op & SLJIT_F32_OP), TMP_FREG1, dst, dstw)); + FAIL_IF(emit_fop_mem(compiler, (op & SLJIT_32), TMP_FREG1, dst, dstw)); return SLJIT_SUCCESS; } @@ -2169,10 +2407,20 @@ static sljit_uw get_cc(struct sljit_compiler *compiler, sljit_s32 type) case SLJIT_NOT_EQUAL_F64: return 0x10000000; + case SLJIT_CARRY: + if (compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD) + return 0x20000000; + /* fallthrough */ + case SLJIT_LESS: case SLJIT_LESS_F64: return 0x30000000; + case SLJIT_NOT_CARRY: + if (compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD) + return 0x30000000; + /* fallthrough */ + case SLJIT_GREATER_EQUAL: case SLJIT_GREATER_EQUAL_F64: return 0x20000000; @@ -2198,15 +2446,17 @@ static sljit_uw get_cc(struct sljit_compiler *compiler, sljit_s32 type) return 0xd0000000; case SLJIT_OVERFLOW: - if (!(compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB)) + if (!(compiler->status_flags_state & (SLJIT_CURRENT_FLAGS_ADD | SLJIT_CURRENT_FLAGS_SUB))) return 0x10000000; + /* fallthrough */ case SLJIT_UNORDERED_F64: return 0x60000000; case SLJIT_NOT_OVERFLOW: - if (!(compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB)) + if (!(compiler->status_flags_state & (SLJIT_CURRENT_FLAGS_ADD | SLJIT_CURRENT_FLAGS_SUB))) return 0x00000000; + /* fallthrough */ case SLJIT_ORDERED_F64: return 0x70000000; @@ -2277,111 +2527,124 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile #ifdef __SOFTFP__ -static sljit_s32 softfloat_call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_types, sljit_s32 *src) +static sljit_s32 softfloat_call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_types, sljit_s32 *src, sljit_u32 *extra_space) { - sljit_s32 stack_offset = 0; - sljit_s32 arg_count = 0; - sljit_s32 word_arg_offset = 0; - sljit_s32 float_arg_count = 0; + sljit_u32 is_tail_call = *extra_space & SLJIT_CALL_RETURN; + sljit_u32 offset = 0; + sljit_u32 word_arg_offset = 0; + sljit_u32 src_offset = 4 * sizeof(sljit_sw); + sljit_u32 float_arg_count = 0; sljit_s32 types = 0; - sljit_s32 src_offset = 4 * sizeof(sljit_sw); sljit_u8 offsets[4]; + sljit_u8 *offset_ptr = offsets; if (src && FAST_IS_REG(*src)) - src_offset = reg_map[*src] * sizeof(sljit_sw); + src_offset = (sljit_uw)reg_map[*src] * sizeof(sljit_sw); - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; while (arg_types) { - types = (types << SLJIT_DEF_SHIFT) | (arg_types & SLJIT_DEF_MASK); + types = (types << SLJIT_ARG_SHIFT) | (arg_types & SLJIT_ARG_MASK); - switch (arg_types & SLJIT_DEF_MASK) { - case SLJIT_ARG_TYPE_F32: - offsets[arg_count] = (sljit_u8)stack_offset; - stack_offset += sizeof(sljit_f32); - arg_count++; + switch (arg_types & SLJIT_ARG_MASK) { + case SLJIT_ARG_TYPE_F64: + if (offset & 0x7) + offset += sizeof(sljit_sw); + *offset_ptr++ = (sljit_u8)offset; + offset += sizeof(sljit_f64); float_arg_count++; break; - case SLJIT_ARG_TYPE_F64: - if (stack_offset & 0x7) - stack_offset += sizeof(sljit_sw); - offsets[arg_count] = (sljit_u8)stack_offset; - stack_offset += sizeof(sljit_f64); - arg_count++; + case SLJIT_ARG_TYPE_F32: + *offset_ptr++ = (sljit_u8)offset; + offset += sizeof(sljit_f32); float_arg_count++; break; default: - offsets[arg_count] = (sljit_u8)stack_offset; - stack_offset += sizeof(sljit_sw); - arg_count++; + *offset_ptr++ = (sljit_u8)offset; + offset += sizeof(sljit_sw); word_arg_offset += sizeof(sljit_sw); break; } - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; } - if (stack_offset > 16) - FAIL_IF(push_inst(compiler, SUB | RD(SLJIT_SP) | RN(SLJIT_SP) | SRC2_IMM | (((stack_offset - 16) + 0x7) & ~0x7))); + if (offset > 4 * sizeof(sljit_sw) && (!is_tail_call || offset > compiler->args_size)) { + /* Keep lr register on the stack. */ + if (is_tail_call) + offset += sizeof(sljit_sw); + + offset = ((offset - 4 * sizeof(sljit_sw)) + 0x7) & ~(sljit_uw)0x7; + + *extra_space = offset; + + if (is_tail_call) + FAIL_IF(emit_stack_frame_release(compiler, (sljit_s32)offset)); + else + FAIL_IF(push_inst(compiler, SUB | RD(SLJIT_SP) | RN(SLJIT_SP) | SRC2_IMM | offset)); + } else { + if (is_tail_call) + FAIL_IF(emit_stack_frame_release(compiler, -1)); + *extra_space = 0; + } /* Process arguments in reversed direction. */ while (types) { - switch (types & SLJIT_DEF_MASK) { - case SLJIT_ARG_TYPE_F32: - arg_count--; + switch (types & SLJIT_ARG_MASK) { + case SLJIT_ARG_TYPE_F64: float_arg_count--; - stack_offset = offsets[arg_count]; + offset = *(--offset_ptr); + + SLJIT_ASSERT((offset & 0x7) == 0); - if (stack_offset < 16) { - if (src_offset == stack_offset) { + if (offset < 4 * sizeof(sljit_sw)) { + if (src_offset == offset || src_offset == offset + sizeof(sljit_sw)) { FAIL_IF(push_inst(compiler, MOV | RD(TMP_REG1) | (src_offset >> 2))); *src = TMP_REG1; } - FAIL_IF(push_inst(compiler, VMOV | 0x100000 | (float_arg_count << 16) | (stack_offset << 10))); + FAIL_IF(push_inst(compiler, VMOV2 | 0x100000 | (offset << 10) | ((offset + sizeof(sljit_sw)) << 14) | float_arg_count)); } else - FAIL_IF(push_inst(compiler, VSTR_F32 | 0x800000 | RN(SLJIT_SP) | (float_arg_count << 12) | ((stack_offset - 16) >> 2))); + FAIL_IF(push_inst(compiler, VSTR_F32 | 0x800100 | RN(SLJIT_SP) + | (float_arg_count << 12) | ((offset - 4 * sizeof(sljit_sw)) >> 2))); break; - case SLJIT_ARG_TYPE_F64: - arg_count--; + case SLJIT_ARG_TYPE_F32: float_arg_count--; - stack_offset = offsets[arg_count]; - - SLJIT_ASSERT((stack_offset & 0x7) == 0); + offset = *(--offset_ptr); - if (stack_offset < 16) { - if (src_offset == stack_offset || src_offset == stack_offset + sizeof(sljit_sw)) { + if (offset < 4 * sizeof(sljit_sw)) { + if (src_offset == offset) { FAIL_IF(push_inst(compiler, MOV | RD(TMP_REG1) | (src_offset >> 2))); *src = TMP_REG1; } - FAIL_IF(push_inst(compiler, VMOV2 | 0x100000 | (stack_offset << 10) | ((stack_offset + sizeof(sljit_sw)) << 14) | float_arg_count)); + FAIL_IF(push_inst(compiler, VMOV | 0x100000 | (float_arg_count << 16) | (offset << 10))); } else - FAIL_IF(push_inst(compiler, VSTR_F32 | 0x800100 | RN(SLJIT_SP) | (float_arg_count << 12) | ((stack_offset - 16) >> 2))); + FAIL_IF(push_inst(compiler, VSTR_F32 | 0x800000 | RN(SLJIT_SP) + | (float_arg_count << 12) | ((offset - 4 * sizeof(sljit_sw)) >> 2))); break; default: - arg_count--; word_arg_offset -= sizeof(sljit_sw); - stack_offset = offsets[arg_count]; + offset = *(--offset_ptr); - SLJIT_ASSERT(stack_offset >= word_arg_offset); + SLJIT_ASSERT(offset >= word_arg_offset); - if (stack_offset != word_arg_offset) { - if (stack_offset < 16) { - if (src_offset == stack_offset) { + if (offset != word_arg_offset) { + if (offset < 4 * sizeof(sljit_sw)) { + if (src_offset == offset) { FAIL_IF(push_inst(compiler, MOV | RD(TMP_REG1) | (src_offset >> 2))); *src = TMP_REG1; } else if (src_offset == word_arg_offset) { - *src = 1 + (stack_offset >> 2); - src_offset = stack_offset; + *src = (sljit_s32)(SLJIT_R0 + (offset >> 2)); + src_offset = offset; } - FAIL_IF(push_inst(compiler, MOV | (stack_offset << 10) | (word_arg_offset >> 2))); + FAIL_IF(push_inst(compiler, MOV | (offset << 10) | (word_arg_offset >> 2))); } else - FAIL_IF(push_inst(compiler, data_transfer_insts[WORD_SIZE] | 0x800000 | RN(SLJIT_SP) | (word_arg_offset << 10) | (stack_offset - 16))); + FAIL_IF(push_inst(compiler, data_transfer_insts[WORD_SIZE] | 0x800000 | RN(SLJIT_SP) | (word_arg_offset << 10) | (offset - 4 * sizeof(sljit_sw)))); } break; } - types >>= SLJIT_DEF_SHIFT; + types >>= SLJIT_ARG_SHIFT; } return SLJIT_SUCCESS; @@ -2389,83 +2652,51 @@ static sljit_s32 softfloat_call_with_args(struct sljit_compiler *compiler, sljit static sljit_s32 softfloat_post_call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_types) { - sljit_s32 stack_size = 0; - - if ((arg_types & SLJIT_DEF_MASK) == SLJIT_ARG_TYPE_F32) - FAIL_IF(push_inst(compiler, VMOV | (0 << 16) | (0 << 12))); - if ((arg_types & SLJIT_DEF_MASK) == SLJIT_ARG_TYPE_F64) + if ((arg_types & SLJIT_ARG_MASK) == SLJIT_ARG_TYPE_F64) FAIL_IF(push_inst(compiler, VMOV2 | (1 << 16) | (0 << 12) | 0)); + if ((arg_types & SLJIT_ARG_MASK) == SLJIT_ARG_TYPE_F32) + FAIL_IF(push_inst(compiler, VMOV | (0 << 16) | (0 << 12))); - arg_types >>= SLJIT_DEF_SHIFT; - - while (arg_types) { - switch (arg_types & SLJIT_DEF_MASK) { - case SLJIT_ARG_TYPE_F32: - stack_size += sizeof(sljit_f32); - break; - case SLJIT_ARG_TYPE_F64: - if (stack_size & 0x7) - stack_size += sizeof(sljit_sw); - stack_size += sizeof(sljit_f64); - break; - default: - stack_size += sizeof(sljit_sw); - break; - } - - arg_types >>= SLJIT_DEF_SHIFT; - } - - if (stack_size <= 16) - return SLJIT_SUCCESS; - - return push_inst(compiler, ADD | RD(SLJIT_SP) | RN(SLJIT_SP) | SRC2_IMM | (((stack_size - 16) + 0x7) & ~0x7)); + return SLJIT_SUCCESS; } #else /* !__SOFTFP__ */ static sljit_s32 hardfloat_call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_types) { - sljit_u32 remap = 0; - sljit_u32 offset = 0; - sljit_u32 new_offset, mask; + sljit_u32 offset = SLJIT_FR0; + sljit_u32 new_offset = SLJIT_FR0; + sljit_u32 f32_offset = 0; /* Remove return value. */ - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; while (arg_types) { - if ((arg_types & SLJIT_DEF_MASK) == SLJIT_ARG_TYPE_F32) { - new_offset = 0; - mask = 1; - - while (remap & mask) { - new_offset++; - mask <<= 1; - } - remap |= mask; - + switch (arg_types & SLJIT_ARG_MASK) { + case SLJIT_ARG_TYPE_F64: if (offset != new_offset) FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VMOV_F32, - 0, (new_offset >> 1) + 1, (offset >> 1) + 1, 0) | ((new_offset & 0x1) ? 0x400000 : 0))); + SLJIT_32, new_offset, offset, 0))); - offset += 2; - } - else if ((arg_types & SLJIT_DEF_MASK) == SLJIT_ARG_TYPE_F64) { - new_offset = 0; - mask = 3; - - while (remap & mask) { - new_offset += 2; - mask <<= 2; + new_offset++; + offset++; + break; + case SLJIT_ARG_TYPE_F32: + if (f32_offset != 0) { + FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VMOV_F32, + 0x400000, f32_offset, offset, 0))); + f32_offset = 0; + } else { + if (offset != new_offset) + FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VMOV_F32, + 0, new_offset, offset, 0))); + f32_offset = new_offset; + new_offset++; } - remap |= mask; - - if (offset != new_offset) - FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VMOV_F32, SLJIT_F32_OP, (new_offset >> 1) + 1, (offset >> 1) + 1, 0))); - - offset += 2; + offset++; + break; } - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; } return SLJIT_SUCCESS; @@ -2480,13 +2711,18 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_call(struct sljit_compile { #ifdef __SOFTFP__ struct sljit_jump *jump; + sljit_u32 extra_space = (sljit_u32)type; #endif CHECK_ERROR_PTR(); CHECK_PTR(check_sljit_emit_call(compiler, type, arg_types)); #ifdef __SOFTFP__ - PTR_FAIL_IF(softfloat_call_with_args(compiler, arg_types, NULL)); + PTR_FAIL_IF(softfloat_call_with_args(compiler, arg_types, NULL, &extra_space)); + SLJIT_ASSERT((extra_space & 0x7) == 0); + + if ((type & SLJIT_CALL_RETURN) && extra_space == 0) + type = SLJIT_JUMP | (type & SLJIT_REWRITABLE_JUMP); #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) @@ -2496,9 +2732,28 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_call(struct sljit_compile jump = sljit_emit_jump(compiler, type); PTR_FAIL_IF(jump == NULL); + if (extra_space > 0) { + if (type & SLJIT_CALL_RETURN) + PTR_FAIL_IF(push_inst(compiler, EMIT_DATA_TRANSFER(WORD_SIZE | LOAD_DATA, 1, + TMP_REG2, SLJIT_SP, extra_space - sizeof(sljit_sw)))); + + PTR_FAIL_IF(push_inst(compiler, ADD | RD(SLJIT_SP) | RN(SLJIT_SP) | SRC2_IMM | extra_space)); + + if (type & SLJIT_CALL_RETURN) { + PTR_FAIL_IF(push_inst(compiler, BX | RM(TMP_REG2))); + return jump; + } + } + + SLJIT_ASSERT(!(type & SLJIT_CALL_RETURN)); PTR_FAIL_IF(softfloat_post_call_with_args(compiler, arg_types)); return jump; #else /* !__SOFTFP__ */ + if (type & SLJIT_CALL_RETURN) { + PTR_FAIL_IF(emit_stack_frame_release(compiler, -1)); + type = SLJIT_JUMP | (type & SLJIT_REWRITABLE_JUMP); + } + PTR_FAIL_IF(hardfloat_call_with_args(compiler, arg_types)); #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ @@ -2535,7 +2790,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_ijump(struct sljit_compiler *compi jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump)); FAIL_IF(!jump); set_jump(jump, compiler, JUMP_ADDR | ((type >= SLJIT_FAST_CALL) ? IS_BL : 0)); - jump->u.target = srcw; + jump->u.target = (sljit_uw)srcw; #if (defined SLJIT_CONFIG_ARM_V5 && SLJIT_CONFIG_ARM_V5) if (type >= SLJIT_FAST_CALL) @@ -2555,16 +2810,29 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_icall(struct sljit_compiler *compi sljit_s32 arg_types, sljit_s32 src, sljit_sw srcw) { +#ifdef __SOFTFP__ + sljit_u32 extra_space = (sljit_u32)type; +#endif + CHECK_ERROR(); CHECK(check_sljit_emit_icall(compiler, type, arg_types, src, srcw)); -#ifdef __SOFTFP__ if (src & SLJIT_MEM) { FAIL_IF(emit_op_mem(compiler, WORD_SIZE | LOAD_DATA, TMP_REG1, src, srcw, TMP_REG1)); src = TMP_REG1; } - FAIL_IF(softfloat_call_with_args(compiler, arg_types, &src)); + if ((type & SLJIT_CALL_RETURN) && (src >= SLJIT_FIRST_SAVED_REG && src <= SLJIT_S0)) { + FAIL_IF(push_inst(compiler, MOV | RD(TMP_REG1) | RM(src))); + src = TMP_REG1; + } + +#ifdef __SOFTFP__ + FAIL_IF(softfloat_call_with_args(compiler, arg_types, &src, &extra_space)); + SLJIT_ASSERT((extra_space & 0x7) == 0); + + if ((type & SLJIT_CALL_RETURN) && extra_space == 0) + type = SLJIT_JUMP; #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) @@ -2573,8 +2841,25 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_icall(struct sljit_compiler *compi FAIL_IF(sljit_emit_ijump(compiler, type, src, srcw)); + if (extra_space > 0) { + if (type & SLJIT_CALL_RETURN) + FAIL_IF(push_inst(compiler, EMIT_DATA_TRANSFER(WORD_SIZE | LOAD_DATA, 1, + TMP_REG2, SLJIT_SP, extra_space - sizeof(sljit_sw)))); + + FAIL_IF(push_inst(compiler, ADD | RD(SLJIT_SP) | RN(SLJIT_SP) | SRC2_IMM | extra_space)); + + if (type & SLJIT_CALL_RETURN) + return push_inst(compiler, BX | RM(TMP_REG2)); + } + + SLJIT_ASSERT(!(type & SLJIT_CALL_RETURN)); return softfloat_post_call_with_args(compiler, arg_types); #else /* !__SOFTFP__ */ + if (type & SLJIT_CALL_RETURN) { + FAIL_IF(emit_stack_frame_release(compiler, -1)); + type = SLJIT_JUMP; + } + FAIL_IF(hardfloat_call_with_args(compiler, arg_types)); #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ @@ -2636,27 +2921,27 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_cmov(struct sljit_compiler *compil CHECK_ERROR(); CHECK(check_sljit_emit_cmov(compiler, type, dst_reg, src, srcw)); - dst_reg &= ~SLJIT_I32_OP; + dst_reg &= ~SLJIT_32; cc = get_cc(compiler, type & 0xff); if (SLJIT_UNLIKELY(src & SLJIT_IMM)) { - tmp = get_imm(srcw); + tmp = get_imm((sljit_uw)srcw); if (tmp) return push_inst(compiler, ((MOV | RD(dst_reg) | tmp) & ~COND_MASK) | cc); - tmp = get_imm(~srcw); + tmp = get_imm(~(sljit_uw)srcw); if (tmp) return push_inst(compiler, ((MVN | RD(dst_reg) | tmp) & ~COND_MASK) | cc); #if (defined SLJIT_CONFIG_ARM_V7 && SLJIT_CONFIG_ARM_V7) - tmp = (sljit_uw) srcw; + tmp = (sljit_uw)srcw; FAIL_IF(push_inst(compiler, (MOVW & ~COND_MASK) | cc | RD(dst_reg) | ((tmp << 4) & 0xf0000) | (tmp & 0xfff))); if (tmp <= 0xffff) return SLJIT_SUCCESS; return push_inst(compiler, (MOVT & ~COND_MASK) | cc | RD(dst_reg) | ((tmp >> 12) & 0xf0000) | ((tmp >> 16) & 0xfff)); #else - FAIL_IF(load_immediate(compiler, TMP_REG1, srcw)); + FAIL_IF(load_immediate(compiler, TMP_REG1, (sljit_uw)srcw)); src = TMP_REG1; #endif } @@ -2680,6 +2965,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_mem(struct sljit_compiler *compile case SLJIT_MOV: case SLJIT_MOV_U32: case SLJIT_MOV_S32: + case SLJIT_MOV32: case SLJIT_MOV_P: flags = WORD_SIZE; break; @@ -2731,7 +3017,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_mem(struct sljit_compiler *compile if (SLJIT_UNLIKELY(mem & OFFS_REG_MASK)) { memw &= 0x3; - inst = EMIT_DATA_TRANSFER(flags, 1, reg, mem & REG_MASK, RM(OFFS_REG(mem)) | (memw << 7)); + inst = EMIT_DATA_TRANSFER(flags, 1, reg, mem & REG_MASK, RM(OFFS_REG(mem)) | ((sljit_uw)memw << 7)); if (is_type1_transfer) inst |= (1 << 25); @@ -2757,7 +3043,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_mem(struct sljit_compiler *compile else memw = -memw; - return push_inst(compiler, inst | memw); + return push_inst(compiler, inst | (sljit_uw)memw); } if (memw >= 0) @@ -2765,7 +3051,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_mem(struct sljit_compiler *compile else memw = -memw; - return push_inst(compiler, inst | TYPE2_TRANSFER_IMM(memw)); + return push_inst(compiler, inst | TYPE2_TRANSFER_IMM((sljit_uw)memw)); } SLJIT_API_FUNC_ATTRIBUTE struct sljit_const* sljit_emit_const(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw dstw, sljit_sw init_value) @@ -2777,10 +3063,11 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_const* sljit_emit_const(struct sljit_compi CHECK_PTR(check_sljit_emit_const(compiler, dst, dstw, init_value)); ADJUST_LOCAL_OFFSET(dst, dstw); - dst_r = SLOW_IS_REG(dst) ? dst : TMP_REG2; + dst_r = FAST_IS_REG(dst) ? dst : TMP_REG2; #if (defined SLJIT_CONFIG_ARM_V5 && SLJIT_CONFIG_ARM_V5) - PTR_FAIL_IF(push_inst_with_unique_literal(compiler, EMIT_DATA_TRANSFER(WORD_SIZE | LOAD_DATA, 1, dst_r, TMP_PC, 0), init_value)); + PTR_FAIL_IF(push_inst_with_unique_literal(compiler, + EMIT_DATA_TRANSFER(WORD_SIZE | LOAD_DATA, 1, dst_r, TMP_PC, 0), (sljit_uw)init_value)); compiler->patches++; #else PTR_FAIL_IF(emit_imm(compiler, dst_r, init_value)); @@ -2804,7 +3091,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_put_label* sljit_emit_put_label(struct slj CHECK_PTR(check_sljit_emit_put_label(compiler, dst, dstw)); ADJUST_LOCAL_OFFSET(dst, dstw); - dst_r = SLOW_IS_REG(dst) ? dst : TMP_REG2; + dst_r = FAST_IS_REG(dst) ? dst : TMP_REG2; #if (defined SLJIT_CONFIG_ARM_V5 && SLJIT_CONFIG_ARM_V5) PTR_FAIL_IF(push_inst_with_unique_literal(compiler, EMIT_DATA_TRANSFER(WORD_SIZE | LOAD_DATA, 1, dst_r, TMP_PC, 0), 0)); @@ -2829,5 +3116,5 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_set_jump_addr(sljit_uw addr, sljit_uw new_ta SLJIT_API_FUNC_ATTRIBUTE void sljit_set_const(sljit_uw addr, sljit_sw new_constant, sljit_sw executable_offset) { - inline_set_const(addr, executable_offset, new_constant, 1); + inline_set_const(addr, executable_offset, (sljit_uw)new_constant, 1); } diff --git a/thirdparty/pcre2/src/sljit/sljitNativeARM_64.c b/thirdparty/pcre2/src/sljit/sljitNativeARM_64.c index 3f0f5fcc30..96453b4abe 100644 --- a/thirdparty/pcre2/src/sljit/sljitNativeARM_64.c +++ b/thirdparty/pcre2/src/sljit/sljitNativeARM_64.c @@ -48,19 +48,20 @@ static const sljit_u8 reg_map[SLJIT_NUMBER_OF_REGISTERS + 8] = { }; static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { - 0, 0, 1, 2, 3, 4, 5, 6, 7 + 0, 0, 1, 2, 3, 4, 5, 6, 7, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 15, 14, 13, 12, 11, 10, 9, 8, 30, 31 }; -#define W_OP (1u << 31) -#define RD(rd) (reg_map[rd]) -#define RT(rt) (reg_map[rt]) -#define RN(rn) (reg_map[rn] << 5) -#define RT2(rt2) (reg_map[rt2] << 10) -#define RM(rm) (reg_map[rm] << 16) -#define VD(vd) (freg_map[vd]) -#define VT(vt) (freg_map[vt]) -#define VN(vn) (freg_map[vn] << 5) -#define VM(vm) (freg_map[vm] << 16) +#define W_OP ((sljit_ins)1 << 31) +#define RD(rd) ((sljit_ins)reg_map[rd]) +#define RT(rt) ((sljit_ins)reg_map[rt]) +#define RN(rn) ((sljit_ins)reg_map[rn] << 5) +#define RT2(rt2) ((sljit_ins)reg_map[rt2] << 10) +#define RM(rm) ((sljit_ins)reg_map[rm] << 16) +#define VD(vd) ((sljit_ins)freg_map[vd]) +#define VT(vt) ((sljit_ins)freg_map[vt]) +#define VT2(vt) ((sljit_ins)freg_map[vt] << 10) +#define VN(vn) ((sljit_ins)freg_map[vn] << 5) +#define VM(vm) ((sljit_ins)freg_map[vm] << 16) /* --------------------------------------------------------------------- */ /* Instrucion forms */ @@ -96,8 +97,10 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { #define FNEG 0x1e614000 #define FSUB 0x1e603800 #define LDRI 0xf9400000 +#define LDRI_F64 0xfd400000 #define LDP 0xa9400000 -#define LDP_PRE 0xa9c00000 +#define LDP_F64 0x6d400000 +#define LDP_POST 0xa8c00000 #define LDR_PRE 0xf8400c00 #define LSLV 0x9ac02000 #define LSRV 0x9ac02400 @@ -117,10 +120,12 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { #define SMADDL 0x9b200000 #define SMULH 0x9b403c00 #define STP 0xa9000000 +#define STP_F64 0x6d000000 #define STP_PRE 0xa9800000 #define STRB 0x38206800 #define STRBI 0x39000000 #define STRI 0xf9000000 +#define STRI_F64 0xfd000000 #define STR_FI 0x3d000000 #define STR_FR 0x3c206800 #define STUR_FI 0x3c000000 @@ -145,10 +150,10 @@ static sljit_s32 push_inst(struct sljit_compiler *compiler, sljit_ins ins) static SLJIT_INLINE sljit_s32 emit_imm64_const(struct sljit_compiler *compiler, sljit_s32 dst, sljit_uw imm) { - FAIL_IF(push_inst(compiler, MOVZ | RD(dst) | ((imm & 0xffff) << 5))); - FAIL_IF(push_inst(compiler, MOVK | RD(dst) | (((imm >> 16) & 0xffff) << 5) | (1 << 21))); - FAIL_IF(push_inst(compiler, MOVK | RD(dst) | (((imm >> 32) & 0xffff) << 5) | (2 << 21))); - return push_inst(compiler, MOVK | RD(dst) | ((imm >> 48) << 5) | (3 << 21)); + FAIL_IF(push_inst(compiler, MOVZ | RD(dst) | ((sljit_ins)(imm & 0xffff) << 5))); + FAIL_IF(push_inst(compiler, MOVK | RD(dst) | (((sljit_ins)(imm >> 16) & 0xffff) << 5) | (1 << 21))); + FAIL_IF(push_inst(compiler, MOVK | RD(dst) | (((sljit_ins)(imm >> 32) & 0xffff) << 5) | (2 << 21))); + return push_inst(compiler, MOVK | RD(dst) | ((sljit_ins)(imm >> 48) << 5) | (3 << 21)); } static SLJIT_INLINE sljit_sw detect_jump_type(struct sljit_jump *jump, sljit_ins *code_ptr, sljit_ins *code, sljit_sw executable_offset) @@ -171,14 +176,14 @@ static SLJIT_INLINE sljit_sw detect_jump_type(struct sljit_jump *jump, sljit_ins diff = (sljit_sw)target_addr - (sljit_sw)(code_ptr + 4) - executable_offset; if (jump->flags & IS_COND) { - diff += sizeof(sljit_ins); + diff += SSIZE_OF(ins); if (diff <= 0xfffff && diff >= -0x100000) { code_ptr[-5] ^= (jump->flags & IS_CBZ) ? (0x1 << 24) : 0x1; jump->addr -= sizeof(sljit_ins); jump->flags |= PATCH_COND; return 5; } - diff -= sizeof(sljit_ins); + diff -= SSIZE_OF(ins); } if (diff <= 0x7ffffff && diff >= -0x8000000) { @@ -231,8 +236,8 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil sljit_uw word_count; sljit_uw next_addr; sljit_sw executable_offset; - sljit_uw addr; - sljit_s32 dst; + sljit_sw addr; + sljit_u32 dst; struct sljit_label *label; struct sljit_jump *jump; @@ -271,7 +276,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil /* These structures are ordered by their address. */ if (label && label->size == word_count) { label->addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset); - label->size = code_ptr - code; + label->size = (sljit_uw)(code_ptr - code); label = label->next; } if (jump && jump->addr == word_count) { @@ -300,7 +305,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil if (label && label->size == word_count) { label->addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset); - label->size = code_ptr - code; + label->size = (sljit_uw)(code_ptr - code); label = label->next; } @@ -313,58 +318,58 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil jump = compiler->jumps; while (jump) { do { - addr = (jump->flags & JUMP_LABEL) ? jump->u.label->addr : jump->u.target; + addr = (sljit_sw)((jump->flags & JUMP_LABEL) ? jump->u.label->addr : jump->u.target); buf_ptr = (sljit_ins *)jump->addr; if (jump->flags & PATCH_B) { - addr = (sljit_sw)(addr - (sljit_uw)SLJIT_ADD_EXEC_OFFSET(buf_ptr, executable_offset)) >> 2; - SLJIT_ASSERT((sljit_sw)addr <= 0x1ffffff && (sljit_sw)addr >= -0x2000000); - buf_ptr[0] = ((jump->flags & IS_BL) ? BL : B) | (addr & 0x3ffffff); + addr = (addr - (sljit_sw)SLJIT_ADD_EXEC_OFFSET(buf_ptr, executable_offset)) >> 2; + SLJIT_ASSERT(addr <= 0x1ffffff && addr >= -0x2000000); + buf_ptr[0] = ((jump->flags & IS_BL) ? BL : B) | (sljit_ins)(addr & 0x3ffffff); if (jump->flags & IS_COND) buf_ptr[-1] -= (4 << 5); break; } if (jump->flags & PATCH_COND) { - addr = (sljit_sw)(addr - (sljit_uw)SLJIT_ADD_EXEC_OFFSET(buf_ptr, executable_offset)) >> 2; - SLJIT_ASSERT((sljit_sw)addr <= 0x3ffff && (sljit_sw)addr >= -0x40000); - buf_ptr[0] = (buf_ptr[0] & ~0xffffe0) | ((addr & 0x7ffff) << 5); + addr = (addr - (sljit_sw)SLJIT_ADD_EXEC_OFFSET(buf_ptr, executable_offset)) >> 2; + SLJIT_ASSERT(addr <= 0x3ffff && addr >= -0x40000); + buf_ptr[0] = (buf_ptr[0] & ~(sljit_ins)0xffffe0) | (sljit_ins)((addr & 0x7ffff) << 5); break; } - SLJIT_ASSERT((jump->flags & (PATCH_ABS48 | PATCH_ABS64)) || addr <= 0xffffffffl); - SLJIT_ASSERT((jump->flags & PATCH_ABS64) || addr <= 0xffffffffffffl); + SLJIT_ASSERT((jump->flags & (PATCH_ABS48 | PATCH_ABS64)) || (sljit_uw)addr <= (sljit_uw)0xffffffff); + SLJIT_ASSERT((jump->flags & PATCH_ABS64) || (sljit_uw)addr <= (sljit_uw)0xffffffffffff); dst = buf_ptr[0] & 0x1f; - buf_ptr[0] = MOVZ | dst | ((addr & 0xffff) << 5); - buf_ptr[1] = MOVK | dst | (((addr >> 16) & 0xffff) << 5) | (1 << 21); + buf_ptr[0] = MOVZ | dst | (((sljit_ins)addr & 0xffff) << 5); + buf_ptr[1] = MOVK | dst | (((sljit_ins)(addr >> 16) & 0xffff) << 5) | (1 << 21); if (jump->flags & (PATCH_ABS48 | PATCH_ABS64)) - buf_ptr[2] = MOVK | dst | (((addr >> 32) & 0xffff) << 5) | (2 << 21); + buf_ptr[2] = MOVK | dst | (((sljit_ins)(addr >> 32) & 0xffff) << 5) | (2 << 21); if (jump->flags & PATCH_ABS64) - buf_ptr[3] = MOVK | dst | (((addr >> 48) & 0xffff) << 5) | (3 << 21); + buf_ptr[3] = MOVK | dst | ((sljit_ins)(addr >> 48) << 5) | (3 << 21); } while (0); jump = jump->next; } put_label = compiler->put_labels; while (put_label) { - addr = put_label->label->addr; - buf_ptr = (sljit_ins *)put_label->addr; + addr = (sljit_sw)put_label->label->addr; + buf_ptr = (sljit_ins*)put_label->addr; - buf_ptr[0] |= (addr & 0xffff) << 5; - buf_ptr[1] |= ((addr >> 16) & 0xffff) << 5; + buf_ptr[0] |= ((sljit_ins)addr & 0xffff) << 5; + buf_ptr[1] |= ((sljit_ins)(addr >> 16) & 0xffff) << 5; if (put_label->flags >= 1) - buf_ptr[2] |= ((addr >> 32) & 0xffff) << 5; + buf_ptr[2] |= ((sljit_ins)(addr >> 32) & 0xffff) << 5; if (put_label->flags >= 2) - buf_ptr[3] |= ((addr >> 48) & 0xffff) << 5; + buf_ptr[3] |= (sljit_ins)(addr >> 48) << 5; put_label = put_label->next; } compiler->error = SLJIT_ERR_COMPILED; compiler->executable_offset = executable_offset; - compiler->executable_size = (code_ptr - code) * sizeof(sljit_ins); + compiler->executable_size = (sljit_uw)(code_ptr - code) * sizeof(sljit_ins); code = (sljit_ins *)SLJIT_ADD_EXEC_OFFSET(code, executable_offset); code_ptr = (sljit_ins *)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset); @@ -426,11 +431,12 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_has_cpu_feature(sljit_s32 feature_type) value >>= 1; \ } -#define LOGICAL_IMM_CHECK 0x100 +#define LOGICAL_IMM_CHECK (sljit_ins)0x100 -static sljit_ins logical_imm(sljit_sw imm, sljit_s32 len) +static sljit_ins logical_imm(sljit_sw imm, sljit_u32 len) { - sljit_s32 negated, ones, right; + sljit_s32 negated; + sljit_u32 ones, right; sljit_uw mask, uimm; sljit_ins ins; @@ -497,30 +503,30 @@ static sljit_ins logical_imm(sljit_sw imm, sljit_s32 len) static sljit_s32 load_immediate(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw simm) { sljit_uw imm = (sljit_uw)simm; - sljit_s32 i, zeros, ones, first; + sljit_u32 i, zeros, ones, first; sljit_ins bitmask; /* Handling simple immediates first. */ if (imm <= 0xffff) - return push_inst(compiler, MOVZ | RD(dst) | (imm << 5)); + return push_inst(compiler, MOVZ | RD(dst) | ((sljit_ins)imm << 5)); if (simm < 0 && simm >= -0x10000) - return push_inst(compiler, MOVN | RD(dst) | ((~imm & 0xffff) << 5)); + return push_inst(compiler, MOVN | RD(dst) | (((sljit_ins)~imm & 0xffff) << 5)); if (imm <= 0xffffffffl) { if ((imm & 0xffff) == 0) - return push_inst(compiler, MOVZ | RD(dst) | ((imm >> 16) << 5) | (1 << 21)); + return push_inst(compiler, MOVZ | RD(dst) | ((sljit_ins)(imm >> 16) << 5) | (1 << 21)); if ((imm & 0xffff0000l) == 0xffff0000) - return push_inst(compiler, (MOVN ^ W_OP) | RD(dst) | ((~imm & 0xffff) << 5)); + return push_inst(compiler, (MOVN ^ W_OP) | RD(dst) | (((sljit_ins)~imm & 0xffff) << 5)); if ((imm & 0xffff) == 0xffff) - return push_inst(compiler, (MOVN ^ W_OP) | RD(dst) | ((~imm & 0xffff0000l) >> (16 - 5)) | (1 << 21)); + return push_inst(compiler, (MOVN ^ W_OP) | RD(dst) | (((sljit_ins)~imm & 0xffff0000u) >> (16 - 5)) | (1 << 21)); bitmask = logical_imm(simm, 16); if (bitmask != 0) return push_inst(compiler, (ORRI ^ W_OP) | RD(dst) | RN(TMP_ZERO) | bitmask); - FAIL_IF(push_inst(compiler, MOVZ | RD(dst) | ((imm & 0xffff) << 5))); - return push_inst(compiler, MOVK | RD(dst) | ((imm & 0xffff0000l) >> (16 - 5)) | (1 << 21)); + FAIL_IF(push_inst(compiler, MOVZ | RD(dst) | (((sljit_ins)imm & 0xffff) << 5))); + return push_inst(compiler, MOVK | RD(dst) | (((sljit_ins)imm & 0xffff0000u) >> (16 - 5)) | (1 << 21)); } bitmask = logical_imm(simm, 32); @@ -529,10 +535,10 @@ static sljit_s32 load_immediate(struct sljit_compiler *compiler, sljit_s32 dst, if (simm < 0 && simm >= -0x100000000l) { if ((imm & 0xffff) == 0xffff) - return push_inst(compiler, MOVN | RD(dst) | ((~imm & 0xffff0000l) >> (16 - 5)) | (1 << 21)); + return push_inst(compiler, MOVN | RD(dst) | (((sljit_ins)~imm & 0xffff0000u) >> (16 - 5)) | (1 << 21)); - FAIL_IF(push_inst(compiler, MOVN | RD(dst) | ((~imm & 0xffff) << 5))); - return push_inst(compiler, MOVK | RD(dst) | ((imm & 0xffff0000l) >> (16 - 5)) | (1 << 21)); + FAIL_IF(push_inst(compiler, MOVN | RD(dst) | (((sljit_ins)~imm & 0xffff) << 5))); + return push_inst(compiler, MOVK | RD(dst) | (((sljit_ins)imm & 0xffff0000u) >> (16 - 5)) | (1 << 21)); } /* A large amount of number can be constructed from ORR and MOVx, but computing them is costly. */ @@ -558,10 +564,10 @@ static sljit_s32 load_immediate(struct sljit_compiler *compiler, sljit_s32 dst, } if (first) { first = 0; - FAIL_IF(push_inst(compiler, MOVN | RD(dst) | ((simm & 0xffff) << 5) | (i << 21))); + FAIL_IF(push_inst(compiler, MOVN | RD(dst) | (((sljit_ins)simm & 0xffff) << 5) | (i << 21))); } else - FAIL_IF(push_inst(compiler, MOVK | RD(dst) | ((~simm & 0xffff) << 5) | (i << 21))); + FAIL_IF(push_inst(compiler, MOVK | RD(dst) | (((sljit_ins)~simm & 0xffff) << 5) | (i << 21))); simm >>= 16; } return SLJIT_SUCCESS; @@ -574,10 +580,10 @@ static sljit_s32 load_immediate(struct sljit_compiler *compiler, sljit_s32 dst, } if (first) { first = 0; - FAIL_IF(push_inst(compiler, MOVZ | RD(dst) | ((simm & 0xffff) << 5) | (i << 21))); + FAIL_IF(push_inst(compiler, MOVZ | RD(dst) | (((sljit_ins)simm & 0xffff) << 5) | (i << 21))); } else - FAIL_IF(push_inst(compiler, MOVK | RD(dst) | ((simm & 0xffff) << 5) | (i << 21))); + FAIL_IF(push_inst(compiler, MOVK | RD(dst) | (((sljit_ins)simm & 0xffff) << 5) | (i << 21))); simm >>= 16; } return SLJIT_SUCCESS; @@ -619,12 +625,11 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s } if (flags & (ARG1_IMM | ARG2_IMM)) { - reg = (flags & ARG2_IMM) ? arg1 : arg2; + reg = (sljit_s32)((flags & ARG2_IMM) ? arg1 : arg2); imm = (flags & ARG2_IMM) ? arg2 : arg1; switch (op) { case SLJIT_MUL: - case SLJIT_NEG: case SLJIT_CLZ: case SLJIT_ADDC: case SLJIT_SUBC: @@ -639,40 +644,43 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s FAIL_IF(load_immediate(compiler, dst, (flags & INT_OP) ? (~imm & 0xffffffff) : ~imm)); goto set_flags; case SLJIT_SUB: + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_SUB; if (flags & ARG1_IMM) break; imm = -imm; /* Fall through. */ case SLJIT_ADD: - compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; + if (op != SLJIT_SUB) + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD; + if (imm == 0) { CHECK_FLAGS(1 << 29); return push_inst(compiler, ((op == SLJIT_ADD ? ADDI : SUBI) ^ inv_bits) | RD(dst) | RN(reg)); } if (imm > 0 && imm <= 0xfff) { CHECK_FLAGS(1 << 29); - return push_inst(compiler, (ADDI ^ inv_bits) | RD(dst) | RN(reg) | (imm << 10)); + return push_inst(compiler, (ADDI ^ inv_bits) | RD(dst) | RN(reg) | ((sljit_ins)imm << 10)); } nimm = -imm; if (nimm > 0 && nimm <= 0xfff) { CHECK_FLAGS(1 << 29); - return push_inst(compiler, (SUBI ^ inv_bits) | RD(dst) | RN(reg) | (nimm << 10)); + return push_inst(compiler, (SUBI ^ inv_bits) | RD(dst) | RN(reg) | ((sljit_ins)nimm << 10)); } if (imm > 0 && imm <= 0xffffff && !(imm & 0xfff)) { CHECK_FLAGS(1 << 29); - return push_inst(compiler, (ADDI ^ inv_bits) | RD(dst) | RN(reg) | ((imm >> 12) << 10) | (1 << 22)); + return push_inst(compiler, (ADDI ^ inv_bits) | RD(dst) | RN(reg) | (((sljit_ins)imm >> 12) << 10) | (1 << 22)); } if (nimm > 0 && nimm <= 0xffffff && !(nimm & 0xfff)) { CHECK_FLAGS(1 << 29); - return push_inst(compiler, (SUBI ^ inv_bits) | RD(dst) | RN(reg) | ((nimm >> 12) << 10) | (1 << 22)); + return push_inst(compiler, (SUBI ^ inv_bits) | RD(dst) | RN(reg) | (((sljit_ins)nimm >> 12) << 10) | (1 << 22)); } if (imm > 0 && imm <= 0xffffff && !(flags & SET_FLAGS)) { - FAIL_IF(push_inst(compiler, (ADDI ^ inv_bits) | RD(dst) | RN(reg) | ((imm >> 12) << 10) | (1 << 22))); - return push_inst(compiler, (ADDI ^ inv_bits) | RD(dst) | RN(dst) | ((imm & 0xfff) << 10)); + FAIL_IF(push_inst(compiler, (ADDI ^ inv_bits) | RD(dst) | RN(reg) | (((sljit_ins)imm >> 12) << 10) | (1 << 22))); + return push_inst(compiler, (ADDI ^ inv_bits) | RD(dst) | RN(dst) | (((sljit_ins)imm & 0xfff) << 10)); } if (nimm > 0 && nimm <= 0xffffff && !(flags & SET_FLAGS)) { - FAIL_IF(push_inst(compiler, (SUBI ^ inv_bits) | RD(dst) | RN(reg) | ((nimm >> 12) << 10) | (1 << 22))); - return push_inst(compiler, (SUBI ^ inv_bits) | RD(dst) | RN(dst) | ((nimm & 0xfff) << 10)); + FAIL_IF(push_inst(compiler, (SUBI ^ inv_bits) | RD(dst) | RN(reg) | (((sljit_ins)nimm >> 12) << 10) | (1 << 22))); + return push_inst(compiler, (SUBI ^ inv_bits) | RD(dst) | RN(dst) | (((sljit_ins)nimm & 0xfff) << 10)); } break; case SLJIT_AND: @@ -697,11 +705,13 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s break; if (flags & INT_OP) { imm &= 0x1f; - FAIL_IF(push_inst(compiler, (UBFM ^ inv_bits) | RD(dst) | RN(arg1) | ((-imm & 0x1f) << 16) | ((31 - imm) << 10))); + FAIL_IF(push_inst(compiler, (UBFM ^ inv_bits) | RD(dst) | RN(arg1) + | (((sljit_ins)-imm & 0x1f) << 16) | ((31 - (sljit_ins)imm) << 10))); } else { imm &= 0x3f; - FAIL_IF(push_inst(compiler, (UBFM ^ inv_bits) | RD(dst) | RN(arg1) | (1 << 22) | ((-imm & 0x3f) << 16) | ((63 - imm) << 10))); + FAIL_IF(push_inst(compiler, (UBFM ^ inv_bits) | RD(dst) | RN(arg1) | (1 << 22) + | (((sljit_ins)-imm & 0x3f) << 16) | ((63 - (sljit_ins)imm) << 10))); } goto set_flags; case SLJIT_LSHR: @@ -712,11 +722,13 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s inv_bits |= 1 << 30; if (flags & INT_OP) { imm &= 0x1f; - FAIL_IF(push_inst(compiler, (UBFM ^ inv_bits) | RD(dst) | RN(arg1) | (imm << 16) | (31 << 10))); + FAIL_IF(push_inst(compiler, (UBFM ^ inv_bits) | RD(dst) | RN(arg1) + | ((sljit_ins)imm << 16) | (31 << 10))); } else { imm &= 0x3f; - FAIL_IF(push_inst(compiler, (UBFM ^ inv_bits) | RD(dst) | RN(arg1) | (1 << 22) | (imm << 16) | (63 << 10))); + FAIL_IF(push_inst(compiler, (UBFM ^ inv_bits) | RD(dst) | RN(arg1) + | (1 << 22) | ((sljit_ins)imm << 16) | (63 << 10))); } goto set_flags; default: @@ -766,41 +778,38 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s if (!(flags & INT_OP)) inv_bits |= 1 << 22; return push_inst(compiler, (SBFM ^ inv_bits) | RD(dst) | RN(arg2) | (15 << 10)); - case SLJIT_MOV_U32: + case SLJIT_MOV32: SLJIT_ASSERT(!(flags & SET_FLAGS) && arg1 == TMP_REG1); - if ((flags & INT_OP) && dst == arg2) + if (dst == arg2) return SLJIT_SUCCESS; + /* fallthrough */ + case SLJIT_MOV_U32: + SLJIT_ASSERT(!(flags & SET_FLAGS) && arg1 == TMP_REG1); return push_inst(compiler, (ORR ^ W_OP) | RD(dst) | RN(TMP_ZERO) | RM(arg2)); case SLJIT_MOV_S32: SLJIT_ASSERT(!(flags & SET_FLAGS) && arg1 == TMP_REG1); - if ((flags & INT_OP) && dst == arg2) - return SLJIT_SUCCESS; return push_inst(compiler, SBFM | (1 << 22) | RD(dst) | RN(arg2) | (31 << 10)); case SLJIT_NOT: SLJIT_ASSERT(arg1 == TMP_REG1); FAIL_IF(push_inst(compiler, (ORN ^ inv_bits) | RD(dst) | RN(TMP_ZERO) | RM(arg2))); break; /* Set flags. */ - case SLJIT_NEG: - SLJIT_ASSERT(arg1 == TMP_REG1); - compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; - if (flags & SET_FLAGS) - inv_bits |= 1 << 29; - return push_inst(compiler, (SUB ^ inv_bits) | RD(dst) | RN(TMP_ZERO) | RM(arg2)); case SLJIT_CLZ: SLJIT_ASSERT(arg1 == TMP_REG1); return push_inst(compiler, (CLZ ^ inv_bits) | RD(dst) | RN(arg2)); case SLJIT_ADD: + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD; CHECK_FLAGS(1 << 29); - compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; return push_inst(compiler, (ADD ^ inv_bits) | RD(dst) | RN(arg1) | RM(arg2)); case SLJIT_ADDC: + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD; CHECK_FLAGS(1 << 29); return push_inst(compiler, (ADC ^ inv_bits) | RD(dst) | RN(arg1) | RM(arg2)); case SLJIT_SUB: + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_SUB; CHECK_FLAGS(1 << 29); - compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; return push_inst(compiler, (SUB ^ inv_bits) | RD(dst) | RN(arg1) | RM(arg2)); case SLJIT_SUBC: + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_SUB; CHECK_FLAGS(1 << 29); return push_inst(compiler, (SBC ^ inv_bits) | RD(dst) | RN(arg1) | RM(arg2)); case SLJIT_MUL: @@ -852,7 +861,7 @@ set_flags: #define INT_SIZE 0x2 #define WORD_SIZE 0x3 -#define MEM_SIZE_SHIFT(flags) ((flags) & 0x3) +#define MEM_SIZE_SHIFT(flags) ((sljit_ins)(flags) & 0x3) static sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg, sljit_s32 arg, sljit_sw argw, sljit_s32 tmp_reg) @@ -872,35 +881,34 @@ static sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit_s32 flags, s return push_inst(compiler, STRB | type | RT(reg) | RN(arg & REG_MASK) | RM(OFFS_REG(arg)) | (argw ? (1 << 12) : 0)); - FAIL_IF(push_inst(compiler, ADD | RD(tmp_reg) | RN(arg & REG_MASK) | RM(OFFS_REG(arg)) | (argw << 10))); + FAIL_IF(push_inst(compiler, ADD | RD(tmp_reg) | RN(arg & REG_MASK) | RM(OFFS_REG(arg)) | ((sljit_ins)argw << 10))); return push_inst(compiler, STRBI | type | RT(reg) | RN(tmp_reg)); } arg &= REG_MASK; - if (arg == SLJIT_UNUSED) { + if (!arg) { FAIL_IF(load_immediate(compiler, tmp_reg, argw & ~(0xfff << shift))); argw = (argw >> shift) & 0xfff; - return push_inst(compiler, STRBI | type | RT(reg) | RN(tmp_reg) | (argw << 10)); + return push_inst(compiler, STRBI | type | RT(reg) | RN(tmp_reg) | ((sljit_ins)argw << 10)); } if (argw >= 0 && (argw & ((1 << shift) - 1)) == 0) { - if ((argw >> shift) <= 0xfff) { - return push_inst(compiler, STRBI | type | RT(reg) | RN(arg) | (argw << (10 - shift))); - } + if ((argw >> shift) <= 0xfff) + return push_inst(compiler, STRBI | type | RT(reg) | RN(arg) | ((sljit_ins)argw << (10 - shift))); if (argw <= 0xffffff) { - FAIL_IF(push_inst(compiler, ADDI | (1 << 22) | RD(tmp_reg) | RN(arg) | ((argw >> 12) << 10))); + FAIL_IF(push_inst(compiler, ADDI | (1 << 22) | RD(tmp_reg) | RN(arg) | (((sljit_ins)argw >> 12) << 10))); argw = ((argw & 0xfff) >> shift); - return push_inst(compiler, STRBI | type | RT(reg) | RN(tmp_reg) | (argw << 10)); + return push_inst(compiler, STRBI | type | RT(reg) | RN(tmp_reg) | ((sljit_ins)argw << 10)); } } if (argw <= 255 && argw >= -256) - return push_inst(compiler, STURBI | type | RT(reg) | RN(arg) | ((argw & 0x1ff) << 12)); + return push_inst(compiler, STURBI | type | RT(reg) | RN(arg) | (((sljit_ins)argw & 0x1ff) << 12)); FAIL_IF(load_immediate(compiler, tmp_reg, argw)); @@ -915,39 +923,44 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_enter(struct sljit_compiler *compi sljit_s32 options, sljit_s32 arg_types, sljit_s32 scratches, sljit_s32 saveds, sljit_s32 fscratches, sljit_s32 fsaveds, sljit_s32 local_size) { - sljit_s32 args, i, tmp, offs, prev, saved_regs_size; + sljit_s32 prev, fprev, saved_regs_size, i, tmp; + sljit_s32 word_arg_count = 0; + sljit_ins offs; CHECK_ERROR(); CHECK(check_sljit_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size)); set_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size); saved_regs_size = GET_SAVED_REGISTERS_SIZE(scratches, saveds, 2); - if (saved_regs_size & 0x8) - saved_regs_size += sizeof(sljit_sw); + saved_regs_size += GET_SAVED_FLOAT_REGISTERS_SIZE(fscratches, fsaveds, SSIZE_OF(f64)); - local_size = (local_size + 15) & ~0xf; - compiler->local_size = local_size + saved_regs_size; + local_size = (local_size + saved_regs_size + 0xf) & ~0xf; + compiler->local_size = local_size; - FAIL_IF(push_inst(compiler, STP_PRE | RT(TMP_FP) | RT2(TMP_LR) - | RN(SLJIT_SP) | ((-(saved_regs_size >> 3) & 0x7f) << 15))); + if (local_size <= 512) { + FAIL_IF(push_inst(compiler, STP_PRE | RT(TMP_FP) | RT2(TMP_LR) + | RN(SLJIT_SP) | (sljit_ins)((-(local_size >> 3) & 0x7f) << 15))); + offs = (sljit_ins)(local_size - 2 * SSIZE_OF(sw)) << (15 - 3); + local_size = 0; + } else { + saved_regs_size = ((saved_regs_size - 2 * SSIZE_OF(sw)) + 0xf) & ~0xf; -#ifdef _WIN32 - if (local_size >= 4096) - FAIL_IF(push_inst(compiler, SUBI | RD(TMP_REG1) | RN(SLJIT_SP) | (1 << 10) | (1 << 22))); - else if (local_size > 256) - FAIL_IF(push_inst(compiler, SUBI | RD(TMP_REG1) | RN(SLJIT_SP) | (local_size << 10))); -#endif + FAIL_IF(push_inst(compiler, SUBI | RD(SLJIT_SP) | RN(SLJIT_SP) | ((sljit_ins)saved_regs_size << 10))); + offs = (sljit_ins)(saved_regs_size - 2 * SSIZE_OF(sw)) << (15 - 3); + local_size -= saved_regs_size; + SLJIT_ASSERT(local_size > 0); + } - tmp = saveds < SLJIT_NUMBER_OF_SAVED_REGISTERS ? (SLJIT_S0 + 1 - saveds) : SLJIT_FIRST_SAVED_REG; prev = -1; - offs = 2 << 15; - for (i = SLJIT_S0; i >= tmp; i--) { + + tmp = SLJIT_S0 - saveds; + for (i = SLJIT_S0; i > tmp; i--) { if (prev == -1) { prev = i; continue; } FAIL_IF(push_inst(compiler, STP | RT(prev) | RT2(i) | RN(SLJIT_SP) | offs)); - offs += 2 << 15; + offs -= (sljit_ins)2 << 15; prev = -1; } @@ -957,84 +970,124 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_enter(struct sljit_compiler *compi continue; } FAIL_IF(push_inst(compiler, STP | RT(prev) | RT2(i) | RN(SLJIT_SP) | offs)); - offs += 2 << 15; + offs -= (sljit_ins)2 << 15; prev = -1; } - if (prev != -1) - FAIL_IF(push_inst(compiler, STRI | RT(prev) | RN(SLJIT_SP) | (offs >> 5))); + fprev = -1; + tmp = SLJIT_FS0 - fsaveds; + for (i = SLJIT_FS0; i > tmp; i--) { + if (fprev == -1) { + fprev = i; + continue; + } + FAIL_IF(push_inst(compiler, STP_F64 | VT(fprev) | VT2(i) | RN(SLJIT_SP) | offs)); + offs -= (sljit_ins)2 << 15; + fprev = -1; + } - FAIL_IF(push_inst(compiler, ADDI | RD(TMP_FP) | RN(SLJIT_SP) | (0 << 10))); + for (i = fscratches; i >= SLJIT_FIRST_SAVED_FLOAT_REG; i--) { + if (fprev == -1) { + fprev = i; + continue; + } + FAIL_IF(push_inst(compiler, STP_F64 | VT(fprev) | VT2(i) | RN(SLJIT_SP) | offs)); + offs -= (sljit_ins)2 << 15; + fprev = -1; + } - args = get_arg_count(arg_types); + if (fprev != -1) + FAIL_IF(push_inst(compiler, STRI_F64 | VT(fprev) | RN(SLJIT_SP) | (offs >> 5) | (1 << 10))); - if (args >= 1) - FAIL_IF(push_inst(compiler, ORR | RD(SLJIT_S0) | RN(TMP_ZERO) | RM(SLJIT_R0))); - if (args >= 2) - FAIL_IF(push_inst(compiler, ORR | RD(SLJIT_S1) | RN(TMP_ZERO) | RM(SLJIT_R1))); - if (args >= 3) - FAIL_IF(push_inst(compiler, ORR | RD(SLJIT_S2) | RN(TMP_ZERO) | RM(SLJIT_R2))); + if (prev != -1) + FAIL_IF(push_inst(compiler, STRI | RT(prev) | RN(SLJIT_SP) | (offs >> 5) | ((fprev == -1) ? (1 << 10) : 0))); + + arg_types >>= SLJIT_ARG_SHIFT; + +#ifdef _WIN32 + if (local_size > 4096) + FAIL_IF(push_inst(compiler, SUBI | RD(SLJIT_SP) | RN(SLJIT_SP) | (1 << 10) | (1 << 22))); +#endif /* _WIN32 */ + + tmp = 0; + while (arg_types > 0) { + if ((arg_types & SLJIT_ARG_MASK) < SLJIT_ARG_TYPE_F64) { + if (!(arg_types & SLJIT_ARG_TYPE_SCRATCH_REG)) { + FAIL_IF(push_inst(compiler, ORR | RD(SLJIT_S0 - tmp) | RN(TMP_ZERO) | RM(SLJIT_R0 + word_arg_count))); + tmp++; + } + word_arg_count++; + } + arg_types >>= SLJIT_ARG_SHIFT; + } #ifdef _WIN32 - if (local_size >= 4096) { + if (local_size > 4096) { if (local_size < 4 * 4096) { /* No need for a loop. */ - if (local_size >= 2 * 4096) { - FAIL_IF(push_inst(compiler, LDRI | RT(TMP_ZERO) | RN(TMP_REG1))); - FAIL_IF(push_inst(compiler, SUBI | RD(TMP_REG1) | RN(TMP_REG1) | (1 << 10) | (1 << 22))); - local_size -= 4096; - } if (local_size >= 2 * 4096) { - FAIL_IF(push_inst(compiler, LDRI | RT(TMP_ZERO) | RN(TMP_REG1))); - FAIL_IF(push_inst(compiler, SUBI | RD(TMP_REG1) | RN(TMP_REG1) | (1 << 10) | (1 << 22))); - local_size -= 4096; - } + if (local_size >= 3 * 4096) { + FAIL_IF(push_inst(compiler, LDRI | RT(TMP_ZERO) | RN(SLJIT_SP))); + FAIL_IF(push_inst(compiler, SUBI | RD(SLJIT_SP) | RN(SLJIT_SP) | (1 << 10) | (1 << 22))); + } - FAIL_IF(push_inst(compiler, LDRI | RT(TMP_ZERO) | RN(TMP_REG1))); - local_size -= 4096; + FAIL_IF(push_inst(compiler, LDRI | RT(TMP_ZERO) | RN(SLJIT_SP))); + FAIL_IF(push_inst(compiler, SUBI | RD(SLJIT_SP) | RN(SLJIT_SP) | (1 << 10) | (1 << 22))); + } } else { - FAIL_IF(push_inst(compiler, MOVZ | RD(TMP_REG2) | (((local_size >> 12) - 1) << 5))); - FAIL_IF(push_inst(compiler, LDRI | RT(TMP_ZERO) | RN(TMP_REG1))); - FAIL_IF(push_inst(compiler, SUBI | RD(TMP_REG1) | RN(TMP_REG1) | (1 << 10) | (1 << 22))); - FAIL_IF(push_inst(compiler, SUBI | (1 << 29) | RD(TMP_REG2) | RN(TMP_REG2) | (1 << 10))); + FAIL_IF(push_inst(compiler, MOVZ | RD(TMP_REG1) | ((((sljit_ins)local_size >> 12) - 1) << 5))); + FAIL_IF(push_inst(compiler, LDRI | RT(TMP_ZERO) | RN(SLJIT_SP))); + FAIL_IF(push_inst(compiler, SUBI | RD(SLJIT_SP) | RN(SLJIT_SP) | (1 << 10) | (1 << 22))); + FAIL_IF(push_inst(compiler, SUBI | (1 << 29) | RD(TMP_REG1) | RN(TMP_REG1) | (1 << 10))); FAIL_IF(push_inst(compiler, B_CC | ((((sljit_ins) -3) & 0x7ffff) << 5) | 0x1 /* not-equal */)); - FAIL_IF(push_inst(compiler, LDRI | RT(TMP_ZERO) | RN(TMP_REG1))); - - local_size &= 0xfff; } - if (local_size > 256) { - FAIL_IF(push_inst(compiler, SUBI | RD(TMP_REG1) | RN(TMP_REG1) | (local_size << 10))); - FAIL_IF(push_inst(compiler, LDRI | RT(TMP_ZERO) | RN(TMP_REG1))); - } - else if (local_size > 0) - FAIL_IF(push_inst(compiler, LDR_PRE | RT(TMP_ZERO) | RN(TMP_REG1) | ((-local_size & 0x1ff) << 12))); + local_size &= 0xfff; - FAIL_IF(push_inst(compiler, ADDI | RD(SLJIT_SP) | RN(TMP_REG1) | (0 << 10))); + if (local_size > 0) + FAIL_IF(push_inst(compiler, LDRI | RT(TMP_ZERO) | RN(SLJIT_SP))); + else + FAIL_IF(push_inst(compiler, STP | RT(TMP_FP) | RT2(TMP_LR) | RN(SLJIT_SP))); } - else if (local_size > 256) { - FAIL_IF(push_inst(compiler, LDRI | RT(TMP_ZERO) | RN(TMP_REG1))); - FAIL_IF(push_inst(compiler, ADDI | RD(SLJIT_SP) | RN(TMP_REG1) | (0 << 10))); + + if (local_size > 0) { + if (local_size <= 512) + FAIL_IF(push_inst(compiler, STP_PRE | RT(TMP_FP) | RT2(TMP_LR) + | RN(SLJIT_SP) | (sljit_ins)((-(local_size >> 3) & 0x7f) << 15))); + else { + if (local_size >= 4096) + local_size = (1 << (22 - 10)); + + FAIL_IF(push_inst(compiler, SUBI | RD(SLJIT_SP) | RN(SLJIT_SP) | ((sljit_ins)local_size << 10))); + FAIL_IF(push_inst(compiler, STP | RT(TMP_FP) | RT2(TMP_LR) | RN(SLJIT_SP))); + } } - else if (local_size > 0) - FAIL_IF(push_inst(compiler, LDR_PRE | RT(TMP_ZERO) | RN(SLJIT_SP) | ((-local_size & 0x1ff) << 12))); #else /* !_WIN32 */ /* The local_size does not include saved registers size. */ - if (local_size > 0xfff) { - FAIL_IF(push_inst(compiler, SUBI | RD(SLJIT_SP) | RN(SLJIT_SP) | ((local_size >> 12) << 10) | (1 << 22))); - local_size &= 0xfff; + if (local_size != 0) { + if (local_size > 0xfff) { + FAIL_IF(push_inst(compiler, SUBI | RD(SLJIT_SP) | RN(SLJIT_SP) | (((sljit_ins)local_size >> 12) << 10) | (1 << 22))); + local_size &= 0xfff; + } + + if (local_size > 512 || local_size == 0) { + if (local_size != 0) + FAIL_IF(push_inst(compiler, SUBI | RD(SLJIT_SP) | RN(SLJIT_SP) | ((sljit_ins)local_size << 10))); + + FAIL_IF(push_inst(compiler, STP | RT(TMP_FP) | RT2(TMP_LR) | RN(SLJIT_SP))); + } else + FAIL_IF(push_inst(compiler, STP_PRE | RT(TMP_FP) | RT2(TMP_LR) + | RN(SLJIT_SP) | (sljit_ins)((-(local_size >> 3) & 0x7f) << 15))); } - if (local_size != 0) - FAIL_IF(push_inst(compiler, SUBI | RD(SLJIT_SP) | RN(SLJIT_SP) | (local_size << 10))); #endif /* _WIN32 */ - return SLJIT_SUCCESS; + return push_inst(compiler, ADDI | RD(TMP_FP) | RN(SLJIT_SP) | (0 << 10)); } SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_set_context(struct sljit_compiler *compiler, @@ -1048,57 +1101,49 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_set_context(struct sljit_compiler *comp set_set_context(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size); saved_regs_size = GET_SAVED_REGISTERS_SIZE(scratches, saveds, 2); - if (saved_regs_size & 0x8) - saved_regs_size += sizeof(sljit_sw); + saved_regs_size += GET_SAVED_FLOAT_REGISTERS_SIZE(fscratches, fsaveds, SSIZE_OF(f64)); - compiler->local_size = saved_regs_size + ((local_size + 15) & ~0xf); + compiler->local_size = (local_size + saved_regs_size + 0xf) & ~0xf; return SLJIT_SUCCESS; } -SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src, sljit_sw srcw) +static sljit_s32 emit_stack_frame_release(struct sljit_compiler *compiler) { - sljit_s32 local_size; - sljit_s32 i, tmp, offs, prev, saved_regs_size; - - CHECK_ERROR(); - CHECK(check_sljit_emit_return(compiler, op, src, srcw)); - - FAIL_IF(emit_mov_before_return(compiler, op, src, srcw)); - - saved_regs_size = GET_SAVED_REGISTERS_SIZE(compiler->scratches, compiler->saveds, 2); - if (saved_regs_size & 0x8) - saved_regs_size += sizeof(sljit_sw); + sljit_s32 local_size, prev, fprev, i, tmp; + sljit_ins offs; - local_size = compiler->local_size - saved_regs_size; + local_size = compiler->local_size; - /* Load LR as early as possible. */ - if (local_size == 0) + if (local_size > 512 && local_size <= 512 + 496) { + FAIL_IF(push_inst(compiler, LDP_POST | RT(TMP_FP) | RT2(TMP_LR) + | RN(SLJIT_SP) | ((sljit_ins)(local_size - 512) << (15 - 3)))); + local_size = 512; + } else FAIL_IF(push_inst(compiler, LDP | RT(TMP_FP) | RT2(TMP_LR) | RN(SLJIT_SP))); - else if (local_size < 63 * sizeof(sljit_sw)) { - FAIL_IF(push_inst(compiler, LDP_PRE | RT(TMP_FP) | RT2(TMP_LR) - | RN(SLJIT_SP) | (local_size << (15 - 3)))); - } - else { + + if (local_size > 512) { + local_size -= 512; if (local_size > 0xfff) { - FAIL_IF(push_inst(compiler, ADDI | RD(SLJIT_SP) | RN(SLJIT_SP) | ((local_size >> 12) << 10) | (1 << 22))); + FAIL_IF(push_inst(compiler, ADDI | RD(SLJIT_SP) | RN(SLJIT_SP) + | (((sljit_ins)local_size >> 12) << 10) | (1 << 22))); local_size &= 0xfff; } - if (local_size) - FAIL_IF(push_inst(compiler, ADDI | RD(SLJIT_SP) | RN(SLJIT_SP) | (local_size << 10))); - FAIL_IF(push_inst(compiler, LDP | RT(TMP_FP) | RT2(TMP_LR) | RN(SLJIT_SP))); + FAIL_IF(push_inst(compiler, ADDI | RD(SLJIT_SP) | RN(SLJIT_SP) | ((sljit_ins)local_size << 10))); + local_size = 512; } - tmp = compiler->saveds < SLJIT_NUMBER_OF_SAVED_REGISTERS ? (SLJIT_S0 + 1 - compiler->saveds) : SLJIT_FIRST_SAVED_REG; + offs = (sljit_ins)(local_size - 2 * SSIZE_OF(sw)) << (15 - 3); prev = -1; - offs = 2 << 15; - for (i = SLJIT_S0; i >= tmp; i--) { + + tmp = SLJIT_S0 - compiler->saveds; + for (i = SLJIT_S0; i > tmp; i--) { if (prev == -1) { prev = i; continue; } FAIL_IF(push_inst(compiler, LDP | RT(prev) | RT2(i) | RN(SLJIT_SP) | offs)); - offs += 2 << 15; + offs -= (sljit_ins)2 << 15; prev = -1; } @@ -1108,15 +1153,50 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return(struct sljit_compiler *comp continue; } FAIL_IF(push_inst(compiler, LDP | RT(prev) | RT2(i) | RN(SLJIT_SP) | offs)); - offs += 2 << 15; + offs -= (sljit_ins)2 << 15; prev = -1; } + fprev = -1; + + tmp = SLJIT_FS0 - compiler->fsaveds; + for (i = SLJIT_FS0; i > tmp; i--) { + if (fprev == -1) { + fprev = i; + continue; + } + FAIL_IF(push_inst(compiler, LDP_F64 | VT(fprev) | VT2(i) | RN(SLJIT_SP) | offs)); + offs -= (sljit_ins)2 << 15; + fprev = -1; + } + + for (i = compiler->fscratches; i >= SLJIT_FIRST_SAVED_FLOAT_REG; i--) { + if (fprev == -1) { + fprev = i; + continue; + } + FAIL_IF(push_inst(compiler, LDP_F64 | VT(fprev) | VT2(i) | RN(SLJIT_SP) | offs)); + offs -= (sljit_ins)2 << 15; + fprev = -1; + } + + if (fprev != -1) + FAIL_IF(push_inst(compiler, LDRI_F64 | VT(fprev) | RN(SLJIT_SP) | (offs >> 5) | (1 << 10))); + if (prev != -1) - FAIL_IF(push_inst(compiler, LDRI | RT(prev) | RN(SLJIT_SP) | (offs >> 5))); + FAIL_IF(push_inst(compiler, LDRI | RT(prev) | RN(SLJIT_SP) | (offs >> 5) | ((fprev == -1) ? (1 << 10) : 0))); + + /* This and the next call/jump instruction can be executed parallelly. */ + return push_inst(compiler, ADDI | RD(SLJIT_SP) | RN(SLJIT_SP) | (sljit_ins)(local_size << 10)); +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return_void(struct sljit_compiler *compiler) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_return_void(compiler)); + + FAIL_IF(emit_stack_frame_release(compiler)); - /* These two can be executed in parallel. */ - FAIL_IF(push_inst(compiler, ADDI | RD(SLJIT_SP) | RN(SLJIT_SP) | (saved_regs_size << 10))); return push_inst(compiler, RET | RN(TMP_LR)); } @@ -1126,7 +1206,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return(struct sljit_compiler *comp SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compiler, sljit_s32 op) { - sljit_ins inv_bits = (op & SLJIT_I32_OP) ? W_OP : 0; + sljit_ins inv_bits = (op & SLJIT_32) ? W_OP : 0; CHECK_ERROR(); CHECK(check_sljit_emit_op0(compiler, op)); @@ -1171,13 +1251,13 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile ADJUST_LOCAL_OFFSET(dst, dstw); ADJUST_LOCAL_OFFSET(src, srcw); - dst_r = SLOW_IS_REG(dst) ? dst : TMP_REG1; + dst_r = FAST_IS_REG(dst) ? dst : TMP_REG1; op = GET_OPCODE(op); if (op >= SLJIT_MOV && op <= SLJIT_MOV_P) { /* Both operands are registers. */ if (dst_r != TMP_REG1 && FAST_IS_REG(src)) - return emit_op_imm(compiler, op | ((op_flags & SLJIT_I32_OP) ? INT_OP : 0), dst_r, TMP_REG1, src); + return emit_op_imm(compiler, op | ((op_flags & SLJIT_32) ? INT_OP : 0), dst_r, TMP_REG1, src); switch (op) { case SLJIT_MOV: @@ -1210,6 +1290,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile srcw = (sljit_u32)srcw; break; case SLJIT_MOV_S32: + case SLJIT_MOV32: mem_flags = INT_SIZE | SIGNED; if (src & SLJIT_IMM) srcw = (sljit_s32)srcw; @@ -1235,14 +1316,11 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile flags = HAS_FLAGS(op_flags) ? SET_FLAGS : 0; mem_flags = WORD_SIZE; - if (op_flags & SLJIT_I32_OP) { + if (op_flags & SLJIT_32) { flags |= INT_OP; mem_flags = INT_SIZE; } - if (dst == SLJIT_UNUSED) - flags |= UNUSED_RETURN; - if (src & SLJIT_MEM) { FAIL_IF(emit_op_mem(compiler, mem_flags, TMP_REG2, src, srcw, TMP_REG2)); src = TMP_REG2; @@ -1263,24 +1341,21 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile sljit_s32 dst_r, flags, mem_flags; CHECK_ERROR(); - CHECK(check_sljit_emit_op2(compiler, op, dst, dstw, src1, src1w, src2, src2w)); + CHECK(check_sljit_emit_op2(compiler, op, 0, dst, dstw, src1, src1w, src2, src2w)); ADJUST_LOCAL_OFFSET(dst, dstw); ADJUST_LOCAL_OFFSET(src1, src1w); ADJUST_LOCAL_OFFSET(src2, src2w); - if (dst == SLJIT_UNUSED && !HAS_FLAGS(op)) - return SLJIT_SUCCESS; - - dst_r = SLOW_IS_REG(dst) ? dst : TMP_REG1; + dst_r = FAST_IS_REG(dst) ? dst : TMP_REG1; flags = HAS_FLAGS(op) ? SET_FLAGS : 0; mem_flags = WORD_SIZE; - if (op & SLJIT_I32_OP) { + if (op & SLJIT_32) { flags |= INT_OP; mem_flags = INT_SIZE; } - if (dst == SLJIT_UNUSED) + if (dst == TMP_REG1) flags |= UNUSED_RETURN; if (src1 & SLJIT_MEM) { @@ -1310,6 +1385,20 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile return SLJIT_SUCCESS; } +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2u(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2, sljit_sw src2w) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_op2(compiler, op, 1, 0, 0, src1, src1w, src2, src2w)); + +#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ + || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) + compiler->skip_checks = 1; +#endif + return sljit_emit_op2(compiler, op, TMP_REG1, 0, src1, src1w, src2, src2w); +} + SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_src(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src, sljit_sw srcw) { @@ -1363,8 +1452,9 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_float_register_index(sljit_s32 reg) } SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_custom(struct sljit_compiler *compiler, - void *instruction, sljit_s32 size) + void *instruction, sljit_u32 size) { + SLJIT_UNUSED_ARG(size); CHECK_ERROR(); CHECK(check_sljit_emit_op_custom(compiler, instruction, size)); @@ -1391,34 +1481,34 @@ static sljit_s32 emit_fop_mem(struct sljit_compiler *compiler, sljit_s32 flags, return push_inst(compiler, STR_FR | type | VT(reg) | RN(arg & REG_MASK) | RM(OFFS_REG(arg)) | (argw ? (1 << 12) : 0)); - FAIL_IF(push_inst(compiler, ADD | RD(TMP_REG1) | RN(arg & REG_MASK) | RM(OFFS_REG(arg)) | (argw << 10))); + FAIL_IF(push_inst(compiler, ADD | RD(TMP_REG1) | RN(arg & REG_MASK) | RM(OFFS_REG(arg)) | ((sljit_ins)argw << 10))); return push_inst(compiler, STR_FI | type | VT(reg) | RN(TMP_REG1)); } arg &= REG_MASK; - if (arg == SLJIT_UNUSED) { + if (!arg) { FAIL_IF(load_immediate(compiler, TMP_REG1, argw & ~(0xfff << shift))); argw = (argw >> shift) & 0xfff; - return push_inst(compiler, STR_FI | type | VT(reg) | RN(TMP_REG1) | (argw << 10)); + return push_inst(compiler, STR_FI | type | VT(reg) | RN(TMP_REG1) | ((sljit_ins)argw << 10)); } if (argw >= 0 && (argw & ((1 << shift) - 1)) == 0) { if ((argw >> shift) <= 0xfff) - return push_inst(compiler, STR_FI | type | VT(reg) | RN(arg) | (argw << (10 - shift))); + return push_inst(compiler, STR_FI | type | VT(reg) | RN(arg) | ((sljit_ins)argw << (10 - shift))); if (argw <= 0xffffff) { - FAIL_IF(push_inst(compiler, ADDI | (1 << 22) | RD(TMP_REG1) | RN(arg) | ((argw >> 12) << 10))); + FAIL_IF(push_inst(compiler, ADDI | (1 << 22) | RD(TMP_REG1) | RN(arg) | (((sljit_ins)argw >> 12) << 10))); argw = ((argw & 0xfff) >> shift); - return push_inst(compiler, STR_FI | type | VT(reg) | RN(TMP_REG1) | (argw << 10)); + return push_inst(compiler, STR_FI | type | VT(reg) | RN(TMP_REG1) | ((sljit_ins)argw << 10)); } } if (argw <= 255 && argw >= -256) - return push_inst(compiler, STUR_FI | type | VT(reg) | RN(arg) | ((argw & 0x1ff) << 12)); + return push_inst(compiler, STUR_FI | type | VT(reg) | RN(arg) | (((sljit_ins)argw & 0x1ff) << 12)); FAIL_IF(load_immediate(compiler, TMP_REG1, argw)); return push_inst(compiler, STR_FR | type | VT(reg) | RN(arg) | RM(TMP_REG1)); @@ -1429,13 +1519,13 @@ static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_sw_from_f64(struct sljit_comp sljit_s32 src, sljit_sw srcw) { sljit_s32 dst_r = FAST_IS_REG(dst) ? dst : TMP_REG1; - sljit_ins inv_bits = (op & SLJIT_F32_OP) ? (1 << 22) : 0; + sljit_ins inv_bits = (op & SLJIT_32) ? (1 << 22) : 0; if (GET_OPCODE(op) == SLJIT_CONV_S32_FROM_F64) inv_bits |= W_OP; if (src & SLJIT_MEM) { - emit_fop_mem(compiler, (op & SLJIT_F32_OP) ? INT_SIZE : WORD_SIZE, TMP_FREG1, src, srcw); + emit_fop_mem(compiler, (op & SLJIT_32) ? INT_SIZE : WORD_SIZE, TMP_FREG1, src, srcw); src = TMP_FREG1; } @@ -1451,7 +1541,7 @@ static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_f64_from_sw(struct sljit_comp sljit_s32 src, sljit_sw srcw) { sljit_s32 dst_r = FAST_IS_REG(dst) ? dst : TMP_FREG1; - sljit_ins inv_bits = (op & SLJIT_F32_OP) ? (1 << 22) : 0; + sljit_ins inv_bits = (op & SLJIT_32) ? (1 << 22) : 0; if (GET_OPCODE(op) == SLJIT_CONV_F64_FROM_S32) inv_bits |= W_OP; @@ -1471,7 +1561,7 @@ static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_f64_from_sw(struct sljit_comp FAIL_IF(push_inst(compiler, (SCVTF ^ inv_bits) | VD(dst_r) | RN(src))); if (dst & SLJIT_MEM) - return emit_fop_mem(compiler, ((op & SLJIT_F32_OP) ? INT_SIZE : WORD_SIZE) | STORE, TMP_FREG1, dst, dstw); + return emit_fop_mem(compiler, ((op & SLJIT_32) ? INT_SIZE : WORD_SIZE) | STORE, TMP_FREG1, dst, dstw); return SLJIT_SUCCESS; } @@ -1479,8 +1569,8 @@ static SLJIT_INLINE sljit_s32 sljit_emit_fop1_cmp(struct sljit_compiler *compile sljit_s32 src1, sljit_sw src1w, sljit_s32 src2, sljit_sw src2w) { - sljit_s32 mem_flags = (op & SLJIT_F32_OP) ? INT_SIZE : WORD_SIZE; - sljit_ins inv_bits = (op & SLJIT_F32_OP) ? (1 << 22) : 0; + sljit_s32 mem_flags = (op & SLJIT_32) ? INT_SIZE : WORD_SIZE; + sljit_ins inv_bits = (op & SLJIT_32) ? (1 << 22) : 0; if (src1 & SLJIT_MEM) { emit_fop_mem(compiler, mem_flags, TMP_FREG1, src1, src1w); @@ -1499,7 +1589,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compil sljit_s32 dst, sljit_sw dstw, sljit_s32 src, sljit_sw srcw) { - sljit_s32 dst_r, mem_flags = (op & SLJIT_F32_OP) ? INT_SIZE : WORD_SIZE; + sljit_s32 dst_r, mem_flags = (op & SLJIT_32) ? INT_SIZE : WORD_SIZE; sljit_ins inv_bits; CHECK_ERROR(); @@ -1507,7 +1597,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compil SLJIT_COMPILE_ASSERT((INT_SIZE ^ 0x1) == WORD_SIZE, must_be_one_bit_difference); SELECT_FOP1_OPERATION_WITH_CHECKS(compiler, op, dst, dstw, src, srcw); - inv_bits = (op & SLJIT_F32_OP) ? (1 << 22) : 0; + inv_bits = (op & SLJIT_32) ? (1 << 22) : 0; dst_r = FAST_IS_REG(dst) ? dst : TMP_FREG1; if (src & SLJIT_MEM) { @@ -1531,7 +1621,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compil FAIL_IF(push_inst(compiler, (FABS ^ inv_bits) | VD(dst_r) | VN(src))); break; case SLJIT_CONV_F64_FROM_F32: - FAIL_IF(push_inst(compiler, FCVT | ((op & SLJIT_F32_OP) ? (1 << 22) : (1 << 15)) | VD(dst_r) | VN(src))); + FAIL_IF(push_inst(compiler, FCVT | (sljit_ins)((op & SLJIT_32) ? (1 << 22) : (1 << 15)) | VD(dst_r) | VN(src))); break; } @@ -1545,8 +1635,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop2(struct sljit_compiler *compil sljit_s32 src1, sljit_sw src1w, sljit_s32 src2, sljit_sw src2w) { - sljit_s32 dst_r, mem_flags = (op & SLJIT_F32_OP) ? INT_SIZE : WORD_SIZE; - sljit_ins inv_bits = (op & SLJIT_F32_OP) ? (1 << 22) : 0; + sljit_s32 dst_r, mem_flags = (op & SLJIT_32) ? INT_SIZE : WORD_SIZE; + sljit_ins inv_bits = (op & SLJIT_32) ? (1 << 22) : 0; CHECK_ERROR(); CHECK(check_sljit_emit_fop2(compiler, op, dst, dstw, src1, src1w, src2, src2w)); @@ -1605,7 +1695,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_enter(struct sljit_compiler * /* Conditional instructions */ /* --------------------------------------------------------------------- */ -static sljit_uw get_cc(struct sljit_compiler *compiler, sljit_s32 type) +static sljit_ins get_cc(struct sljit_compiler *compiler, sljit_s32 type) { switch (type) { case SLJIT_EQUAL: @@ -1616,10 +1706,20 @@ static sljit_uw get_cc(struct sljit_compiler *compiler, sljit_s32 type) case SLJIT_NOT_EQUAL_F64: return 0x0; + case SLJIT_CARRY: + if (compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD) + return 0x3; + /* fallthrough */ + case SLJIT_LESS: case SLJIT_LESS_F64: return 0x2; + case SLJIT_NOT_CARRY: + if (compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD) + return 0x2; + /* fallthrough */ + case SLJIT_GREATER_EQUAL: case SLJIT_GREATER_EQUAL_F64: return 0x3; @@ -1645,15 +1745,17 @@ static sljit_uw get_cc(struct sljit_compiler *compiler, sljit_s32 type) return 0xc; case SLJIT_OVERFLOW: - if (!(compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB)) + if (!(compiler->status_flags_state & (SLJIT_CURRENT_FLAGS_ADD | SLJIT_CURRENT_FLAGS_SUB))) return 0x0; + /* fallthrough */ case SLJIT_UNORDERED_F64: return 0x7; case SLJIT_NOT_OVERFLOW: - if (!(compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB)) + if (!(compiler->status_flags_state & (SLJIT_CURRENT_FLAGS_ADD | SLJIT_CURRENT_FLAGS_SUB))) return 0x1; + /* fallthrough */ case SLJIT_ORDERED_F64: return 0x6; @@ -1709,9 +1811,15 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_call(struct sljit_compiler *compiler, sljit_s32 type, sljit_s32 arg_types) { + SLJIT_UNUSED_ARG(arg_types); CHECK_ERROR_PTR(); CHECK_PTR(check_sljit_emit_call(compiler, type, arg_types)); + if (type & SLJIT_CALL_RETURN) { + PTR_FAIL_IF(emit_stack_frame_release(compiler)); + type = SLJIT_JUMP | (type & SLJIT_REWRITABLE_JUMP); + } + #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) compiler->skip_checks = 1; @@ -1724,7 +1832,7 @@ static SLJIT_INLINE struct sljit_jump* emit_cmp_to0(struct sljit_compiler *compi sljit_s32 src, sljit_sw srcw) { struct sljit_jump *jump; - sljit_ins inv_bits = (type & SLJIT_I32_OP) ? W_OP : 0; + sljit_ins inv_bits = (type & SLJIT_32) ? W_OP : 0; SLJIT_ASSERT((type & 0xff) == SLJIT_EQUAL || (type & 0xff) == SLJIT_NOT_EQUAL); ADJUST_LOCAL_OFFSET(src, srcw); @@ -1775,7 +1883,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_ijump(struct sljit_compiler *compi jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump)); FAIL_IF(!jump); set_jump(jump, compiler, JUMP_ADDR | ((type >= SLJIT_FAST_CALL) ? IS_BL : 0)); - jump->u.target = srcw; + jump->u.target = (sljit_uw)srcw; FAIL_IF(emit_imm64_const(compiler, TMP_REG1, 0)); jump->addr = compiler->size; @@ -1786,8 +1894,25 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_icall(struct sljit_compiler *compi sljit_s32 arg_types, sljit_s32 src, sljit_sw srcw) { + SLJIT_UNUSED_ARG(arg_types); CHECK_ERROR(); CHECK(check_sljit_emit_icall(compiler, type, arg_types, src, srcw)); + ADJUST_LOCAL_OFFSET(src, srcw); + + if (src & SLJIT_MEM) { + FAIL_IF(emit_op_mem(compiler, WORD_SIZE, TMP_REG1, src, srcw, TMP_REG1)); + src = TMP_REG1; + } + + if (type & SLJIT_CALL_RETURN) { + if (src >= SLJIT_FIRST_SAVED_REG && src <= SLJIT_S0) { + FAIL_IF(push_inst(compiler, ORR | RD(TMP_REG1) | RN(TMP_ZERO) | RM(src))); + src = TMP_REG1; + } + + FAIL_IF(emit_stack_frame_release(compiler)); + type = SLJIT_JUMP; + } #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) @@ -1825,7 +1950,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co flags = HAS_FLAGS(op) ? SET_FLAGS : 0; mem_flags = WORD_SIZE; - if (op & SLJIT_I32_OP) { + if (op & SLJIT_32) { flags |= INT_OP; mem_flags = INT_SIZE; } @@ -1849,14 +1974,14 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_cmov(struct sljit_compiler *compil sljit_s32 dst_reg, sljit_s32 src, sljit_sw srcw) { - sljit_ins inv_bits = (dst_reg & SLJIT_I32_OP) ? W_OP : 0; + sljit_ins inv_bits = (dst_reg & SLJIT_32) ? W_OP : 0; sljit_ins cc; CHECK_ERROR(); CHECK(check_sljit_emit_cmov(compiler, type, dst_reg, src, srcw)); if (SLJIT_UNLIKELY(src & SLJIT_IMM)) { - if (dst_reg & SLJIT_I32_OP) + if (dst_reg & SLJIT_32) srcw = (sljit_s32)srcw; FAIL_IF(load_immediate(compiler, TMP_REG1, srcw)); src = TMP_REG1; @@ -1864,7 +1989,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_cmov(struct sljit_compiler *compil } cc = get_cc(compiler, type & 0xff); - dst_reg &= ~SLJIT_I32_OP; + dst_reg &= ~SLJIT_32; return push_inst(compiler, (CSEL ^ inv_bits) | (cc << 12) | RD(dst_reg) | RN(dst_reg) | RM(src)); } @@ -1891,17 +2016,21 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_mem(struct sljit_compiler *compile break; case SLJIT_MOV_S8: sign = 1; + /* fallthrough */ case SLJIT_MOV_U8: inst = STURBI | (MEM_SIZE_SHIFT(BYTE_SIZE) << 30) | 0x400; break; case SLJIT_MOV_S16: sign = 1; + /* fallthrough */ case SLJIT_MOV_U16: inst = STURBI | (MEM_SIZE_SHIFT(HALF_SIZE) << 30) | 0x400; break; case SLJIT_MOV_S32: sign = 1; + /* fallthrough */ case SLJIT_MOV_U32: + case SLJIT_MOV32: inst = STURBI | (MEM_SIZE_SHIFT(INT_SIZE) << 30) | 0x400; break; default: @@ -1916,7 +2045,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_mem(struct sljit_compiler *compile if (type & SLJIT_MEM_PRE) inst |= 0x800; - return push_inst(compiler, inst | RT(reg) | RN(mem & REG_MASK) | ((memw & 0x1ff) << 12)); + return push_inst(compiler, inst | RT(reg) | RN(mem & REG_MASK) | (sljit_ins)((memw & 0x1ff) << 12)); } SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fmem(struct sljit_compiler *compiler, sljit_s32 type, @@ -1936,7 +2065,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fmem(struct sljit_compiler *compil inst = STUR_FI | 0x80000400; - if (!(type & SLJIT_F32_OP)) + if (!(type & SLJIT_32)) inst |= 0x40000000; if (!(type & SLJIT_MEM_STORE)) @@ -1945,7 +2074,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fmem(struct sljit_compiler *compil if (type & SLJIT_MEM_PRE) inst |= 0x800; - return push_inst(compiler, inst | VT(freg) | RN(mem & REG_MASK) | ((memw & 0x1ff) << 12)); + return push_inst(compiler, inst | VT(freg) | RN(mem & REG_MASK) | (sljit_ins)((memw & 0x1ff) << 12)); } SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_local_base(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw dstw, sljit_sw offset) @@ -1955,11 +2084,11 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_local_base(struct sljit_compiler *c CHECK_ERROR(); CHECK(check_sljit_get_local_base(compiler, dst, dstw, offset)); - - SLJIT_ASSERT (SLJIT_LOCALS_OFFSET_BASE == 0); + ADJUST_LOCAL_OFFSET(SLJIT_MEM1(SLJIT_SP), offset); dst_reg = FAST_IS_REG(dst) ? dst : TMP_REG1; + /* Not all instruction forms support accessing SP register. */ if (offset <= 0xffffff && offset >= -0xffffff) { ins = ADDI; if (offset < 0) { @@ -1968,13 +2097,13 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_local_base(struct sljit_compiler *c } if (offset <= 0xfff) - FAIL_IF(push_inst(compiler, ins | RD(dst_reg) | RN(SLJIT_SP) | (offset << 10))); + FAIL_IF(push_inst(compiler, ins | RD(dst_reg) | RN(SLJIT_SP) | (sljit_ins)(offset << 10))); else { - FAIL_IF(push_inst(compiler, ins | RD(dst_reg) | RN(SLJIT_SP) | ((offset & 0xfff000) >> (12 - 10)) | (1 << 22))); + FAIL_IF(push_inst(compiler, ins | RD(dst_reg) | RN(SLJIT_SP) | (sljit_ins)((offset & 0xfff000) >> (12 - 10)) | (1 << 22))); offset &= 0xfff; if (offset != 0) - FAIL_IF(push_inst(compiler, ins | RD(dst_reg) | RN(dst_reg) | (offset << 10))); + FAIL_IF(push_inst(compiler, ins | RD(dst_reg) | RN(dst_reg) | (sljit_ins)(offset << 10))); } } else { @@ -2002,7 +2131,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_const* sljit_emit_const(struct sljit_compi set_const(const_, compiler); dst_r = FAST_IS_REG(dst) ? dst : TMP_REG1; - PTR_FAIL_IF(emit_imm64_const(compiler, dst_r, init_value)); + PTR_FAIL_IF(emit_imm64_const(compiler, dst_r, (sljit_uw)init_value)); if (dst & SLJIT_MEM) PTR_FAIL_IF(emit_op_mem(compiler, WORD_SIZE | STORE, dst_r, dst, dstw, TMP_REG2)); @@ -2034,17 +2163,17 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_put_label* sljit_emit_put_label(struct slj SLJIT_API_FUNC_ATTRIBUTE void sljit_set_jump_addr(sljit_uw addr, sljit_uw new_target, sljit_sw executable_offset) { sljit_ins* inst = (sljit_ins*)addr; - sljit_s32 dst; + sljit_u32 dst; SLJIT_UNUSED_ARG(executable_offset); SLJIT_UPDATE_WX_FLAGS(inst, inst + 4, 0); dst = inst[0] & 0x1f; SLJIT_ASSERT((inst[0] & 0xffe00000) == MOVZ && (inst[1] & 0xffe00000) == (MOVK | (1 << 21))); - inst[0] = MOVZ | dst | ((new_target & 0xffff) << 5); - inst[1] = MOVK | dst | (((new_target >> 16) & 0xffff) << 5) | (1 << 21); - inst[2] = MOVK | dst | (((new_target >> 32) & 0xffff) << 5) | (2 << 21); - inst[3] = MOVK | dst | ((new_target >> 48) << 5) | (3 << 21); + inst[0] = MOVZ | dst | (((sljit_u32)new_target & 0xffff) << 5); + inst[1] = MOVK | dst | (((sljit_u32)(new_target >> 16) & 0xffff) << 5) | (1 << 21); + inst[2] = MOVK | dst | (((sljit_u32)(new_target >> 32) & 0xffff) << 5) | (2 << 21); + inst[3] = MOVK | dst | ((sljit_u32)(new_target >> 48) << 5) | (3 << 21); SLJIT_UPDATE_WX_FLAGS(inst, inst + 4, 1); inst = (sljit_ins *)SLJIT_ADD_EXEC_OFFSET(inst, executable_offset); @@ -2053,5 +2182,5 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_set_jump_addr(sljit_uw addr, sljit_uw new_ta SLJIT_API_FUNC_ATTRIBUTE void sljit_set_const(sljit_uw addr, sljit_sw new_constant, sljit_sw executable_offset) { - sljit_set_jump_addr(addr, new_constant, executable_offset); + sljit_set_jump_addr(addr, (sljit_uw)new_constant, executable_offset); } diff --git a/thirdparty/pcre2/src/sljit/sljitNativeARM_T2_32.c b/thirdparty/pcre2/src/sljit/sljitNativeARM_T2_32.c index e35dbe99b3..ed21ea7daa 100644 --- a/thirdparty/pcre2/src/sljit/sljitNativeARM_T2_32.c +++ b/thirdparty/pcre2/src/sljit/sljitNativeARM_T2_32.c @@ -50,40 +50,42 @@ static const sljit_u8 reg_map[SLJIT_NUMBER_OF_REGISTERS + 5] = { }; static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { - 0, 0, 1, 2, 3, 4, 5, 6, 7 + 0, 0, 1, 2, 3, 4, 5, 15, 14, 13, 12, 11, 10, 9, 8, 6, 7 }; #define COPY_BITS(src, from, to, bits) \ - ((from >= to ? (src >> (from - to)) : (src << (to - from))) & (((1 << bits) - 1) << to)) + ((from >= to ? ((sljit_ins)(src) >> (from - to)) : ((sljit_ins)(src) << (to - from))) & (((1 << bits) - 1) << to)) + +#define NEGATE(uimm) ((sljit_uw)-(sljit_sw)(uimm)) /* Thumb16 encodings. */ -#define RD3(rd) (reg_map[rd]) -#define RN3(rn) (reg_map[rn] << 3) -#define RM3(rm) (reg_map[rm] << 6) -#define RDN3(rdn) (reg_map[rdn] << 8) -#define IMM3(imm) (imm << 6) -#define IMM8(imm) (imm) +#define RD3(rd) ((sljit_ins)reg_map[rd]) +#define RN3(rn) ((sljit_ins)reg_map[rn] << 3) +#define RM3(rm) ((sljit_ins)reg_map[rm] << 6) +#define RDN3(rdn) ((sljit_ins)reg_map[rdn] << 8) +#define IMM3(imm) ((sljit_ins)imm << 6) +#define IMM8(imm) ((sljit_ins)imm) /* Thumb16 helpers. */ #define SET_REGS44(rd, rn) \ - ((reg_map[rn] << 3) | (reg_map[rd] & 0x7) | ((reg_map[rd] & 0x8) << 4)) + (((sljit_ins)reg_map[rn] << 3) | ((sljit_ins)reg_map[rd] & 0x7) | (((sljit_ins)reg_map[rd] & 0x8) << 4)) #define IS_2_LO_REGS(reg1, reg2) \ (reg_map[reg1] <= 7 && reg_map[reg2] <= 7) #define IS_3_LO_REGS(reg1, reg2, reg3) \ (reg_map[reg1] <= 7 && reg_map[reg2] <= 7 && reg_map[reg3] <= 7) /* Thumb32 encodings. */ -#define RD4(rd) (reg_map[rd] << 8) -#define RN4(rn) (reg_map[rn] << 16) -#define RM4(rm) (reg_map[rm]) -#define RT4(rt) (reg_map[rt] << 12) -#define DD4(dd) (freg_map[dd] << 12) -#define DN4(dn) (freg_map[dn] << 16) -#define DM4(dm) (freg_map[dm]) +#define RD4(rd) ((sljit_ins)reg_map[rd] << 8) +#define RN4(rn) ((sljit_ins)reg_map[rn] << 16) +#define RM4(rm) ((sljit_ins)reg_map[rm]) +#define RT4(rt) ((sljit_ins)reg_map[rt] << 12) +#define DD4(dd) ((sljit_ins)freg_map[dd] << 12) +#define DN4(dn) ((sljit_ins)freg_map[dn] << 16) +#define DM4(dm) ((sljit_ins)freg_map[dm]) #define IMM5(imm) \ - (COPY_BITS(imm, 2, 12, 3) | ((imm & 0x3) << 6)) + (COPY_BITS(imm, 2, 12, 3) | (((sljit_ins)imm & 0x3) << 6)) #define IMM12(imm) \ - (COPY_BITS(imm, 11, 26, 1) | COPY_BITS(imm, 8, 12, 3) | (imm & 0xff)) + (COPY_BITS(imm, 11, 26, 1) | COPY_BITS(imm, 8, 12, 3) | ((sljit_ins)imm & 0xff)) /* --------------------------------------------------------------------- */ /* Instrucion forms */ @@ -100,7 +102,8 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { #define ADDSI8 0x3000 #define ADD_W 0xeb000000 #define ADDWI 0xf2000000 -#define ADD_SP 0xb000 +#define ADD_SP 0x4485 +#define ADD_SP_I 0xb000 #define ADD_W 0xeb000000 #define ADD_WI 0xf1000000 #define ANDI 0xf0000000 @@ -126,6 +129,8 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { #define EORS 0x4040 #define EOR_W 0xea800000 #define IT 0xbf00 +#define LDR_SP 0x9800 +#define LDR 0xf8d00000 #define LDRI 0xf8500800 #define LSLS 0x4080 #define LSLSI 0x0000 @@ -168,13 +173,15 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { #define SUBSI8 0x3800 #define SUB_W 0xeba00000 #define SUBWI 0xf2a00000 -#define SUB_SP 0xb080 +#define SUB_SP_I 0xb080 #define SUB_WI 0xf1a00000 #define SXTB 0xb240 #define SXTB_W 0xfa4ff080 #define SXTH 0xb200 #define SXTH_W 0xfa0ff080 #define TST 0x4200 +#define TSTI 0xf0000f00 +#define TST_W 0xea000f00 #define UDIV 0xfbb0f0f0 #define UMULL 0xfba00000 #define UXTB 0xb2c0 @@ -188,12 +195,15 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { #define VCVT_F64_F32 0xeeb70ac0 #define VCVT_S32_F32 0xeebd0ac0 #define VDIV_F32 0xee800a00 +#define VLDR_F32 0xed100a00 #define VMOV_F32 0xeeb00a40 #define VMOV 0xee000a10 #define VMOV2 0xec400a10 #define VMRS 0xeef1fa10 #define VMUL_F32 0xee200a00 #define VNEG_F32 0xeeb10a40 +#define VPOP 0xecbd0b00 +#define VPUSH 0xed2d0b00 #define VSTR_F32 0xed000a00 #define VSUB_F32 0xee300a40 @@ -204,7 +214,7 @@ static sljit_s32 push_inst16(struct sljit_compiler *compiler, sljit_ins inst) ptr = (sljit_u16*)ensure_buf(compiler, sizeof(sljit_u16)); FAIL_IF(!ptr); - *ptr = inst; + *ptr = (sljit_u16)(inst); compiler->size++; return SLJIT_SUCCESS; } @@ -213,8 +223,8 @@ static sljit_s32 push_inst32(struct sljit_compiler *compiler, sljit_ins inst) { sljit_u16 *ptr = (sljit_u16*)ensure_buf(compiler, sizeof(sljit_ins)); FAIL_IF(!ptr); - *ptr++ = inst >> 16; - *ptr = inst; + *ptr++ = (sljit_u16)(inst >> 16); + *ptr = (sljit_u16)(inst); compiler->size += 2; return SLJIT_SUCCESS; } @@ -229,12 +239,12 @@ static SLJIT_INLINE sljit_s32 emit_imm32_const(struct sljit_compiler *compiler, static SLJIT_INLINE void modify_imm32_const(sljit_u16 *inst, sljit_uw new_imm) { - sljit_s32 dst = inst[1] & 0x0f00; + sljit_ins dst = inst[1] & 0x0f00; SLJIT_ASSERT(((inst[0] & 0xfbf0) == (MOVW >> 16)) && ((inst[2] & 0xfbf0) == (MOVT >> 16)) && dst == (inst[3] & 0x0f00)); - inst[0] = (MOVW >> 16) | COPY_BITS(new_imm, 12, 0, 4) | COPY_BITS(new_imm, 11, 10, 1); - inst[1] = dst | COPY_BITS(new_imm, 8, 12, 3) | (new_imm & 0xff); - inst[2] = (MOVT >> 16) | COPY_BITS(new_imm, 12 + 16, 0, 4) | COPY_BITS(new_imm, 11 + 16, 10, 1); - inst[3] = dst | COPY_BITS(new_imm, 8 + 16, 12, 3) | ((new_imm & 0xff0000) >> 16); + inst[0] = (sljit_u16)((MOVW >> 16) | COPY_BITS(new_imm, 12, 0, 4) | COPY_BITS(new_imm, 11, 10, 1)); + inst[1] = (sljit_u16)(dst | COPY_BITS(new_imm, 8, 12, 3) | (new_imm & 0xff)); + inst[2] = (sljit_u16)((MOVT >> 16) | COPY_BITS(new_imm, 12 + 16, 0, 4) | COPY_BITS(new_imm, 11 + 16, 10, 1)); + inst[3] = (sljit_u16)(dst | COPY_BITS(new_imm, 8 + 16, 12, 3) | ((new_imm & 0xff0000) >> 16)); } static SLJIT_INLINE sljit_s32 detect_jump_type(struct sljit_jump *jump, sljit_u16 *code_ptr, sljit_u16 *code, sljit_sw executable_offset) @@ -318,24 +328,24 @@ static SLJIT_INLINE void set_jump_instruction(struct sljit_jump *jump, sljit_sw case 1: /* Encoding T1 of 'B' instruction */ SLJIT_ASSERT(diff <= 127 && diff >= -128 && (jump->flags & IS_COND)); - jump_inst[0] = 0xd000 | (jump->flags & 0xf00) | (diff & 0xff); + jump_inst[0] = (sljit_u16)(0xd000 | (jump->flags & 0xf00) | ((sljit_ins)diff & 0xff)); return; case 2: /* Encoding T3 of 'B' instruction */ SLJIT_ASSERT(diff <= 524287 && diff >= -524288 && (jump->flags & IS_COND)); - jump_inst[0] = 0xf000 | COPY_BITS(jump->flags, 8, 6, 4) | COPY_BITS(diff, 11, 0, 6) | COPY_BITS(diff, 19, 10, 1); - jump_inst[1] = 0x8000 | COPY_BITS(diff, 17, 13, 1) | COPY_BITS(diff, 18, 11, 1) | (diff & 0x7ff); + jump_inst[0] = (sljit_u16)(0xf000 | COPY_BITS(jump->flags, 8, 6, 4) | COPY_BITS(diff, 11, 0, 6) | COPY_BITS(diff, 19, 10, 1)); + jump_inst[1] = (sljit_u16)(0x8000 | COPY_BITS(diff, 17, 13, 1) | COPY_BITS(diff, 18, 11, 1) | ((sljit_ins)diff & 0x7ff)); return; case 3: SLJIT_ASSERT(jump->flags & IS_COND); - *jump_inst++ = IT | ((jump->flags >> 4) & 0xf0) | 0x8; + *jump_inst++ = (sljit_u16)(IT | ((jump->flags >> 4) & 0xf0) | 0x8); diff--; type = 5; break; case 4: /* Encoding T2 of 'B' instruction */ SLJIT_ASSERT(diff <= 1023 && diff >= -1024 && !(jump->flags & IS_COND)); - jump_inst[0] = 0xe000 | (diff & 0x7ff); + jump_inst[0] = (sljit_u16)(0xe000 | (diff & 0x7ff)); return; } @@ -345,8 +355,8 @@ static SLJIT_INLINE void set_jump_instruction(struct sljit_jump *jump, sljit_sw s = (diff >> 23) & 0x1; j1 = (~(diff >> 22) ^ s) & 0x1; j2 = (~(diff >> 21) ^ s) & 0x1; - jump_inst[0] = 0xf000 | (s << 10) | COPY_BITS(diff, 11, 0, 10); - jump_inst[1] = (j1 << 13) | (j2 << 11) | (diff & 0x7ff); + jump_inst[0] = (sljit_u16)(0xf000 | ((sljit_ins)s << 10) | COPY_BITS(diff, 11, 0, 10)); + jump_inst[1] = (sljit_u16)((j1 << 13) | (j2 << 11) | (diff & 0x7ff)); /* The others have a common form. */ if (type == 5) /* Encoding T4 of 'B' instruction */ @@ -405,7 +415,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil /* These structures are ordered by their address. */ if (label && label->size == half_count) { label->addr = ((sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset)) | 0x1; - label->size = code_ptr - code; + label->size = (sljit_uw)(code_ptr - code); label = label->next; } if (jump && jump->addr == half_count) { @@ -433,7 +443,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil if (label && label->size == half_count) { label->addr = ((sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset)) | 0x1; - label->size = code_ptr - code; + label->size = (sljit_uw)(code_ptr - code); label = label->next; } @@ -457,7 +467,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil compiler->error = SLJIT_ERR_COMPILED; compiler->executable_offset = executable_offset; - compiler->executable_size = (code_ptr - code) * sizeof(sljit_u16); + compiler->executable_size = (sljit_uw)(code_ptr - code) * sizeof(sljit_u16); code = (sljit_u16 *)SLJIT_ADD_EXEC_OFFSET(code, executable_offset); code_ptr = (sljit_u16 *)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset); @@ -592,7 +602,7 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s } if (flags & (ARG1_IMM | ARG2_IMM)) { - reg = (flags & ARG2_IMM) ? arg1 : arg2; + reg = (sljit_s32)((flags & ARG2_IMM) ? arg1 : arg2); imm = (flags & ARG2_IMM) ? arg2 : arg1; switch (flags & 0xffff) { @@ -610,8 +620,8 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s Although some clever things could be done here, "NOT IMM" does not worth the efforts. */ break; case SLJIT_ADD: - compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; - nimm = -(sljit_sw)imm; + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD; + nimm = NEGATE(imm); if (IS_2_LO_REGS(reg, dst)) { if (imm <= 0x7) return push_inst16(compiler, ADDSI3 | IMM3(imm) | RD3(dst) | RN3(reg)); @@ -633,18 +643,18 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s nimm = get_imm(imm); if (nimm != INVALID_IMM) return push_inst32(compiler, ADD_WI | (flags & SET_FLAGS) | RD4(dst) | RN4(reg) | nimm); - nimm = get_imm(-(sljit_sw)imm); + nimm = get_imm(NEGATE(imm)); if (nimm != INVALID_IMM) return push_inst32(compiler, SUB_WI | (flags & SET_FLAGS) | RD4(dst) | RN4(reg) | nimm); break; case SLJIT_ADDC: + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD; imm = get_imm(imm); if (imm != INVALID_IMM) return push_inst32(compiler, ADCI | (flags & SET_FLAGS) | RD4(dst) | RN4(reg) | imm); break; case SLJIT_SUB: - /* SUB operation can be replaced by ADD because of the negative carry flag. */ - compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_SUB; if (flags & ARG1_IMM) { if (imm == 0 && IS_2_LO_REGS(reg, dst)) return push_inst16(compiler, RSBSI | RD3(dst) | RN3(reg)); @@ -659,11 +669,12 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s nimm = get_imm(imm); if (nimm != INVALID_IMM) return push_inst32(compiler, CMPI_W | RN4(reg) | nimm); - nimm = get_imm(-(sljit_sw)imm); + nimm = get_imm(NEGATE(imm)); if (nimm != INVALID_IMM) return push_inst32(compiler, CMNI_W | RN4(reg) | nimm); + break; } - nimm = -(sljit_sw)imm; + nimm = NEGATE(imm); if (IS_2_LO_REGS(reg, dst)) { if (imm <= 0x7) return push_inst16(compiler, SUBSI3 | IMM3(imm) | RD3(dst) | RN3(reg)); @@ -685,11 +696,12 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s nimm = get_imm(imm); if (nimm != INVALID_IMM) return push_inst32(compiler, SUB_WI | (flags & SET_FLAGS) | RD4(dst) | RN4(reg) | nimm); - nimm = get_imm(-(sljit_sw)imm); + nimm = get_imm(NEGATE(imm)); if (nimm != INVALID_IMM) return push_inst32(compiler, ADD_WI | (flags & SET_FLAGS) | RD4(dst) | RN4(reg) | nimm); break; case SLJIT_SUBC: + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_SUB; if (flags & ARG1_IMM) break; imm = get_imm(imm); @@ -699,8 +711,8 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s case SLJIT_AND: nimm = get_imm(imm); if (nimm != INVALID_IMM) - return push_inst32(compiler, ANDI | (flags & SET_FLAGS) | RD4(dst) | RN4(reg) | nimm); - imm = get_imm(imm); + return push_inst32(compiler, ((flags & UNUSED_RETURN) ? TSTI : ANDI) | (flags & SET_FLAGS) | RD4(dst) | RN4(reg) | nimm); + imm = get_imm(~imm); if (imm != INVALID_IMM) return push_inst32(compiler, BICI | (flags & SET_FLAGS) | RD4(dst) | RN4(reg) | imm); break; @@ -708,7 +720,7 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s nimm = get_imm(imm); if (nimm != INVALID_IMM) return push_inst32(compiler, ORRI | (flags & SET_FLAGS) | RD4(dst) | RN4(reg) | nimm); - imm = get_imm(imm); + imm = get_imm(~imm); if (imm != INVALID_IMM) return push_inst32(compiler, ORNI | (flags & SET_FLAGS) | RD4(dst) | RN4(reg) | imm); break; @@ -752,12 +764,12 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s if (flags & ARG2_IMM) { imm = arg2; arg2 = (arg1 == TMP_REG1) ? TMP_REG2 : TMP_REG1; - FAIL_IF(load_immediate(compiler, arg2, imm)); + FAIL_IF(load_immediate(compiler, (sljit_s32)arg2, imm)); } else { imm = arg1; arg1 = (arg2 == TMP_REG1) ? TMP_REG2 : TMP_REG1; - FAIL_IF(load_immediate(compiler, arg1, imm)); + FAIL_IF(load_immediate(compiler, (sljit_s32)arg1, imm)); } SLJIT_ASSERT(arg1 != arg2); @@ -768,9 +780,10 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s case SLJIT_MOV: case SLJIT_MOV_U32: case SLJIT_MOV_S32: + case SLJIT_MOV32: case SLJIT_MOV_P: SLJIT_ASSERT(!(flags & SET_FLAGS) && arg1 == TMP_REG2); - if (dst == arg2) + if (dst == (sljit_s32)arg2) return SLJIT_SUCCESS; return push_inst16(compiler, MOV | SET_REGS44(dst, arg2)); case SLJIT_MOV_U8: @@ -803,18 +816,19 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s FAIL_IF(push_inst32(compiler, CLZ | RN4(arg2) | RD4(dst) | RM4(arg2))); return SLJIT_SUCCESS; case SLJIT_ADD: - compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD; if (IS_3_LO_REGS(dst, arg1, arg2)) return push_inst16(compiler, ADDS | RD3(dst) | RN3(arg1) | RM3(arg2)); - if (dst == arg1 && !(flags & SET_FLAGS)) + if (dst == (sljit_s32)arg1 && !(flags & SET_FLAGS)) return push_inst16(compiler, ADD | SET_REGS44(dst, arg2)); return push_inst32(compiler, ADD_W | (flags & SET_FLAGS) | RD4(dst) | RN4(arg1) | RM4(arg2)); case SLJIT_ADDC: - if (dst == arg1 && IS_2_LO_REGS(dst, arg2)) + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD; + if (dst == (sljit_s32)arg1 && IS_2_LO_REGS(dst, arg2)) return push_inst16(compiler, ADCS | RD3(dst) | RN3(arg2)); return push_inst32(compiler, ADC_W | (flags & SET_FLAGS) | RD4(dst) | RN4(arg1) | RM4(arg2)); case SLJIT_SUB: - compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_SUB; if (flags & UNUSED_RETURN) { if (IS_2_LO_REGS(arg1, arg2)) return push_inst16(compiler, CMP | RD3(arg1) | RN3(arg2)); @@ -824,7 +838,8 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s return push_inst16(compiler, SUBS | RD3(dst) | RN3(arg1) | RM3(arg2)); return push_inst32(compiler, SUB_W | (flags & SET_FLAGS) | RD4(dst) | RN4(arg1) | RM4(arg2)); case SLJIT_SUBC: - if (dst == arg1 && IS_2_LO_REGS(dst, arg2)) + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_SUB; + if (dst == (sljit_s32)arg1 && IS_2_LO_REGS(dst, arg2)) return push_inst16(compiler, SBCS | RD3(dst) | RN3(arg2)); return push_inst32(compiler, SBC_W | (flags & SET_FLAGS) | RD4(dst) | RN4(arg1) | RM4(arg2)); case SLJIT_MUL: @@ -836,29 +851,29 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s /* cmp TMP_REG2, dst asr #31. */ return push_inst32(compiler, CMP_W | RN4(TMP_REG2) | 0x70e0 | RM4(dst)); case SLJIT_AND: - if (dst == arg1 && IS_2_LO_REGS(dst, arg2)) + if (dst == (sljit_s32)arg1 && IS_2_LO_REGS(dst, arg2)) return push_inst16(compiler, ANDS | RD3(dst) | RN3(arg2)); if ((flags & UNUSED_RETURN) && IS_2_LO_REGS(arg1, arg2)) return push_inst16(compiler, TST | RD3(arg1) | RN3(arg2)); - return push_inst32(compiler, AND_W | (flags & SET_FLAGS) | RD4(dst) | RN4(arg1) | RM4(arg2)); + return push_inst32(compiler, ((flags & UNUSED_RETURN) ? TST_W : AND_W) | (flags & SET_FLAGS) | RD4(dst) | RN4(arg1) | RM4(arg2)); case SLJIT_OR: - if (dst == arg1 && IS_2_LO_REGS(dst, arg2)) + if (dst == (sljit_s32)arg1 && IS_2_LO_REGS(dst, arg2)) return push_inst16(compiler, ORRS | RD3(dst) | RN3(arg2)); return push_inst32(compiler, ORR_W | (flags & SET_FLAGS) | RD4(dst) | RN4(arg1) | RM4(arg2)); case SLJIT_XOR: - if (dst == arg1 && IS_2_LO_REGS(dst, arg2)) + if (dst == (sljit_s32)arg1 && IS_2_LO_REGS(dst, arg2)) return push_inst16(compiler, EORS | RD3(dst) | RN3(arg2)); return push_inst32(compiler, EOR_W | (flags & SET_FLAGS) | RD4(dst) | RN4(arg1) | RM4(arg2)); case SLJIT_SHL: - if (dst == arg1 && IS_2_LO_REGS(dst, arg2)) + if (dst == (sljit_s32)arg1 && IS_2_LO_REGS(dst, arg2)) return push_inst16(compiler, LSLS | RD3(dst) | RN3(arg2)); return push_inst32(compiler, LSL_W | (flags & SET_FLAGS) | RD4(dst) | RN4(arg1) | RM4(arg2)); case SLJIT_LSHR: - if (dst == arg1 && IS_2_LO_REGS(dst, arg2)) + if (dst == (sljit_s32)arg1 && IS_2_LO_REGS(dst, arg2)) return push_inst16(compiler, LSRS | RD3(dst) | RN3(arg2)); return push_inst32(compiler, LSR_W | (flags & SET_FLAGS) | RD4(dst) | RN4(arg1) | RM4(arg2)); case SLJIT_ASHR: - if (dst == arg1 && IS_2_LO_REGS(dst, arg2)) + if (dst == (sljit_s32)arg1 && IS_2_LO_REGS(dst, arg2)) return push_inst16(compiler, ASRS | RD3(dst) | RN3(arg2)); return push_inst32(compiler, ASR_W | (flags & SET_FLAGS) | RD4(dst) | RN4(arg1) | RM4(arg2)); } @@ -951,20 +966,22 @@ static const sljit_ins sljit_mem32[13] = { /* Helper function. Dst should be reg + value, using at most 1 instruction, flags does not set. */ static sljit_s32 emit_set_delta(struct sljit_compiler *compiler, sljit_s32 dst, sljit_s32 reg, sljit_sw value) { + sljit_uw imm; + if (value >= 0) { if (value <= 0xfff) return push_inst32(compiler, ADDWI | RD4(dst) | RN4(reg) | IMM12(value)); - value = get_imm(value); - if (value != INVALID_IMM) - return push_inst32(compiler, ADD_WI | RD4(dst) | RN4(reg) | value); + imm = get_imm((sljit_uw)value); + if (imm != INVALID_IMM) + return push_inst32(compiler, ADD_WI | RD4(dst) | RN4(reg) | imm); } else { value = -value; if (value <= 0xfff) return push_inst32(compiler, SUBWI | RD4(dst) | RN4(reg) | IMM12(value)); - value = get_imm(value); - if (value != INVALID_IMM) - return push_inst32(compiler, SUB_WI | RD4(dst) | RN4(reg) | value); + imm = get_imm((sljit_uw)value); + if (imm != INVALID_IMM) + return push_inst32(compiler, SUB_WI | RD4(dst) | RN4(reg) | imm); } return SLJIT_ERR_UNSUPPORTED; } @@ -980,13 +997,13 @@ static SLJIT_INLINE sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit arg &= ~SLJIT_MEM; if (SLJIT_UNLIKELY(!(arg & REG_MASK))) { - tmp = get_imm(argw & ~0xfff); + tmp = get_imm((sljit_uw)argw & ~(sljit_uw)0xfff); if (tmp != INVALID_IMM) { FAIL_IF(push_inst32(compiler, MOV_WI | RD4(tmp_reg) | tmp)); return push_inst32(compiler, sljit_mem32[flags] | MEM_IMM12 | RT4(reg) | RN4(tmp_reg) | (argw & 0xfff)); } - FAIL_IF(load_immediate(compiler, tmp_reg, argw)); + FAIL_IF(load_immediate(compiler, tmp_reg, (sljit_uw)argw)); if (IS_2_LO_REGS(reg, tmp_reg) && sljit_mem16_imm5[flags]) return push_inst16(compiler, sljit_mem16_imm5[flags] | RD3(reg) | RN3(tmp_reg)); return push_inst32(compiler, sljit_mem32[flags] | MEM_IMM12 | RT4(reg) | RN4(tmp_reg)); @@ -999,11 +1016,11 @@ static SLJIT_INLINE sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit if (!argw && IS_3_LO_REGS(reg, arg, other_r)) return push_inst16(compiler, sljit_mem16[flags] | RD3(reg) | RN3(arg) | RM3(other_r)); - return push_inst32(compiler, sljit_mem32[flags] | RT4(reg) | RN4(arg) | RM4(other_r) | (argw << 4)); + return push_inst32(compiler, sljit_mem32[flags] | RT4(reg) | RN4(arg) | RM4(other_r) | ((sljit_ins)argw << 4)); } if (argw > 0xfff) { - tmp = get_imm(argw & ~0xfff); + tmp = get_imm((sljit_uw)argw & ~(sljit_uw)0xfff); if (tmp != INVALID_IMM) { push_inst32(compiler, ADD_WI | RD4(tmp_reg) | RN4(arg) | tmp); arg = tmp_reg; @@ -1011,7 +1028,7 @@ static SLJIT_INLINE sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit } } else if (argw < -0xff) { - tmp = get_imm(-argw & ~0xff); + tmp = get_imm((sljit_uw)-argw & ~(sljit_uw)0xff); if (tmp != INVALID_IMM) { push_inst32(compiler, SUB_WI | RD4(tmp_reg) | RN4(arg) | tmp); arg = tmp_reg; @@ -1037,21 +1054,21 @@ static SLJIT_INLINE sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit } if (tmp < 3) - return push_inst16(compiler, sljit_mem16_imm5[flags] | RD3(reg) | RN3(arg) | (argw << (6 - tmp))); + return push_inst16(compiler, sljit_mem16_imm5[flags] | RD3(reg) | RN3(arg) | ((sljit_ins)argw << (6 - tmp))); } else if (SLJIT_UNLIKELY(arg == SLJIT_SP) && IS_WORD_SIZE(flags) && OFFSET_CHECK(0xff, 2) && reg_map[reg] <= 7) { /* SP based immediate. */ - return push_inst16(compiler, STR_SP | ((flags & STORE) ? 0 : 0x800) | RDN3(reg) | (argw >> 2)); + return push_inst16(compiler, STR_SP | (sljit_ins)((flags & STORE) ? 0 : 0x800) | RDN3(reg) | ((sljit_ins)argw >> 2)); } if (argw >= 0 && argw <= 0xfff) - return push_inst32(compiler, sljit_mem32[flags] | MEM_IMM12 | RT4(reg) | RN4(arg) | argw); + return push_inst32(compiler, sljit_mem32[flags] | MEM_IMM12 | RT4(reg) | RN4(arg) | (sljit_ins)argw); else if (argw < 0 && argw >= -0xff) - return push_inst32(compiler, sljit_mem32[flags] | MEM_IMM8 | RT4(reg) | RN4(arg) | -argw); + return push_inst32(compiler, sljit_mem32[flags] | MEM_IMM8 | RT4(reg) | RN4(arg) | (sljit_ins)-argw); SLJIT_ASSERT(arg != tmp_reg); - FAIL_IF(load_immediate(compiler, tmp_reg, argw)); + FAIL_IF(load_immediate(compiler, tmp_reg, (sljit_uw)argw)); if (IS_3_LO_REGS(reg, arg, tmp_reg)) return push_inst16(compiler, sljit_mem16[flags] | RD3(reg) | RN3(arg) | RM3(tmp_reg)); return push_inst32(compiler, sljit_mem32[flags] | RT4(reg) | RN4(arg) | RM4(tmp_reg)); @@ -1065,114 +1082,203 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_enter(struct sljit_compiler *compi sljit_s32 options, sljit_s32 arg_types, sljit_s32 scratches, sljit_s32 saveds, sljit_s32 fscratches, sljit_s32 fsaveds, sljit_s32 local_size) { - sljit_s32 args, size, i, tmp; - sljit_ins push = 0; -#ifdef _WIN32 - sljit_uw imm; + sljit_s32 size, i, tmp, word_arg_count, saved_arg_count; + sljit_uw offset; + sljit_uw imm = 0; +#ifdef __SOFTFP__ + sljit_u32 float_arg_count; +#else + sljit_u32 old_offset, f32_offset; + sljit_u32 remap[3]; + sljit_u32 *remap_ptr = remap; #endif CHECK_ERROR(); CHECK(check_sljit_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size)); set_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size); - tmp = saveds < SLJIT_NUMBER_OF_SAVED_REGISTERS ? (SLJIT_S0 + 1 - saveds) : SLJIT_FIRST_SAVED_REG; - for (i = SLJIT_S0; i >= tmp; i--) - push |= 1 << reg_map[i]; + tmp = SLJIT_S0 - saveds; + for (i = SLJIT_S0; i > tmp; i--) + imm |= (sljit_uw)1 << reg_map[i]; for (i = scratches; i >= SLJIT_FIRST_SAVED_REG; i--) - push |= 1 << reg_map[i]; + imm |= (sljit_uw)1 << reg_map[i]; - FAIL_IF((push & 0xff00) - ? push_inst32(compiler, PUSH_W | (1 << 14) | push) - : push_inst16(compiler, PUSH | (1 << 8) | push)); + /* At least two registers must be set for PUSH_W and one for PUSH instruction. */ + FAIL_IF((imm & 0xff00) + ? push_inst32(compiler, PUSH_W | (1 << 14) | imm) + : push_inst16(compiler, PUSH | (1 << 8) | imm)); /* Stack must be aligned to 8 bytes: (LR, R4) */ size = GET_SAVED_REGISTERS_SIZE(scratches, saveds, 1); - local_size = ((size + local_size + 7) & ~7) - size; + + if (fsaveds > 0 || fscratches >= SLJIT_FIRST_SAVED_FLOAT_REG) { + if ((size & SSIZE_OF(sw)) != 0) { + FAIL_IF(push_inst16(compiler, SUB_SP_I | (sizeof(sljit_sw) >> 2))); + size += SSIZE_OF(sw); + } + + if (fsaveds + fscratches >= SLJIT_NUMBER_OF_FLOAT_REGISTERS) { + FAIL_IF(push_inst32(compiler, VPUSH | DD4(SLJIT_FS0) | ((sljit_uw)SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS << 1))); + } else { + if (fsaveds > 0) + FAIL_IF(push_inst32(compiler, VPUSH | DD4(SLJIT_FS0) | ((sljit_uw)fsaveds << 1))); + if (fscratches >= SLJIT_FIRST_SAVED_FLOAT_REG) + FAIL_IF(push_inst32(compiler, VPUSH | DD4(fscratches) | ((sljit_uw)(fscratches - (SLJIT_FIRST_SAVED_FLOAT_REG - 1)) << 1))); + } + } + + local_size = ((size + local_size + 0x7) & ~0x7) - size; compiler->local_size = local_size; -#ifdef _WIN32 - if (local_size >= 256) { - if (local_size > 4096) - imm = get_imm(4096); - else - imm = get_imm(local_size & ~0xff); + arg_types >>= SLJIT_ARG_SHIFT; + word_arg_count = 0; + saved_arg_count = 0; +#ifdef __SOFTFP__ + SLJIT_COMPILE_ASSERT(SLJIT_FR0 == 1, float_register_index_start); - SLJIT_ASSERT(imm != INVALID_IMM); - FAIL_IF(push_inst32(compiler, SUB_WI | RD4(TMP_REG1) | RN4(SLJIT_SP) | imm)); + offset = 0; + float_arg_count = 0; + + while (arg_types) { + switch (arg_types & SLJIT_ARG_MASK) { + case SLJIT_ARG_TYPE_F64: + if (offset & 0x7) + offset += sizeof(sljit_sw); + + if (offset < 4 * sizeof(sljit_sw)) + FAIL_IF(push_inst32(compiler, VMOV2 | (offset << 10) | ((offset + sizeof(sljit_sw)) << 14) | float_arg_count)); + else + FAIL_IF(push_inst32(compiler, VLDR_F32 | 0x800100 | RN4(SLJIT_SP) + | (float_arg_count << 12) | ((offset + (sljit_uw)size - 4 * sizeof(sljit_sw)) >> 2))); + float_arg_count++; + offset += sizeof(sljit_f64) - sizeof(sljit_sw); + break; + case SLJIT_ARG_TYPE_F32: + if (offset < 4 * sizeof(sljit_sw)) + FAIL_IF(push_inst32(compiler, VMOV | (float_arg_count << 16) | (offset << 10))); + else + FAIL_IF(push_inst32(compiler, VLDR_F32 | 0x800000 | RN4(SLJIT_SP) + | (float_arg_count << 12) | ((offset + (sljit_uw)size - 4 * sizeof(sljit_sw)) >> 2))); + float_arg_count++; + break; + default: + word_arg_count++; + + if (!(arg_types & SLJIT_ARG_TYPE_SCRATCH_REG)) { + tmp = SLJIT_S0 - saved_arg_count; + saved_arg_count++; + } else if (word_arg_count - 1 != (sljit_s32)(offset >> 2)) + tmp = word_arg_count; + else + break; + + SLJIT_ASSERT(reg_map[tmp] <= 7); + + if (offset < 4 * sizeof(sljit_sw)) + FAIL_IF(push_inst16(compiler, MOV | RD3(tmp) | (offset << 1))); + else + FAIL_IF(push_inst16(compiler, LDR_SP | RDN3(tmp) + | ((offset + (sljit_uw)size - 4 * sizeof(sljit_sw)) >> 2))); + break; + } + + offset += sizeof(sljit_sw); + arg_types >>= SLJIT_ARG_SHIFT; } + + compiler->args_size = offset; #else - if (local_size > 0) { - if (local_size <= (127 << 2)) - FAIL_IF(push_inst16(compiler, SUB_SP | (local_size >> 2))); - else - FAIL_IF(emit_op_imm(compiler, SLJIT_SUB | ARG2_IMM, SLJIT_SP, SLJIT_SP, local_size)); + offset = SLJIT_FR0; + old_offset = SLJIT_FR0; + f32_offset = 0; + + while (arg_types) { + switch (arg_types & SLJIT_ARG_MASK) { + case SLJIT_ARG_TYPE_F64: + if (offset != old_offset) + *remap_ptr++ = VMOV_F32 | SLJIT_32 | DD4(offset) | DM4(old_offset); + old_offset++; + offset++; + break; + case SLJIT_ARG_TYPE_F32: + if (f32_offset != 0) { + *remap_ptr++ = VMOV_F32 | 0x20 | DD4(offset) | DM4(f32_offset); + f32_offset = 0; + } else { + if (offset != old_offset) + *remap_ptr++ = VMOV_F32 | DD4(offset) | DM4(old_offset); + f32_offset = old_offset; + old_offset++; + } + offset++; + break; + default: + if (!(arg_types & SLJIT_ARG_TYPE_SCRATCH_REG)) { + FAIL_IF(push_inst16(compiler, MOV | SET_REGS44(SLJIT_S0 - saved_arg_count, SLJIT_R0 + word_arg_count))); + saved_arg_count++; + } + + word_arg_count++; + break; + } + arg_types >>= SLJIT_ARG_SHIFT; } -#endif - args = get_arg_count(arg_types); + SLJIT_ASSERT((sljit_uw)(remap_ptr - remap) <= sizeof(remap)); - if (args >= 1) - FAIL_IF(push_inst16(compiler, MOV | SET_REGS44(SLJIT_S0, SLJIT_R0))); - if (args >= 2) - FAIL_IF(push_inst16(compiler, MOV | SET_REGS44(SLJIT_S1, SLJIT_R1))); - if (args >= 3) - FAIL_IF(push_inst16(compiler, MOV | SET_REGS44(SLJIT_S2, SLJIT_R2))); + while (remap_ptr > remap) + FAIL_IF(push_inst32(compiler, *(--remap_ptr))); +#endif #ifdef _WIN32 - if (local_size >= 256) { - if (local_size > 4096) { - imm = get_imm(4096); - SLJIT_ASSERT(imm != INVALID_IMM); - - if (local_size < 4 * 4096) { - if (local_size > 2 * 4096) { - FAIL_IF(push_inst32(compiler, LDRI | 0x400 | RT4(TMP_REG2) | RN4(TMP_REG1))); - FAIL_IF(push_inst32(compiler, SUB_WI | RD4(TMP_REG1) | RN4(TMP_REG1) | imm)); - local_size -= 4096; - } + if (local_size >= 4096) { + imm = get_imm(4096); + SLJIT_ASSERT(imm != INVALID_IMM); - if (local_size > 2 * 4096) { - FAIL_IF(push_inst32(compiler, LDRI | 0x400 | RT4(TMP_REG2) | RN4(TMP_REG1))); - FAIL_IF(push_inst32(compiler, SUB_WI | RD4(TMP_REG1) | RN4(TMP_REG1) | imm)); - local_size -= 4096; - } + FAIL_IF(push_inst32(compiler, SUB_WI | RD4(SLJIT_SP) | RN4(SLJIT_SP) | imm)); - FAIL_IF(push_inst32(compiler, LDRI | 0x400 | RT4(TMP_REG2) | RN4(TMP_REG1))); - local_size -= 4096; + if (local_size < 4 * 4096) { + if (local_size > 2 * 4096) { + if (local_size > 3 * 4096) { + FAIL_IF(push_inst32(compiler, LDRI | 0x400 | RT4(TMP_REG1) | RN4(SLJIT_SP))); + FAIL_IF(push_inst32(compiler, SUB_WI | RD4(SLJIT_SP) | RN4(SLJIT_SP) | imm)); + } - SLJIT_ASSERT(local_size > 0); - } - else { - FAIL_IF(load_immediate(compiler, SLJIT_R3, (local_size >> 12) - 1)); - FAIL_IF(push_inst32(compiler, LDRI | 0x400 | RT4(TMP_REG2) | RN4(TMP_REG1))); - FAIL_IF(push_inst32(compiler, SUB_WI | RD4(TMP_REG1) | RN4(TMP_REG1) | imm)); - SLJIT_ASSERT(reg_map[SLJIT_R3] < 7); - FAIL_IF(push_inst16(compiler, SUBSI8 | RDN3(SLJIT_R3) | 1)); - FAIL_IF(push_inst16(compiler, BCC | (0x1 << 8) /* not-equal */ | (-7 & 0xff))); - - local_size &= 0xfff; - - if (local_size != 0) - FAIL_IF(push_inst32(compiler, LDRI | 0x400 | RT4(TMP_REG2) | RN4(TMP_REG1))); + FAIL_IF(push_inst32(compiler, LDRI | 0x400 | RT4(TMP_REG1) | RN4(SLJIT_SP))); + FAIL_IF(push_inst32(compiler, SUB_WI | RD4(SLJIT_SP) | RN4(SLJIT_SP) | imm)); } + } else { + FAIL_IF(load_immediate(compiler, TMP_REG2, ((sljit_uw)local_size >> 12) - 1)); + FAIL_IF(push_inst32(compiler, LDRI | 0x400 | RT4(TMP_REG1) | RN4(SLJIT_SP))); + FAIL_IF(push_inst32(compiler, SUB_WI | RD4(SLJIT_SP) | RN4(SLJIT_SP) | imm)); + FAIL_IF(push_inst32(compiler, SUB_WI | SET_FLAGS | RD4(TMP_REG2) | RN4(TMP_REG2) | 1)); + FAIL_IF(push_inst16(compiler, BCC | (0x1 << 8) /* not-equal */ | (-8 & 0xff))); + } - if (local_size >= 256) { - imm = get_imm(local_size & ~0xff); - SLJIT_ASSERT(imm != INVALID_IMM); + FAIL_IF(push_inst32(compiler, LDRI | 0x400 | RT4(TMP_REG1) | RN4(SLJIT_SP))); + local_size &= 0xfff; + } - FAIL_IF(push_inst32(compiler, SUB_WI | RD4(TMP_REG1) | RN4(TMP_REG1) | imm)); - } - } + if (local_size >= 256) { + SLJIT_ASSERT(local_size < 4096); - local_size &= 0xff; - FAIL_IF(push_inst32(compiler, LDRI | 0x400 | (local_size > 0 ? 0x100 : 0) | RT4(TMP_REG2) | RN4(TMP_REG1) | local_size)); + if (local_size <= (127 << 2)) + FAIL_IF(push_inst16(compiler, SUB_SP_I | ((sljit_uw)local_size >> 2))); + else + FAIL_IF(emit_op_imm(compiler, SLJIT_SUB | ARG2_IMM, SLJIT_SP, SLJIT_SP, (sljit_uw)local_size)); - FAIL_IF(push_inst16(compiler, MOV | SET_REGS44(SLJIT_SP, TMP_REG1))); + FAIL_IF(push_inst32(compiler, LDRI | 0x400 | RT4(TMP_REG1) | RN4(SLJIT_SP))); + } else if (local_size > 0) + FAIL_IF(push_inst32(compiler, LDRI | 0x500 | RT4(TMP_REG1) | RN4(SLJIT_SP) | (sljit_uw)local_size)); +#else /* !_WIN32 */ + if (local_size > 0) { + if (local_size <= (127 << 2)) + FAIL_IF(push_inst16(compiler, SUB_SP_I | ((sljit_uw)local_size >> 2))); + else + FAIL_IF(emit_op_imm(compiler, SLJIT_SUB | ARG2_IMM, SLJIT_SP, SLJIT_SP, (sljit_uw)local_size)); } - else if (local_size > 0) - FAIL_IF(push_inst32(compiler, LDRI | 0x500 | RT4(TMP_REG1) | RN4(SLJIT_SP) | local_size)); -#endif +#endif /* _WIN32 */ return SLJIT_SUCCESS; } @@ -1188,37 +1294,143 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_set_context(struct sljit_compiler *comp set_set_context(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size); size = GET_SAVED_REGISTERS_SIZE(scratches, saveds, 1); - compiler->local_size = ((size + local_size + 7) & ~7) - size; + + if ((size & SSIZE_OF(sw)) != 0 && (fsaveds > 0 || fscratches >= SLJIT_FIRST_SAVED_FLOAT_REG)) + size += SSIZE_OF(sw); + + compiler->local_size = ((size + local_size + 0x7) & ~0x7) - size; return SLJIT_SUCCESS; } -SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src, sljit_sw srcw) +static sljit_s32 emit_add_sp(struct sljit_compiler *compiler, sljit_uw imm) { - sljit_s32 i, tmp; - sljit_ins pop = 0; + sljit_uw imm2; - CHECK_ERROR(); - CHECK(check_sljit_emit_return(compiler, op, src, srcw)); + /* The TMP_REG1 register must keep its value. */ + if (imm <= (127u << 2)) + return push_inst16(compiler, ADD_SP_I | (imm >> 2)); - FAIL_IF(emit_mov_before_return(compiler, op, src, srcw)); + if (imm <= 0xfff) + return push_inst32(compiler, ADDWI | RD4(SLJIT_SP) | RN4(SLJIT_SP) | IMM12(imm)); - if (compiler->local_size > 0) { - if (compiler->local_size <= (127 << 2)) - FAIL_IF(push_inst16(compiler, ADD_SP | (compiler->local_size >> 2))); - else - FAIL_IF(emit_op_imm(compiler, SLJIT_ADD | ARG2_IMM, SLJIT_SP, SLJIT_SP, compiler->local_size)); + imm2 = get_imm(imm); + + if (imm2 != INVALID_IMM) + return push_inst32(compiler, ADD_WI | RD4(SLJIT_SP) | RN4(SLJIT_SP) | imm2); + + FAIL_IF(load_immediate(compiler, TMP_REG2, imm)); + return push_inst16(compiler, ADD_SP | RN3(TMP_REG2)); +} + +static sljit_s32 emit_stack_frame_release(struct sljit_compiler *compiler, sljit_s32 frame_size) +{ + sljit_s32 local_size, fscratches, fsaveds, i, tmp; + sljit_s32 lr_dst = TMP_PC; + sljit_uw reg_list; + + SLJIT_ASSERT(reg_map[TMP_REG2] == 14 && frame_size <= 128); + + local_size = compiler->local_size; + fscratches = compiler->fscratches; + fsaveds = compiler->fsaveds; + + if (fsaveds > 0 || fscratches >= SLJIT_FIRST_SAVED_FLOAT_REG) { + if (local_size > 0) + FAIL_IF(emit_add_sp(compiler, (sljit_uw)local_size)); + + if (fsaveds + fscratches >= SLJIT_NUMBER_OF_FLOAT_REGISTERS) { + FAIL_IF(push_inst32(compiler, VPOP | DD4(SLJIT_FS0) | ((sljit_uw)SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS << 1))); + } else { + if (fscratches >= SLJIT_FIRST_SAVED_FLOAT_REG) + FAIL_IF(push_inst32(compiler, VPOP | DD4(fscratches) | ((sljit_uw)(fscratches - (SLJIT_FIRST_SAVED_FLOAT_REG - 1)) << 1))); + if (fsaveds > 0) + FAIL_IF(push_inst32(compiler, VPOP | DD4(SLJIT_FS0) | ((sljit_uw)fsaveds << 1))); + } + + local_size = GET_SAVED_REGISTERS_SIZE(compiler->scratches, compiler->saveds, 1) & 0x7; } - tmp = compiler->saveds < SLJIT_NUMBER_OF_SAVED_REGISTERS ? (SLJIT_S0 + 1 - compiler->saveds) : SLJIT_FIRST_SAVED_REG; - for (i = SLJIT_S0; i >= tmp; i--) - pop |= 1 << reg_map[i]; + if (frame_size < 0) { + lr_dst = TMP_REG2; + frame_size = 0; + } else if (frame_size > 0) + lr_dst = 0; + + reg_list = 0; + tmp = SLJIT_S0 - compiler->saveds; + for (i = SLJIT_S0; i > tmp; i--) + reg_list |= (sljit_uw)1 << reg_map[i]; for (i = compiler->scratches; i >= SLJIT_FIRST_SAVED_REG; i--) - pop |= 1 << reg_map[i]; + reg_list |= (sljit_uw)1 << reg_map[i]; + + if (lr_dst == 0 && (reg_list & (reg_list - 1)) == 0) { + /* The local_size does not include the saved registers. */ + local_size += SSIZE_OF(sw); + + if (reg_list != 0) + local_size += SSIZE_OF(sw); + + if (frame_size > local_size) + FAIL_IF(push_inst16(compiler, SUB_SP_I | ((sljit_uw)(frame_size - local_size) >> 2))); + else if (frame_size < local_size) + FAIL_IF(emit_add_sp(compiler, (sljit_uw)(local_size - frame_size))); + + if (reg_list == 0) + return SLJIT_SUCCESS; + + if (compiler->saveds > 0) { + SLJIT_ASSERT(reg_list == ((sljit_uw)1 << reg_map[SLJIT_S0])); + lr_dst = SLJIT_S0; + } else { + SLJIT_ASSERT(reg_list == ((sljit_uw)1 << reg_map[SLJIT_FIRST_SAVED_REG])); + lr_dst = SLJIT_FIRST_SAVED_REG; + } + + frame_size -= 2 * SSIZE_OF(sw); + + if (reg_map[lr_dst] <= 7) + return push_inst16(compiler, STR_SP | 0x800 | RDN3(lr_dst) | (sljit_uw)(frame_size >> 2)); + + return push_inst32(compiler, LDR | RT4(lr_dst) | RN4(SLJIT_SP) | (sljit_uw)frame_size); + } + + if (local_size > 0) + FAIL_IF(emit_add_sp(compiler, (sljit_uw)local_size)); + + if (!(reg_list & 0xff00) && lr_dst != TMP_REG2) { + if (lr_dst == TMP_PC) + reg_list |= 1u << 8; + + /* At least one register must be set for POP instruction. */ + SLJIT_ASSERT(reg_list != 0); - return (pop & 0xff00) - ? push_inst32(compiler, POP_W | (1 << 15) | pop) - : push_inst16(compiler, POP | (1 << 8) | pop); + FAIL_IF(push_inst16(compiler, POP | reg_list)); + } else { + if (lr_dst != 0) { + if (reg_list == 0) + return push_inst32(compiler, 0xf85d0b04 | RT4(lr_dst)); + + reg_list |= (sljit_uw)1 << reg_map[lr_dst]; + } + + /* At least two registers must be set for POP_W instruction. */ + SLJIT_ASSERT((reg_list & (reg_list - 1)) != 0); + + FAIL_IF(push_inst32(compiler, POP_W | reg_list)); + } + + if (frame_size > 0) + return push_inst16(compiler, SUB_SP_I | (((sljit_uw)frame_size - sizeof(sljit_sw)) >> 2)); + return SLJIT_SUCCESS; +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return_void(struct sljit_compiler *compiler) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_return_void(compiler)); + + return emit_stack_frame_release(compiler, 0); } /* --------------------------------------------------------------------- */ @@ -1250,8 +1462,8 @@ extern int __aeabi_idivmod(int numerator, int denominator); SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compiler, sljit_s32 op) { #if !(defined __ARM_FEATURE_IDIV) && !(defined __ARM_ARCH_EXT_IDIV__) - sljit_sw saved_reg_list[3]; - sljit_sw saved_reg_count; + sljit_uw saved_reg_list[3]; + sljit_uw saved_reg_count; #endif CHECK_ERROR(); @@ -1266,10 +1478,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compile case SLJIT_LMUL_UW: case SLJIT_LMUL_SW: return push_inst32(compiler, (op == SLJIT_LMUL_UW ? UMULL : SMULL) - | (reg_map[SLJIT_R1] << 8) - | (reg_map[SLJIT_R0] << 12) - | (reg_map[SLJIT_R0] << 16) - | reg_map[SLJIT_R1]); + | RD4(SLJIT_R1) | RT4(SLJIT_R0) | RN4(SLJIT_R0) | RM4(SLJIT_R1)); #if (defined __ARM_FEATURE_IDIV) || (defined __ARM_ARCH_EXT_IDIV__) case SLJIT_DIVMOD_UW: case SLJIT_DIVMOD_SW: @@ -1314,10 +1523,10 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compile FAIL_IF(push_inst16(compiler, MOV | SET_REGS44(SLJIT_R0, SLJIT_R1))); FAIL_IF(push_inst16(compiler, MOV | SET_REGS44(SLJIT_R1, TMP_REG1))); FAIL_IF(sljit_emit_ijump(compiler, SLJIT_FAST_CALL, SLJIT_IMM, - ((op | 0x2) == SLJIT_DIV_UW ? SLJIT_FUNC_OFFSET(__rt_udiv) : SLJIT_FUNC_OFFSET(__rt_sdiv)))); + ((op | 0x2) == SLJIT_DIV_UW ? SLJIT_FUNC_ADDR(__rt_udiv) : SLJIT_FUNC_ADDR(__rt_sdiv)))); #elif defined(__GNUC__) FAIL_IF(sljit_emit_ijump(compiler, SLJIT_FAST_CALL, SLJIT_IMM, - ((op | 0x2) == SLJIT_DIV_UW ? SLJIT_FUNC_OFFSET(__aeabi_uidivmod) : SLJIT_FUNC_OFFSET(__aeabi_idivmod)))); + ((op | 0x2) == SLJIT_DIV_UW ? SLJIT_FUNC_ADDR(__aeabi_uidivmod) : SLJIT_FUNC_ADDR(__aeabi_idivmod)))); #else #error "Software divmod functions are needed" #endif @@ -1356,7 +1565,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile ADJUST_LOCAL_OFFSET(dst, dstw); ADJUST_LOCAL_OFFSET(src, srcw); - dst_r = SLOW_IS_REG(dst) ? dst : TMP_REG1; + dst_r = FAST_IS_REG(dst) ? dst : TMP_REG1; op = GET_OPCODE(op); if (op >= SLJIT_MOV && op <= SLJIT_MOV_P) { @@ -1364,6 +1573,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile case SLJIT_MOV: case SLJIT_MOV_U32: case SLJIT_MOV_S32: + case SLJIT_MOV32: case SLJIT_MOV_P: flags = WORD_SIZE; break; @@ -1394,12 +1604,12 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile } if (src & SLJIT_IMM) - FAIL_IF(emit_op_imm(compiler, SLJIT_MOV | ARG2_IMM, dst_r, TMP_REG2, srcw)); + FAIL_IF(emit_op_imm(compiler, SLJIT_MOV | ARG2_IMM, dst_r, TMP_REG2, (sljit_uw)srcw)); else if (src & SLJIT_MEM) { FAIL_IF(emit_op_mem(compiler, flags, dst_r, src, srcw, TMP_REG1)); } else { if (dst_r != TMP_REG1) - return emit_op_imm(compiler, op, dst_r, TMP_REG2, src); + return emit_op_imm(compiler, op, dst_r, TMP_REG2, (sljit_uw)src); dst_r = src; } @@ -1409,14 +1619,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile return emit_op_mem(compiler, flags | STORE, dst_r, dst, dstw, TMP_REG2); } - if (op == SLJIT_NEG) { -#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ - || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) - compiler->skip_checks = 1; -#endif - return sljit_emit_op2(compiler, SLJIT_SUB | op_flags, dst, dstw, SLJIT_IMM, 0, src, srcw); - } - flags = HAS_FLAGS(op_flags) ? SET_FLAGS : 0; if (src & SLJIT_MEM) { @@ -1424,7 +1626,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile src = TMP_REG1; } - emit_op_imm(compiler, flags | op, dst_r, TMP_REG2, src); + emit_op_imm(compiler, flags | op, dst_r, TMP_REG2, (sljit_uw)src); if (SLJIT_UNLIKELY(dst & SLJIT_MEM)) return emit_op_mem(compiler, flags | STORE, dst_r, dst, dstw, TMP_REG2); @@ -1439,17 +1641,17 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile sljit_s32 dst_reg, flags, src2_reg; CHECK_ERROR(); - CHECK(check_sljit_emit_op2(compiler, op, dst, dstw, src1, src1w, src2, src2w)); + CHECK(check_sljit_emit_op2(compiler, op, 0, dst, dstw, src1, src1w, src2, src2w)); ADJUST_LOCAL_OFFSET(dst, dstw); ADJUST_LOCAL_OFFSET(src1, src1w); ADJUST_LOCAL_OFFSET(src2, src2w); - if (dst == SLJIT_UNUSED && !HAS_FLAGS(op)) - return SLJIT_SUCCESS; - - dst_reg = SLOW_IS_REG(dst) ? dst : TMP_REG1; + dst_reg = FAST_IS_REG(dst) ? dst : TMP_REG1; flags = HAS_FLAGS(op) ? SET_FLAGS : 0; + if (dst == TMP_REG1) + flags |= UNUSED_RETURN; + if (src1 & SLJIT_IMM) flags |= ARG1_IMM; else if (src1 & SLJIT_MEM) { @@ -1469,16 +1671,27 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile else src2w = src2; - if (dst == SLJIT_UNUSED) - flags |= UNUSED_RETURN; - - emit_op_imm(compiler, flags | GET_OPCODE(op), dst_reg, src1w, src2w); + emit_op_imm(compiler, flags | GET_OPCODE(op), dst_reg, (sljit_uw)src1w, (sljit_uw)src2w); if (!(dst & SLJIT_MEM)) return SLJIT_SUCCESS; return emit_op_mem(compiler, WORD_SIZE | STORE, dst_reg, dst, dstw, TMP_REG2); } +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2u(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2, sljit_sw src2w) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_op2(compiler, op, 1, 0, 0, src1, src1w, src2, src2w)); + +#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ + || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) + compiler->skip_checks = 1; +#endif + return sljit_emit_op2(compiler, op, TMP_REG1, 0, src1, src1w, src2, src2w); +} + SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_src(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src, sljit_sw srcw) { @@ -1521,7 +1734,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_float_register_index(sljit_s32 reg) } SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_custom(struct sljit_compiler *compiler, - void *instruction, sljit_s32 size) + void *instruction, sljit_u32 size) { CHECK_ERROR(); CHECK(check_sljit_emit_op_custom(compiler, instruction, size)); @@ -1540,22 +1753,22 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_custom(struct sljit_compiler *c static sljit_s32 emit_fop_mem(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg, sljit_s32 arg, sljit_sw argw) { sljit_uw imm; - sljit_sw inst = VSTR_F32 | (flags & (SLJIT_F32_OP | FPU_LOAD)); + sljit_ins inst = VSTR_F32 | (flags & (SLJIT_32 | FPU_LOAD)); SLJIT_ASSERT(arg & SLJIT_MEM); /* Fast loads and stores. */ if (SLJIT_UNLIKELY(arg & OFFS_REG_MASK)) { - FAIL_IF(push_inst32(compiler, ADD_W | RD4(TMP_REG1) | RN4(arg & REG_MASK) | RM4(OFFS_REG(arg)) | ((argw & 0x3) << 6))); + FAIL_IF(push_inst32(compiler, ADD_W | RD4(TMP_REG1) | RN4(arg & REG_MASK) | RM4(OFFS_REG(arg)) | (((sljit_uw)argw & 0x3) << 6))); arg = SLJIT_MEM | TMP_REG1; argw = 0; } if ((arg & REG_MASK) && (argw & 0x3) == 0) { if (!(argw & ~0x3fc)) - return push_inst32(compiler, inst | 0x800000 | RN4(arg & REG_MASK) | DD4(reg) | (argw >> 2)); + return push_inst32(compiler, inst | 0x800000 | RN4(arg & REG_MASK) | DD4(reg) | ((sljit_uw)argw >> 2)); if (!(-argw & ~0x3fc)) - return push_inst32(compiler, inst | RN4(arg & REG_MASK) | DD4(reg) | (-argw >> 2)); + return push_inst32(compiler, inst | RN4(arg & REG_MASK) | DD4(reg) | ((sljit_uw)-argw >> 2)); } if (arg & REG_MASK) { @@ -1563,20 +1776,22 @@ static sljit_s32 emit_fop_mem(struct sljit_compiler *compiler, sljit_s32 flags, FAIL_IF(compiler->error); return push_inst32(compiler, inst | 0x800000 | RN4(TMP_REG1) | DD4(reg)); } - imm = get_imm(argw & ~0x3fc); + + imm = get_imm((sljit_uw)argw & ~(sljit_uw)0x3fc); if (imm != INVALID_IMM) { FAIL_IF(push_inst32(compiler, ADD_WI | RD4(TMP_REG1) | RN4(arg & REG_MASK) | imm)); - return push_inst32(compiler, inst | 0x800000 | RN4(TMP_REG1) | DD4(reg) | ((argw & 0x3fc) >> 2)); + return push_inst32(compiler, inst | 0x800000 | RN4(TMP_REG1) | DD4(reg) | (((sljit_uw)argw & 0x3fc) >> 2)); } - imm = get_imm(-argw & ~0x3fc); + + imm = get_imm((sljit_uw)-argw & ~(sljit_uw)0x3fc); if (imm != INVALID_IMM) { argw = -argw; FAIL_IF(push_inst32(compiler, SUB_WI | RD4(TMP_REG1) | RN4(arg & REG_MASK) | imm)); - return push_inst32(compiler, inst | RN4(TMP_REG1) | DD4(reg) | ((argw & 0x3fc) >> 2)); + return push_inst32(compiler, inst | RN4(TMP_REG1) | DD4(reg) | (((sljit_uw)argw & 0x3fc) >> 2)); } } - FAIL_IF(load_immediate(compiler, TMP_REG1, argw)); + FAIL_IF(load_immediate(compiler, TMP_REG1, (sljit_uw)argw)); if (arg & REG_MASK) FAIL_IF(push_inst16(compiler, ADD | SET_REGS44(TMP_REG1, (arg & REG_MASK)))); return push_inst32(compiler, inst | 0x800000 | RN4(TMP_REG1) | DD4(reg)); @@ -1586,14 +1801,14 @@ static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_sw_from_f64(struct sljit_comp sljit_s32 dst, sljit_sw dstw, sljit_s32 src, sljit_sw srcw) { - op ^= SLJIT_F32_OP; + op ^= SLJIT_32; if (src & SLJIT_MEM) { - FAIL_IF(emit_fop_mem(compiler, (op & SLJIT_F32_OP) | FPU_LOAD, TMP_FREG1, src, srcw)); + FAIL_IF(emit_fop_mem(compiler, (op & SLJIT_32) | FPU_LOAD, TMP_FREG1, src, srcw)); src = TMP_FREG1; } - FAIL_IF(push_inst32(compiler, VCVT_S32_F32 | (op & SLJIT_F32_OP) | DD4(TMP_FREG1) | DM4(src))); + FAIL_IF(push_inst32(compiler, VCVT_S32_F32 | (op & SLJIT_32) | DD4(TMP_FREG1) | DM4(src))); if (FAST_IS_REG(dst)) return push_inst32(compiler, VMOV | (1 << 20) | RT4(dst) | DN4(TMP_FREG1)); @@ -1608,7 +1823,7 @@ static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_f64_from_sw(struct sljit_comp { sljit_s32 dst_r = FAST_IS_REG(dst) ? dst : TMP_FREG1; - op ^= SLJIT_F32_OP; + op ^= SLJIT_32; if (FAST_IS_REG(src)) FAIL_IF(push_inst32(compiler, VMOV | RT4(src) | DN4(TMP_FREG1))); @@ -1617,14 +1832,14 @@ static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_f64_from_sw(struct sljit_comp FAIL_IF(emit_fop_mem(compiler, FPU_LOAD, TMP_FREG1, src, srcw)); } else { - FAIL_IF(load_immediate(compiler, TMP_REG1, srcw)); + FAIL_IF(load_immediate(compiler, TMP_REG1, (sljit_uw)srcw)); FAIL_IF(push_inst32(compiler, VMOV | RT4(TMP_REG1) | DN4(TMP_FREG1))); } - FAIL_IF(push_inst32(compiler, VCVT_F32_S32 | (op & SLJIT_F32_OP) | DD4(dst_r) | DM4(TMP_FREG1))); + FAIL_IF(push_inst32(compiler, VCVT_F32_S32 | (op & SLJIT_32) | DD4(dst_r) | DM4(TMP_FREG1))); if (dst & SLJIT_MEM) - return emit_fop_mem(compiler, (op & SLJIT_F32_OP), TMP_FREG1, dst, dstw); + return emit_fop_mem(compiler, (op & SLJIT_32), TMP_FREG1, dst, dstw); return SLJIT_SUCCESS; } @@ -1632,19 +1847,19 @@ static SLJIT_INLINE sljit_s32 sljit_emit_fop1_cmp(struct sljit_compiler *compile sljit_s32 src1, sljit_sw src1w, sljit_s32 src2, sljit_sw src2w) { - op ^= SLJIT_F32_OP; + op ^= SLJIT_32; if (src1 & SLJIT_MEM) { - emit_fop_mem(compiler, (op & SLJIT_F32_OP) | FPU_LOAD, TMP_FREG1, src1, src1w); + emit_fop_mem(compiler, (op & SLJIT_32) | FPU_LOAD, TMP_FREG1, src1, src1w); src1 = TMP_FREG1; } if (src2 & SLJIT_MEM) { - emit_fop_mem(compiler, (op & SLJIT_F32_OP) | FPU_LOAD, TMP_FREG2, src2, src2w); + emit_fop_mem(compiler, (op & SLJIT_32) | FPU_LOAD, TMP_FREG2, src2, src2w); src2 = TMP_FREG2; } - FAIL_IF(push_inst32(compiler, VCMP_F32 | (op & SLJIT_F32_OP) | DD4(src1) | DM4(src2))); + FAIL_IF(push_inst32(compiler, VCMP_F32 | (op & SLJIT_32) | DD4(src1) | DM4(src2))); return push_inst32(compiler, VMRS); } @@ -1656,16 +1871,16 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compil CHECK_ERROR(); - SLJIT_COMPILE_ASSERT((SLJIT_F32_OP == 0x100), float_transfer_bit_error); + SLJIT_COMPILE_ASSERT((SLJIT_32 == 0x100), float_transfer_bit_error); SELECT_FOP1_OPERATION_WITH_CHECKS(compiler, op, dst, dstw, src, srcw); dst_r = FAST_IS_REG(dst) ? dst : TMP_FREG1; if (GET_OPCODE(op) != SLJIT_CONV_F64_FROM_F32) - op ^= SLJIT_F32_OP; + op ^= SLJIT_32; if (src & SLJIT_MEM) { - emit_fop_mem(compiler, (op & SLJIT_F32_OP) | FPU_LOAD, dst_r, src, srcw); + emit_fop_mem(compiler, (op & SLJIT_32) | FPU_LOAD, dst_r, src, srcw); src = dst_r; } @@ -1673,25 +1888,25 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compil case SLJIT_MOV_F64: if (src != dst_r) { if (dst_r != TMP_FREG1) - FAIL_IF(push_inst32(compiler, VMOV_F32 | (op & SLJIT_F32_OP) | DD4(dst_r) | DM4(src))); + FAIL_IF(push_inst32(compiler, VMOV_F32 | (op & SLJIT_32) | DD4(dst_r) | DM4(src))); else dst_r = src; } break; case SLJIT_NEG_F64: - FAIL_IF(push_inst32(compiler, VNEG_F32 | (op & SLJIT_F32_OP) | DD4(dst_r) | DM4(src))); + FAIL_IF(push_inst32(compiler, VNEG_F32 | (op & SLJIT_32) | DD4(dst_r) | DM4(src))); break; case SLJIT_ABS_F64: - FAIL_IF(push_inst32(compiler, VABS_F32 | (op & SLJIT_F32_OP) | DD4(dst_r) | DM4(src))); + FAIL_IF(push_inst32(compiler, VABS_F32 | (op & SLJIT_32) | DD4(dst_r) | DM4(src))); break; case SLJIT_CONV_F64_FROM_F32: - FAIL_IF(push_inst32(compiler, VCVT_F64_F32 | (op & SLJIT_F32_OP) | DD4(dst_r) | DM4(src))); - op ^= SLJIT_F32_OP; + FAIL_IF(push_inst32(compiler, VCVT_F64_F32 | (op & SLJIT_32) | DD4(dst_r) | DM4(src))); + op ^= SLJIT_32; break; } if (dst & SLJIT_MEM) - return emit_fop_mem(compiler, (op & SLJIT_F32_OP), dst_r, dst, dstw); + return emit_fop_mem(compiler, (op & SLJIT_32), dst_r, dst, dstw); return SLJIT_SUCCESS; } @@ -1708,36 +1923,36 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop2(struct sljit_compiler *compil ADJUST_LOCAL_OFFSET(src1, src1w); ADJUST_LOCAL_OFFSET(src2, src2w); - op ^= SLJIT_F32_OP; + op ^= SLJIT_32; dst_r = FAST_IS_REG(dst) ? dst : TMP_FREG1; if (src1 & SLJIT_MEM) { - emit_fop_mem(compiler, (op & SLJIT_F32_OP) | FPU_LOAD, TMP_FREG1, src1, src1w); + emit_fop_mem(compiler, (op & SLJIT_32) | FPU_LOAD, TMP_FREG1, src1, src1w); src1 = TMP_FREG1; } if (src2 & SLJIT_MEM) { - emit_fop_mem(compiler, (op & SLJIT_F32_OP) | FPU_LOAD, TMP_FREG2, src2, src2w); + emit_fop_mem(compiler, (op & SLJIT_32) | FPU_LOAD, TMP_FREG2, src2, src2w); src2 = TMP_FREG2; } switch (GET_OPCODE(op)) { case SLJIT_ADD_F64: - FAIL_IF(push_inst32(compiler, VADD_F32 | (op & SLJIT_F32_OP) | DD4(dst_r) | DN4(src1) | DM4(src2))); + FAIL_IF(push_inst32(compiler, VADD_F32 | (op & SLJIT_32) | DD4(dst_r) | DN4(src1) | DM4(src2))); break; case SLJIT_SUB_F64: - FAIL_IF(push_inst32(compiler, VSUB_F32 | (op & SLJIT_F32_OP) | DD4(dst_r) | DN4(src1) | DM4(src2))); + FAIL_IF(push_inst32(compiler, VSUB_F32 | (op & SLJIT_32) | DD4(dst_r) | DN4(src1) | DM4(src2))); break; case SLJIT_MUL_F64: - FAIL_IF(push_inst32(compiler, VMUL_F32 | (op & SLJIT_F32_OP) | DD4(dst_r) | DN4(src1) | DM4(src2))); + FAIL_IF(push_inst32(compiler, VMUL_F32 | (op & SLJIT_32) | DD4(dst_r) | DN4(src1) | DM4(src2))); break; case SLJIT_DIV_F64: - FAIL_IF(push_inst32(compiler, VDIV_F32 | (op & SLJIT_F32_OP) | DD4(dst_r) | DN4(src1) | DM4(src2))); + FAIL_IF(push_inst32(compiler, VDIV_F32 | (op & SLJIT_32) | DD4(dst_r) | DN4(src1) | DM4(src2))); break; } if (!(dst & SLJIT_MEM)) return SLJIT_SUCCESS; - return emit_fop_mem(compiler, (op & SLJIT_F32_OP), TMP_FREG1, dst, dstw); + return emit_fop_mem(compiler, (op & SLJIT_32), TMP_FREG1, dst, dstw); } #undef FPU_LOAD @@ -1776,10 +1991,20 @@ static sljit_uw get_cc(struct sljit_compiler *compiler, sljit_s32 type) case SLJIT_NOT_EQUAL_F64: return 0x1; + case SLJIT_CARRY: + if (compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD) + return 0x2; + /* fallthrough */ + case SLJIT_LESS: case SLJIT_LESS_F64: return 0x3; + case SLJIT_NOT_CARRY: + if (compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD) + return 0x3; + /* fallthrough */ + case SLJIT_GREATER_EQUAL: case SLJIT_GREATER_EQUAL_F64: return 0x2; @@ -1805,15 +2030,17 @@ static sljit_uw get_cc(struct sljit_compiler *compiler, sljit_s32 type) return 0xd; case SLJIT_OVERFLOW: - if (!(compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB)) + if (!(compiler->status_flags_state & (SLJIT_CURRENT_FLAGS_ADD | SLJIT_CURRENT_FLAGS_SUB))) return 0x1; + /* fallthrough */ case SLJIT_UNORDERED_F64: return 0x6; case SLJIT_NOT_OVERFLOW: - if (!(compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB)) + if (!(compiler->status_flags_state & (SLJIT_CURRENT_FLAGS_ADD | SLJIT_CURRENT_FLAGS_SUB))) return 0x0; + /* fallthrough */ case SLJIT_ORDERED_F64: return 0x7; @@ -1874,113 +2101,126 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile #ifdef __SOFTFP__ -static sljit_s32 softfloat_call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_types, sljit_s32 *src) +static sljit_s32 softfloat_call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_types, sljit_s32 *src, sljit_u32 *extra_space) { - sljit_s32 stack_offset = 0; - sljit_s32 arg_count = 0; - sljit_s32 word_arg_offset = 0; - sljit_s32 float_arg_count = 0; + sljit_u32 is_tail_call = *extra_space & SLJIT_CALL_RETURN; + sljit_u32 offset = 0; + sljit_u32 word_arg_offset = 0; + sljit_u32 float_arg_count = 0; sljit_s32 types = 0; - sljit_s32 src_offset = 4 * sizeof(sljit_sw); + sljit_u32 src_offset = 4 * sizeof(sljit_sw); sljit_u8 offsets[4]; + sljit_u8 *offset_ptr = offsets; if (src && FAST_IS_REG(*src)) - src_offset = reg_map[*src] * sizeof(sljit_sw); + src_offset = (sljit_u32)reg_map[*src] * sizeof(sljit_sw); - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; while (arg_types) { - types = (types << SLJIT_DEF_SHIFT) | (arg_types & SLJIT_DEF_MASK); + types = (types << SLJIT_ARG_SHIFT) | (arg_types & SLJIT_ARG_MASK); - switch (arg_types & SLJIT_DEF_MASK) { - case SLJIT_ARG_TYPE_F32: - offsets[arg_count] = (sljit_u8)stack_offset; - stack_offset += sizeof(sljit_f32); - arg_count++; + switch (arg_types & SLJIT_ARG_MASK) { + case SLJIT_ARG_TYPE_F64: + if (offset & 0x7) + offset += sizeof(sljit_sw); + *offset_ptr++ = (sljit_u8)offset; + offset += sizeof(sljit_f64); float_arg_count++; break; - case SLJIT_ARG_TYPE_F64: - if (stack_offset & 0x7) - stack_offset += sizeof(sljit_sw); - offsets[arg_count] = (sljit_u8)stack_offset; - stack_offset += sizeof(sljit_f64); - arg_count++; + case SLJIT_ARG_TYPE_F32: + *offset_ptr++ = (sljit_u8)offset; + offset += sizeof(sljit_f32); float_arg_count++; break; default: - offsets[arg_count] = (sljit_u8)stack_offset; - stack_offset += sizeof(sljit_sw); - arg_count++; + *offset_ptr++ = (sljit_u8)offset; + offset += sizeof(sljit_sw); word_arg_offset += sizeof(sljit_sw); break; } - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; } - if (stack_offset > 16) - FAIL_IF(push_inst16(compiler, SUB_SP | (((stack_offset - 16) + 0x7) & ~0x7) >> 2)); + if (offset > 4 * sizeof(sljit_sw) && (!is_tail_call || offset > compiler->args_size)) { + /* Keep lr register on the stack. */ + if (is_tail_call) + offset += sizeof(sljit_sw); + + offset = ((offset - 4 * sizeof(sljit_sw)) + 0x7) & ~(sljit_uw)0x7; + + *extra_space = offset; + + if (is_tail_call) + FAIL_IF(emit_stack_frame_release(compiler, (sljit_s32)offset)); + else + FAIL_IF(push_inst16(compiler, SUB_SP_I | (offset >> 2))); + } else { + if (is_tail_call) + FAIL_IF(emit_stack_frame_release(compiler, -1)); + *extra_space = 0; + } SLJIT_ASSERT(reg_map[TMP_REG1] == 12); /* Process arguments in reversed direction. */ while (types) { - switch (types & SLJIT_DEF_MASK) { - case SLJIT_ARG_TYPE_F32: - arg_count--; + switch (types & SLJIT_ARG_MASK) { + case SLJIT_ARG_TYPE_F64: float_arg_count--; - stack_offset = offsets[arg_count]; + offset = *(--offset_ptr); + + SLJIT_ASSERT((offset & 0x7) == 0); - if (stack_offset < 16) { - if (src_offset == stack_offset) { + if (offset < 4 * sizeof(sljit_sw)) { + if (src_offset == offset || src_offset == offset + sizeof(sljit_sw)) { FAIL_IF(push_inst16(compiler, MOV | (src_offset << 1) | 4 | (1 << 7))); *src = TMP_REG1; } - FAIL_IF(push_inst32(compiler, VMOV | 0x100000 | (float_arg_count << 16) | (stack_offset << 10))); + FAIL_IF(push_inst32(compiler, VMOV2 | 0x100000 | (offset << 10) | ((offset + sizeof(sljit_sw)) << 14) | float_arg_count)); } else - FAIL_IF(push_inst32(compiler, VSTR_F32 | 0x800000 | RN4(SLJIT_SP) | (float_arg_count << 12) | ((stack_offset - 16) >> 2))); + FAIL_IF(push_inst32(compiler, VSTR_F32 | 0x800100 | RN4(SLJIT_SP) + | (float_arg_count << 12) | ((offset - 4 * sizeof(sljit_sw)) >> 2))); break; - case SLJIT_ARG_TYPE_F64: - arg_count--; + case SLJIT_ARG_TYPE_F32: float_arg_count--; - stack_offset = offsets[arg_count]; - - SLJIT_ASSERT((stack_offset & 0x7) == 0); + offset = *(--offset_ptr); - if (stack_offset < 16) { - if (src_offset == stack_offset || src_offset == stack_offset + sizeof(sljit_sw)) { + if (offset < 4 * sizeof(sljit_sw)) { + if (src_offset == offset) { FAIL_IF(push_inst16(compiler, MOV | (src_offset << 1) | 4 | (1 << 7))); *src = TMP_REG1; } - FAIL_IF(push_inst32(compiler, VMOV2 | 0x100000 | (stack_offset << 10) | ((stack_offset + sizeof(sljit_sw)) << 14) | float_arg_count)); + FAIL_IF(push_inst32(compiler, VMOV | 0x100000 | (float_arg_count << 16) | (offset << 10))); } else - FAIL_IF(push_inst32(compiler, VSTR_F32 | 0x800100 | RN4(SLJIT_SP) | (float_arg_count << 12) | ((stack_offset - 16) >> 2))); + FAIL_IF(push_inst32(compiler, VSTR_F32 | 0x800000 | RN4(SLJIT_SP) + | (float_arg_count << 12) | ((offset - 4 * sizeof(sljit_sw)) >> 2))); break; default: - arg_count--; word_arg_offset -= sizeof(sljit_sw); - stack_offset = offsets[arg_count]; + offset = *(--offset_ptr); - SLJIT_ASSERT(stack_offset >= word_arg_offset); + SLJIT_ASSERT(offset >= word_arg_offset); - if (stack_offset != word_arg_offset) { - if (stack_offset < 16) { - if (src_offset == stack_offset) { + if (offset != word_arg_offset) { + if (offset < 4 * sizeof(sljit_sw)) { + if (src_offset == offset) { FAIL_IF(push_inst16(compiler, MOV | (src_offset << 1) | 4 | (1 << 7))); *src = TMP_REG1; } else if (src_offset == word_arg_offset) { - *src = 1 + (stack_offset >> 2); - src_offset = stack_offset; + *src = (sljit_s32)(1 + (offset >> 2)); + src_offset = offset; } - FAIL_IF(push_inst16(compiler, MOV | (stack_offset >> 2) | (word_arg_offset << 1))); + FAIL_IF(push_inst16(compiler, MOV | (offset >> 2) | (word_arg_offset << 1))); } else - FAIL_IF(push_inst16(compiler, STR_SP | (word_arg_offset << 6) | ((stack_offset - 16) >> 2))); + FAIL_IF(push_inst16(compiler, STR_SP | (word_arg_offset << 6) | ((offset - 4 * sizeof(sljit_sw)) >> 2))); } break; } - types >>= SLJIT_DEF_SHIFT; + types >>= SLJIT_ARG_SHIFT; } return SLJIT_SUCCESS; @@ -1988,83 +2228,48 @@ static sljit_s32 softfloat_call_with_args(struct sljit_compiler *compiler, sljit static sljit_s32 softfloat_post_call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_types) { - sljit_s32 stack_size = 0; - - if ((arg_types & SLJIT_DEF_MASK) == SLJIT_ARG_TYPE_F32) - FAIL_IF(push_inst32(compiler, VMOV | (0 << 16) | (0 << 12))); - if ((arg_types & SLJIT_DEF_MASK) == SLJIT_ARG_TYPE_F64) + if ((arg_types & SLJIT_ARG_MASK) == SLJIT_ARG_TYPE_F64) FAIL_IF(push_inst32(compiler, VMOV2 | (1 << 16) | (0 << 12) | 0)); + if ((arg_types & SLJIT_ARG_MASK) == SLJIT_ARG_TYPE_F32) + FAIL_IF(push_inst32(compiler, VMOV | (0 << 16) | (0 << 12))); - arg_types >>= SLJIT_DEF_SHIFT; - - while (arg_types) { - switch (arg_types & SLJIT_DEF_MASK) { - case SLJIT_ARG_TYPE_F32: - stack_size += sizeof(sljit_f32); - break; - case SLJIT_ARG_TYPE_F64: - if (stack_size & 0x7) - stack_size += sizeof(sljit_sw); - stack_size += sizeof(sljit_f64); - break; - default: - stack_size += sizeof(sljit_sw); - break; - } - - arg_types >>= SLJIT_DEF_SHIFT; - } - - if (stack_size <= 16) - return SLJIT_SUCCESS; - - return push_inst16(compiler, ADD_SP | ((((stack_size - 16) + 0x7) & ~0x7) >> 2)); + return SLJIT_SUCCESS; } #else static sljit_s32 hardfloat_call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_types) { - sljit_u32 remap = 0; - sljit_u32 offset = 0; - sljit_u32 new_offset, mask; + sljit_u32 offset = SLJIT_FR0; + sljit_u32 new_offset = SLJIT_FR0; + sljit_u32 f32_offset = 0; /* Remove return value. */ - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; while (arg_types) { - if ((arg_types & SLJIT_DEF_MASK) == SLJIT_ARG_TYPE_F32) { - new_offset = 0; - mask = 1; - - while (remap & mask) { - new_offset++; - mask <<= 1; - } - remap |= mask; - + switch (arg_types & SLJIT_ARG_MASK) { + case SLJIT_ARG_TYPE_F64: if (offset != new_offset) - FAIL_IF(push_inst32(compiler, VMOV_F32 | DD4((new_offset >> 1) + 1) - | ((new_offset & 0x1) ? 0x400000 : 0) | DM4((offset >> 1) + 1))); - - offset += 2; - } - else if ((arg_types & SLJIT_DEF_MASK) == SLJIT_ARG_TYPE_F64) { - new_offset = 0; - mask = 3; + FAIL_IF(push_inst32(compiler, VMOV_F32 | SLJIT_32 | DD4(new_offset) | DM4(offset))); - while (remap & mask) { - new_offset += 2; - mask <<= 2; + new_offset++; + offset++; + break; + case SLJIT_ARG_TYPE_F32: + if (f32_offset != 0) { + FAIL_IF(push_inst32(compiler, VMOV_F32 | 0x400000 | DD4(f32_offset) | DM4(offset))); + f32_offset = 0; + } else { + if (offset != new_offset) + FAIL_IF(push_inst32(compiler, VMOV_F32 | 0x400000 | DD4(new_offset) | DM4(offset))); + f32_offset = new_offset; + new_offset++; } - remap |= mask; - - if (offset != new_offset) - FAIL_IF(push_inst32(compiler, VMOV_F32 | SLJIT_F32_OP | DD4((new_offset >> 1) + 1) | DM4((offset >> 1) + 1))); - - offset += 2; + offset++; + break; } - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; } return SLJIT_SUCCESS; @@ -2077,13 +2282,18 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_call(struct sljit_compile { #ifdef __SOFTFP__ struct sljit_jump *jump; + sljit_u32 extra_space = (sljit_u32)type; #endif CHECK_ERROR_PTR(); CHECK_PTR(check_sljit_emit_call(compiler, type, arg_types)); #ifdef __SOFTFP__ - PTR_FAIL_IF(softfloat_call_with_args(compiler, arg_types, NULL)); + PTR_FAIL_IF(softfloat_call_with_args(compiler, arg_types, NULL, &extra_space)); + SLJIT_ASSERT((extra_space & 0x7) == 0); + + if ((type & SLJIT_CALL_RETURN) && extra_space == 0) + type = SLJIT_JUMP | (type & SLJIT_REWRITABLE_JUMP); #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) @@ -2093,9 +2303,29 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_call(struct sljit_compile jump = sljit_emit_jump(compiler, type); PTR_FAIL_IF(jump == NULL); + if (extra_space > 0) { + if (type & SLJIT_CALL_RETURN) + PTR_FAIL_IF(push_inst32(compiler, LDR | RT4(TMP_REG2) + | RN4(SLJIT_SP) | (extra_space - sizeof(sljit_sw)))); + + PTR_FAIL_IF(push_inst16(compiler, ADD_SP_I | (extra_space >> 2))); + + if (type & SLJIT_CALL_RETURN) { + PTR_FAIL_IF(push_inst16(compiler, BX | RN3(TMP_REG2))); + return jump; + } + } + + SLJIT_ASSERT(!(type & SLJIT_CALL_RETURN)); PTR_FAIL_IF(softfloat_post_call_with_args(compiler, arg_types)); return jump; #else + if (type & SLJIT_CALL_RETURN) { + /* ldmia sp!, {..., lr} */ + PTR_FAIL_IF(emit_stack_frame_release(compiler, -1)); + type = SLJIT_JUMP | (type & SLJIT_REWRITABLE_JUMP); + } + PTR_FAIL_IF(hardfloat_call_with_args(compiler, arg_types)); #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ @@ -2132,7 +2362,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_ijump(struct sljit_compiler *compi jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump)); FAIL_IF(!jump); set_jump(jump, compiler, JUMP_ADDR | ((type >= SLJIT_FAST_CALL) ? IS_BL : 0)); - jump->u.target = srcw; + jump->u.target = (sljit_uw)srcw; FAIL_IF(emit_imm32_const(compiler, TMP_REG1, 0)); jump->addr = compiler->size; @@ -2143,16 +2373,29 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_icall(struct sljit_compiler *compi sljit_s32 arg_types, sljit_s32 src, sljit_sw srcw) { +#ifdef __SOFTFP__ + sljit_u32 extra_space = (sljit_u32)type; +#endif + CHECK_ERROR(); CHECK(check_sljit_emit_icall(compiler, type, arg_types, src, srcw)); -#ifdef __SOFTFP__ if (src & SLJIT_MEM) { FAIL_IF(emit_op_mem(compiler, WORD_SIZE, TMP_REG1, src, srcw, TMP_REG1)); src = TMP_REG1; } - FAIL_IF(softfloat_call_with_args(compiler, arg_types, &src)); + if ((type & SLJIT_CALL_RETURN) && (src >= SLJIT_FIRST_SAVED_REG && src <= SLJIT_S0)) { + FAIL_IF(push_inst16(compiler, MOV | SET_REGS44(TMP_REG1, src))); + src = TMP_REG1; + } + +#ifdef __SOFTFP__ + FAIL_IF(softfloat_call_with_args(compiler, arg_types, &src, &extra_space)); + SLJIT_ASSERT((extra_space & 0x7) == 0); + + if ((type & SLJIT_CALL_RETURN) && extra_space == 0) + type = SLJIT_JUMP; #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) @@ -2161,8 +2404,26 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_icall(struct sljit_compiler *compi FAIL_IF(sljit_emit_ijump(compiler, type, src, srcw)); + if (extra_space > 0) { + if (type & SLJIT_CALL_RETURN) + FAIL_IF(push_inst32(compiler, LDR | RT4(TMP_REG2) + | RN4(SLJIT_SP) | (extra_space - sizeof(sljit_sw)))); + + FAIL_IF(push_inst16(compiler, ADD_SP_I | (extra_space >> 2))); + + if (type & SLJIT_CALL_RETURN) + return push_inst16(compiler, BX | RN3(TMP_REG2)); + } + + SLJIT_ASSERT(!(type & SLJIT_CALL_RETURN)); return softfloat_post_call_with_args(compiler, arg_types); #else /* !__SOFTFP__ */ + if (type & SLJIT_CALL_RETURN) { + /* ldmia sp!, {..., lr} */ + FAIL_IF(emit_stack_frame_release(compiler, -1)); + type = SLJIT_JUMP; + } + FAIL_IF(hardfloat_call_with_args(compiler, arg_types)); #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ @@ -2236,7 +2497,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_cmov(struct sljit_compiler *compil CHECK_ERROR(); CHECK(check_sljit_emit_cmov(compiler, type, dst_reg, src, srcw)); - dst_reg &= ~SLJIT_I32_OP; + dst_reg &= ~SLJIT_32; cc = get_cc(compiler, type & 0xff); @@ -2254,13 +2515,13 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_cmov(struct sljit_compiler *compil | COPY_BITS(tmp, 12, 16, 4) | COPY_BITS(tmp, 11, 26, 1) | COPY_BITS(tmp, 8, 12, 3) | (tmp & 0xff)); } - tmp = get_imm(srcw); + tmp = get_imm((sljit_uw)srcw); if (tmp != INVALID_IMM) { FAIL_IF(push_inst16(compiler, IT | (cc << 4) | 0x8)); return push_inst32(compiler, MOV_WI | RD4(dst_reg) | tmp); } - tmp = get_imm(~srcw); + tmp = get_imm(~(sljit_uw)srcw); if (tmp != INVALID_IMM) { FAIL_IF(push_inst16(compiler, IT | (cc << 4) | 0x8)); return push_inst32(compiler, MVN_WI | RD4(dst_reg) | tmp); @@ -2295,6 +2556,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_mem(struct sljit_compiler *compile case SLJIT_MOV: case SLJIT_MOV_U32: case SLJIT_MOV_S32: + case SLJIT_MOV32: case SLJIT_MOV_P: flags = WORD_SIZE; break; @@ -2329,7 +2591,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_mem(struct sljit_compiler *compile else memw = -memw; - return push_inst32(compiler, inst | RT4(reg) | RN4(mem & REG_MASK) | memw); + return push_inst32(compiler, inst | RT4(reg) | RN4(mem & REG_MASK) | (sljit_ins)memw); } SLJIT_API_FUNC_ATTRIBUTE struct sljit_const* sljit_emit_const(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw dstw, sljit_sw init_value) @@ -2346,7 +2608,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_const* sljit_emit_const(struct sljit_compi set_const(const_, compiler); dst_r = FAST_IS_REG(dst) ? dst : TMP_REG1; - PTR_FAIL_IF(emit_imm32_const(compiler, dst_r, init_value)); + PTR_FAIL_IF(emit_imm32_const(compiler, dst_r, (sljit_uw)init_value)); if (dst & SLJIT_MEM) PTR_FAIL_IF(emit_op_mem(compiler, WORD_SIZE | STORE, dst_r, dst, dstw, TMP_REG2)); @@ -2388,5 +2650,5 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_set_jump_addr(sljit_uw addr, sljit_uw new_ta SLJIT_API_FUNC_ATTRIBUTE void sljit_set_const(sljit_uw addr, sljit_sw new_constant, sljit_sw executable_offset) { - sljit_set_jump_addr(addr, new_constant, executable_offset); + sljit_set_jump_addr(addr, (sljit_uw)new_constant, executable_offset); } diff --git a/thirdparty/pcre2/src/sljit/sljitNativeMIPS_32.c b/thirdparty/pcre2/src/sljit/sljitNativeMIPS_32.c index a90345f1f8..1a06b17d12 100644 --- a/thirdparty/pcre2/src/sljit/sljitNativeMIPS_32.c +++ b/thirdparty/pcre2/src/sljit/sljitNativeMIPS_32.c @@ -73,50 +73,49 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl switch (GET_OPCODE(op)) { case SLJIT_MOV: - case SLJIT_MOV_U32: - case SLJIT_MOV_S32: - case SLJIT_MOV_P: SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM)); if (dst != src2) return push_inst(compiler, ADDU | S(src2) | TA(0) | D(dst), DR(dst)); return SLJIT_SUCCESS; case SLJIT_MOV_U8: + SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM)); + if ((flags & (REG_DEST | REG2_SOURCE)) == (REG_DEST | REG2_SOURCE)) + return push_inst(compiler, ANDI | S(src2) | T(dst) | IMM(0xff), DR(dst)); + SLJIT_ASSERT(dst == src2); + return SLJIT_SUCCESS; + case SLJIT_MOV_S8: SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM)); if ((flags & (REG_DEST | REG2_SOURCE)) == (REG_DEST | REG2_SOURCE)) { - if (op == SLJIT_MOV_S8) { #if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 1) - return push_inst(compiler, SEB | T(src2) | D(dst), DR(dst)); + return push_inst(compiler, SEB | T(src2) | D(dst), DR(dst)); #else /* SLJIT_MIPS_REV < 1 */ - FAIL_IF(push_inst(compiler, SLL | T(src2) | D(dst) | SH_IMM(24), DR(dst))); - return push_inst(compiler, SRA | T(dst) | D(dst) | SH_IMM(24), DR(dst)); + FAIL_IF(push_inst(compiler, SLL | T(src2) | D(dst) | SH_IMM(24), DR(dst))); + return push_inst(compiler, SRA | T(dst) | D(dst) | SH_IMM(24), DR(dst)); #endif /* SLJIT_MIPS_REV >= 1 */ - } - return push_inst(compiler, ANDI | S(src2) | T(dst) | IMM(0xff), DR(dst)); - } - else { - SLJIT_ASSERT(dst == src2); } + SLJIT_ASSERT(dst == src2); return SLJIT_SUCCESS; case SLJIT_MOV_U16: + SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM)); + if ((flags & (REG_DEST | REG2_SOURCE)) == (REG_DEST | REG2_SOURCE)) + return push_inst(compiler, ANDI | S(src2) | T(dst) | IMM(0xffff), DR(dst)); + SLJIT_ASSERT(dst == src2); + return SLJIT_SUCCESS; + case SLJIT_MOV_S16: SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM)); if ((flags & (REG_DEST | REG2_SOURCE)) == (REG_DEST | REG2_SOURCE)) { - if (op == SLJIT_MOV_S16) { #if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 1) - return push_inst(compiler, SEH | T(src2) | D(dst), DR(dst)); + return push_inst(compiler, SEH | T(src2) | D(dst), DR(dst)); #else /* SLJIT_MIPS_REV < 1 */ - FAIL_IF(push_inst(compiler, SLL | T(src2) | D(dst) | SH_IMM(16), DR(dst))); - return push_inst(compiler, SRA | T(dst) | D(dst) | SH_IMM(16), DR(dst)); + FAIL_IF(push_inst(compiler, SLL | T(src2) | D(dst) | SH_IMM(16), DR(dst))); + return push_inst(compiler, SRA | T(dst) | D(dst) | SH_IMM(16), DR(dst)); #endif /* SLJIT_MIPS_REV >= 1 */ - } - return push_inst(compiler, ANDI | S(src2) | T(dst) | IMM(0xffff), DR(dst)); - } - else { - SLJIT_ASSERT(dst == src2); } + SLJIT_ASSERT(dst == src2); return SLJIT_SUCCESS; case SLJIT_NOT: @@ -438,131 +437,120 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_set_jump_addr(sljit_uw addr, sljit_uw new_ta SLJIT_API_FUNC_ATTRIBUTE void sljit_set_const(sljit_uw addr, sljit_sw new_constant, sljit_sw executable_offset) { - sljit_set_jump_addr(addr, new_constant, executable_offset); + sljit_set_jump_addr(addr, (sljit_uw)new_constant, executable_offset); } -static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_types, sljit_ins *ins_ptr) +static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_types, sljit_ins *ins_ptr, sljit_u32 *extra_space) { - sljit_s32 stack_offset = 0; - sljit_s32 arg_count = 0; + sljit_u32 is_tail_call = *extra_space & SLJIT_CALL_RETURN; + sljit_u32 offset = 0; sljit_s32 float_arg_count = 0; sljit_s32 word_arg_count = 0; sljit_s32 types = 0; - sljit_s32 arg_count_save, types_save; sljit_ins prev_ins = NOP; sljit_ins ins = NOP; sljit_u8 offsets[4]; + sljit_u8 *offsets_ptr = offsets; SLJIT_ASSERT(reg_map[TMP_REG1] == 4 && freg_map[TMP_FREG1] == 12); - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; + + /* See ABI description in sljit_emit_enter. */ while (arg_types) { - types = (types << SLJIT_DEF_SHIFT) | (arg_types & SLJIT_DEF_MASK); + types = (types << SLJIT_ARG_SHIFT) | (arg_types & SLJIT_ARG_MASK); + *offsets_ptr = (sljit_u8)offset; - switch (arg_types & SLJIT_DEF_MASK) { - case SLJIT_ARG_TYPE_F32: - offsets[arg_count] = (sljit_u8)stack_offset; + switch (arg_types & SLJIT_ARG_MASK) { + case SLJIT_ARG_TYPE_F64: + if (offset & 0x7) { + offset += sizeof(sljit_sw); + *offsets_ptr = (sljit_u8)offset; + } - if (word_arg_count == 0 && arg_count <= 1) - offsets[arg_count] = 254 + arg_count; + if (word_arg_count == 0 && float_arg_count <= 1) + *offsets_ptr = (sljit_u8)(254 + float_arg_count); - stack_offset += sizeof(sljit_f32); - arg_count++; + offset += sizeof(sljit_f64); float_arg_count++; break; - case SLJIT_ARG_TYPE_F64: - if (stack_offset & 0x7) - stack_offset += sizeof(sljit_sw); - offsets[arg_count] = (sljit_u8)stack_offset; - - if (word_arg_count == 0 && arg_count <= 1) - offsets[arg_count] = 254 + arg_count; + case SLJIT_ARG_TYPE_F32: + if (word_arg_count == 0 && float_arg_count <= 1) + *offsets_ptr = (sljit_u8)(254 + float_arg_count); - stack_offset += sizeof(sljit_f64); - arg_count++; + offset += sizeof(sljit_f32); float_arg_count++; break; default: - offsets[arg_count] = (sljit_u8)stack_offset; - stack_offset += sizeof(sljit_sw); - arg_count++; + offset += sizeof(sljit_sw); word_arg_count++; break; } - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; + offsets_ptr++; } - /* Stack is aligned to 16 bytes, max two doubles can be placed on the stack. */ - if (stack_offset > 16) - FAIL_IF(push_inst(compiler, ADDIU | S(SLJIT_SP) | T(SLJIT_SP) | IMM(-16), DR(SLJIT_SP))); + /* Stack is aligned to 16 bytes. */ + SLJIT_ASSERT(offset <= 8 * sizeof(sljit_sw)); - types_save = types; - arg_count_save = arg_count; + if (offset > 4 * sizeof(sljit_sw) && (!is_tail_call || offset > compiler->args_size)) { + if (is_tail_call) { + offset = (offset + sizeof(sljit_sw) + 15) & ~(sljit_uw)0xf; + FAIL_IF(emit_stack_frame_release(compiler, (sljit_s32)offset, &prev_ins)); + *extra_space = offset; + } else { + FAIL_IF(push_inst(compiler, ADDIU | S(SLJIT_SP) | T(SLJIT_SP) | IMM(-16), DR(SLJIT_SP))); + *extra_space = 16; + } + } else { + if (is_tail_call) + FAIL_IF(emit_stack_frame_release(compiler, 0, &prev_ins)); + *extra_space = 0; + } while (types) { - switch (types & SLJIT_DEF_MASK) { - case SLJIT_ARG_TYPE_F32: - arg_count--; - if (offsets[arg_count] < 254) - ins = SWC1 | S(SLJIT_SP) | FT(float_arg_count) | IMM(offsets[arg_count]); - float_arg_count--; - break; - case SLJIT_ARG_TYPE_F64: - arg_count--; - if (offsets[arg_count] < 254) - ins = SDC1 | S(SLJIT_SP) | FT(float_arg_count) | IMM(offsets[arg_count]); - float_arg_count--; - break; - default: - if (offsets[arg_count - 1] >= 16) - ins = SW | S(SLJIT_SP) | T(word_arg_count) | IMM(offsets[arg_count - 1]); - else if (arg_count != word_arg_count) - ins = ADDU | S(word_arg_count) | TA(0) | DA(4 + (offsets[arg_count - 1] >> 2)); - else if (arg_count == 1) - ins = ADDU | S(SLJIT_R0) | TA(0) | DA(4); + --offsets_ptr; - arg_count--; - word_arg_count--; - break; - } - - if (ins != NOP) { - if (prev_ins != NOP) - FAIL_IF(push_inst(compiler, prev_ins, MOVABLE_INS)); - prev_ins = ins; - ins = NOP; - } + switch (types & SLJIT_ARG_MASK) { + case SLJIT_ARG_TYPE_F64: + if (*offsets_ptr < 4 * sizeof (sljit_sw)) { + if (prev_ins != NOP) + FAIL_IF(push_inst(compiler, prev_ins, MOVABLE_INS)); - types >>= SLJIT_DEF_SHIFT; - } + /* Must be preceded by at least one other argument, + * and its starting offset must be 8 because of alignment. */ + SLJIT_ASSERT((*offsets_ptr >> 2) == 2); - types = types_save; - arg_count = arg_count_save; + prev_ins = MFC1 | TA(6) | FS(float_arg_count) | (1 << 11); + ins = MFC1 | TA(7) | FS(float_arg_count); + } else if (*offsets_ptr < 254) + ins = SDC1 | S(SLJIT_SP) | FT(float_arg_count) | IMM(*offsets_ptr); + else if (*offsets_ptr == 254) + ins = MOV_S | FMT_D | FS(SLJIT_FR0) | FD(TMP_FREG1); - while (types) { - switch (types & SLJIT_DEF_MASK) { + float_arg_count--; + break; case SLJIT_ARG_TYPE_F32: - arg_count--; - if (offsets[arg_count] == 254) + if (*offsets_ptr < 4 * sizeof (sljit_sw)) + ins = MFC1 | TA(4 + (*offsets_ptr >> 2)) | FS(float_arg_count); + else if (*offsets_ptr < 254) + ins = SWC1 | S(SLJIT_SP) | FT(float_arg_count) | IMM(*offsets_ptr); + else if (*offsets_ptr == 254) ins = MOV_S | FMT_S | FS(SLJIT_FR0) | FD(TMP_FREG1); - else if (offsets[arg_count] < 16) - ins = LW | S(SLJIT_SP) | TA(4 + (offsets[arg_count] >> 2)) | IMM(offsets[arg_count]); - break; - case SLJIT_ARG_TYPE_F64: - arg_count--; - if (offsets[arg_count] == 254) - ins = MOV_S | FMT_D | FS(SLJIT_FR0) | FD(TMP_FREG1); - else if (offsets[arg_count] < 16) { - if (prev_ins != NOP) - FAIL_IF(push_inst(compiler, prev_ins, MOVABLE_INS)); - prev_ins = LW | S(SLJIT_SP) | TA(4 + (offsets[arg_count] >> 2)) | IMM(offsets[arg_count]); - ins = LW | S(SLJIT_SP) | TA(5 + (offsets[arg_count] >> 2)) | IMM(offsets[arg_count] + sizeof(sljit_sw)); - } + + float_arg_count--; break; default: - arg_count--; + if (*offsets_ptr >= 4 * sizeof (sljit_sw)) + ins = SW | S(SLJIT_SP) | T(word_arg_count) | IMM(*offsets_ptr); + else if ((*offsets_ptr >> 2) != word_arg_count - 1) + ins = ADDU | S(word_arg_count) | TA(0) | DA(4 + (*offsets_ptr >> 2)); + else if (*offsets_ptr == 0) + ins = ADDU | S(SLJIT_R0) | TA(0) | DA(4); + + word_arg_count--; break; } @@ -573,7 +561,7 @@ static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_t ins = NOP; } - types >>= SLJIT_DEF_SHIFT; + types >>= SLJIT_ARG_SHIFT; } *ins_ptr = prev_ins; @@ -581,41 +569,11 @@ static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_t return SLJIT_SUCCESS; } -static sljit_s32 post_call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_types) -{ - sljit_s32 stack_offset = 0; - - arg_types >>= SLJIT_DEF_SHIFT; - - while (arg_types) { - switch (arg_types & SLJIT_DEF_MASK) { - case SLJIT_ARG_TYPE_F32: - stack_offset += sizeof(sljit_f32); - break; - case SLJIT_ARG_TYPE_F64: - if (stack_offset & 0x7) - stack_offset += sizeof(sljit_sw); - stack_offset += sizeof(sljit_f64); - break; - default: - stack_offset += sizeof(sljit_sw); - break; - } - - arg_types >>= SLJIT_DEF_SHIFT; - } - - /* Stack is aligned to 16 bytes, max two doubles can be placed on the stack. */ - if (stack_offset > 16) - return push_inst(compiler, ADDIU | S(SLJIT_SP) | T(SLJIT_SP) | IMM(16), DR(SLJIT_SP)); - - return SLJIT_SUCCESS; -} - SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_call(struct sljit_compiler *compiler, sljit_s32 type, sljit_s32 arg_types) { struct sljit_jump *jump; + sljit_u32 extra_space = (sljit_u32)type; sljit_ins ins; CHECK_ERROR_PTR(); @@ -624,21 +582,34 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_call(struct sljit_compile jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump)); PTR_FAIL_IF(!jump); set_jump(jump, compiler, type & SLJIT_REWRITABLE_JUMP); - type &= 0xff; - PTR_FAIL_IF(call_with_args(compiler, arg_types, &ins)); + PTR_FAIL_IF(call_with_args(compiler, arg_types, &ins, &extra_space)); SLJIT_ASSERT(DR(PIC_ADDR_REG) == 25 && PIC_ADDR_REG == TMP_REG2); PTR_FAIL_IF(emit_const(compiler, PIC_ADDR_REG, 0)); - jump->flags |= IS_JAL | IS_CALL; - PTR_FAIL_IF(push_inst(compiler, JALR | S(PIC_ADDR_REG) | DA(RETURN_ADDR_REG), UNMOVABLE_INS)); + if (!(type & SLJIT_CALL_RETURN) || extra_space > 0) { + jump->flags |= IS_JAL | IS_CALL; + PTR_FAIL_IF(push_inst(compiler, JALR | S(PIC_ADDR_REG) | DA(RETURN_ADDR_REG), UNMOVABLE_INS)); + } else + PTR_FAIL_IF(push_inst(compiler, JR | S(PIC_ADDR_REG), UNMOVABLE_INS)); + jump->addr = compiler->size; PTR_FAIL_IF(push_inst(compiler, ins, UNMOVABLE_INS)); - PTR_FAIL_IF(post_call_with_args(compiler, arg_types)); + if (extra_space == 0) + return jump; + + if (type & SLJIT_CALL_RETURN) + PTR_FAIL_IF(emit_op_mem(compiler, WORD_DATA | LOAD_DATA, RETURN_ADDR_REG, + SLJIT_MEM1(SLJIT_SP), (sljit_sw)(extra_space - sizeof(sljit_sw)))); + + if (type & SLJIT_CALL_RETURN) + PTR_FAIL_IF(push_inst(compiler, JR | SA(RETURN_ADDR_REG), UNMOVABLE_INS)); + PTR_FAIL_IF(push_inst(compiler, ADDIU | S(SLJIT_SP) | T(SLJIT_SP) | IMM(extra_space), + (type & SLJIT_CALL_RETURN) ? UNMOVABLE_INS : DR(SLJIT_SP))); return jump; } @@ -646,6 +617,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_icall(struct sljit_compiler *compi sljit_s32 arg_types, sljit_s32 src, sljit_sw srcw) { + sljit_u32 extra_space = (sljit_u32)type; sljit_ins ins; CHECK_ERROR(); @@ -662,10 +634,25 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_icall(struct sljit_compiler *compi FAIL_IF(emit_op_mem(compiler, WORD_DATA | LOAD_DATA, DR(PIC_ADDR_REG), src, srcw)); } - FAIL_IF(call_with_args(compiler, arg_types, &ins)); + FAIL_IF(call_with_args(compiler, arg_types, &ins, &extra_space)); /* Register input. */ - FAIL_IF(push_inst(compiler, JALR | S(PIC_ADDR_REG) | DA(RETURN_ADDR_REG), UNMOVABLE_INS)); + if (!(type & SLJIT_CALL_RETURN) || extra_space > 0) + FAIL_IF(push_inst(compiler, JALR | S(PIC_ADDR_REG) | DA(RETURN_ADDR_REG), UNMOVABLE_INS)); + else + FAIL_IF(push_inst(compiler, JR | S(PIC_ADDR_REG), UNMOVABLE_INS)); FAIL_IF(push_inst(compiler, ins, UNMOVABLE_INS)); - return post_call_with_args(compiler, arg_types); + + if (extra_space == 0) + return SLJIT_SUCCESS; + + if (type & SLJIT_CALL_RETURN) + FAIL_IF(emit_op_mem(compiler, WORD_DATA | LOAD_DATA, RETURN_ADDR_REG, + SLJIT_MEM1(SLJIT_SP), (sljit_sw)(extra_space - sizeof(sljit_sw)))); + + if (type & SLJIT_CALL_RETURN) + FAIL_IF(push_inst(compiler, JR | SA(RETURN_ADDR_REG), UNMOVABLE_INS)); + + return push_inst(compiler, ADDIU | S(SLJIT_SP) | T(SLJIT_SP) | IMM(extra_space), + (type & SLJIT_CALL_RETURN) ? UNMOVABLE_INS : DR(SLJIT_SP)); } diff --git a/thirdparty/pcre2/src/sljit/sljitNativeMIPS_64.c b/thirdparty/pcre2/src/sljit/sljitNativeMIPS_64.c index 1f22e49ed9..c2b3d839c2 100644 --- a/thirdparty/pcre2/src/sljit/sljitNativeMIPS_64.c +++ b/thirdparty/pcre2/src/sljit/sljitNativeMIPS_64.c @@ -46,9 +46,9 @@ static sljit_s32 load_immediate(struct sljit_compiler *compiler, sljit_s32 dst_a } /* Zero extended number. */ - uimm = imm; + uimm = (sljit_uw)imm; if (imm < 0) { - uimm = ~imm; + uimm = ~(sljit_uw)imm; inv = 1; } @@ -119,7 +119,7 @@ static sljit_s32 load_immediate(struct sljit_compiler *compiler, sljit_s32 dst_a } #define SELECT_OP(a, b) \ - (!(op & SLJIT_I32_OP) ? a : b) + (!(op & SLJIT_32) ? a : b) #define EMIT_LOGICAL(op_imm, op_norm) \ if (flags & SRC2_IMM) { \ @@ -138,19 +138,19 @@ static sljit_s32 load_immediate(struct sljit_compiler *compiler, sljit_s32 dst_a #define EMIT_SHIFT(op_dimm, op_dimm32, op_imm, op_dv, op_v) \ if (flags & SRC2_IMM) { \ if (src2 >= 32) { \ - SLJIT_ASSERT(!(op & SLJIT_I32_OP)); \ + SLJIT_ASSERT(!(op & SLJIT_32)); \ ins = op_dimm32; \ src2 -= 32; \ } \ else \ - ins = (op & SLJIT_I32_OP) ? op_imm : op_dimm; \ + ins = (op & SLJIT_32) ? op_imm : op_dimm; \ if (op & SLJIT_SET_Z) \ FAIL_IF(push_inst(compiler, ins | T(src1) | DA(EQUAL_FLAG) | SH_IMM(src2), EQUAL_FLAG)); \ if (!(flags & UNUSED_DEST)) \ FAIL_IF(push_inst(compiler, ins | T(src1) | D(dst) | SH_IMM(src2), DR(dst))); \ } \ else { \ - ins = (op & SLJIT_I32_OP) ? op_v : op_dv; \ + ins = (op & SLJIT_32) ? op_v : op_dv; \ if (op & SLJIT_SET_Z) \ FAIL_IF(push_inst(compiler, ins | S(src2) | T(src1) | DA(EQUAL_FLAG), EQUAL_FLAG)); \ if (!(flags & UNUSED_DEST)) \ @@ -165,50 +165,71 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl switch (GET_OPCODE(op)) { case SLJIT_MOV: - case SLJIT_MOV_P: SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM)); if (dst != src2) return push_inst(compiler, SELECT_OP(DADDU, ADDU) | S(src2) | TA(0) | D(dst), DR(dst)); return SLJIT_SUCCESS; case SLJIT_MOV_U8: + SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM)); + if ((flags & (REG_DEST | REG2_SOURCE)) == (REG_DEST | REG2_SOURCE)) + return push_inst(compiler, ANDI | S(src2) | T(dst) | IMM(0xff), DR(dst)); + SLJIT_ASSERT(dst == src2); + return SLJIT_SUCCESS; + case SLJIT_MOV_S8: SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM)); if ((flags & (REG_DEST | REG2_SOURCE)) == (REG_DEST | REG2_SOURCE)) { - if (op == SLJIT_MOV_S8) { - FAIL_IF(push_inst(compiler, DSLL32 | T(src2) | D(dst) | SH_IMM(24), DR(dst))); - return push_inst(compiler, DSRA32 | T(dst) | D(dst) | SH_IMM(24), DR(dst)); - } - return push_inst(compiler, ANDI | S(src2) | T(dst) | IMM(0xff), DR(dst)); - } - else { - SLJIT_ASSERT(dst == src2); +#if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 1) + if (op & SLJIT_32) + return push_inst(compiler, SEB | T(src2) | D(dst), DR(dst)); +#endif /* SLJIT_MIPS_REV >= 1 */ + FAIL_IF(push_inst(compiler, DSLL32 | T(src2) | D(dst) | SH_IMM(24), DR(dst))); + return push_inst(compiler, DSRA32 | T(dst) | D(dst) | SH_IMM(24), DR(dst)); } + SLJIT_ASSERT(dst == src2); return SLJIT_SUCCESS; case SLJIT_MOV_U16: + SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM)); + if ((flags & (REG_DEST | REG2_SOURCE)) == (REG_DEST | REG2_SOURCE)) + return push_inst(compiler, ANDI | S(src2) | T(dst) | IMM(0xffff), DR(dst)); + SLJIT_ASSERT(dst == src2); + return SLJIT_SUCCESS; + case SLJIT_MOV_S16: SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM)); if ((flags & (REG_DEST | REG2_SOURCE)) == (REG_DEST | REG2_SOURCE)) { - if (op == SLJIT_MOV_S16) { - FAIL_IF(push_inst(compiler, DSLL32 | T(src2) | D(dst) | SH_IMM(16), DR(dst))); - return push_inst(compiler, DSRA32 | T(dst) | D(dst) | SH_IMM(16), DR(dst)); - } - return push_inst(compiler, ANDI | S(src2) | T(dst) | IMM(0xffff), DR(dst)); - } - else { - SLJIT_ASSERT(dst == src2); +#if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 1) + if (op & SLJIT_32) + return push_inst(compiler, SEH | T(src2) | D(dst), DR(dst)); +#endif /* SLJIT_MIPS_REV >= 1 */ + FAIL_IF(push_inst(compiler, DSLL32 | T(src2) | D(dst) | SH_IMM(16), DR(dst))); + return push_inst(compiler, DSRA32 | T(dst) | D(dst) | SH_IMM(16), DR(dst)); } + SLJIT_ASSERT(dst == src2); return SLJIT_SUCCESS; case SLJIT_MOV_U32: - SLJIT_ASSERT(!(op & SLJIT_I32_OP)); - FAIL_IF(push_inst(compiler, DSLL32 | T(src2) | D(dst) | SH_IMM(0), DR(dst))); - return push_inst(compiler, DSRL32 | T(dst) | D(dst) | SH_IMM(0), DR(dst)); + SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM) && !(op & SLJIT_32)); + if ((flags & (REG_DEST | REG2_SOURCE)) == (REG_DEST | REG2_SOURCE)) { +#if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 2) + if (dst == src2) + return push_inst(compiler, DINSU | T(src2) | SA(0) | (31 << 11) | (0 << 11), DR(dst)); +#endif /* SLJIT_MIPS_REV >= 2 */ + FAIL_IF(push_inst(compiler, DSLL32 | T(src2) | D(dst) | SH_IMM(0), DR(dst))); + return push_inst(compiler, DSRL32 | T(dst) | D(dst) | SH_IMM(0), DR(dst)); + } + SLJIT_ASSERT(dst == src2); + return SLJIT_SUCCESS; case SLJIT_MOV_S32: - SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM)); - return push_inst(compiler, SLL | T(src2) | D(dst) | SH_IMM(0), DR(dst)); + SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM) && !(op & SLJIT_32)); + if ((flags & (REG_DEST | REG2_SOURCE)) == (REG_DEST | REG2_SOURCE)) { + return push_inst(compiler, SLL | T(src2) | D(dst) | SH_IMM(0), DR(dst)); + } + SLJIT_ASSERT(dst == src2); + return SLJIT_SUCCESS; case SLJIT_NOT: SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM)); @@ -234,7 +255,7 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl FAIL_IF(push_inst(compiler, SELECT_OP(DADDU, ADDU) | S(src2) | TA(0) | D(TMP_REG1), DR(TMP_REG1))); /* Check zero. */ FAIL_IF(push_inst(compiler, BEQ | S(TMP_REG1) | TA(0) | IMM(5), UNMOVABLE_INS)); - FAIL_IF(push_inst(compiler, ORI | SA(0) | T(dst) | IMM((op & SLJIT_I32_OP) ? 32 : 64), UNMOVABLE_INS)); + FAIL_IF(push_inst(compiler, ORI | SA(0) | T(dst) | IMM((op & SLJIT_32) ? 32 : 64), UNMOVABLE_INS)); FAIL_IF(push_inst(compiler, SELECT_OP(DADDIU, ADDIU) | SA(0) | T(dst) | IMM(-1), DR(dst))); /* Loop for searching the highest bit. */ FAIL_IF(push_inst(compiler, SELECT_OP(DADDIU, ADDIU) | S(dst) | T(dst) | IMM(1), DR(dst))); @@ -462,7 +483,7 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl #if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 6) return push_inst(compiler, SELECT_OP(DMUL, MUL) | S(src1) | T(src2) | D(dst), DR(dst)); #elif (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 1) - if (op & SLJIT_I32_OP) + if (op & SLJIT_32) return push_inst(compiler, MUL | S(src1) | T(src2) | D(dst), DR(dst)); FAIL_IF(push_inst(compiler, DMULT | S(src1) | T(src2), MOVABLE_INS)); return push_inst(compiler, MFLO | D(dst), DR(dst)); @@ -528,10 +549,10 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_set_jump_addr(sljit_uw addr, sljit_uw new_ta SLJIT_UNUSED_ARG(executable_offset); SLJIT_UPDATE_WX_FLAGS(inst, inst + 6, 0); - inst[0] = (inst[0] & 0xffff0000) | ((new_target >> 48) & 0xffff); - inst[1] = (inst[1] & 0xffff0000) | ((new_target >> 32) & 0xffff); - inst[3] = (inst[3] & 0xffff0000) | ((new_target >> 16) & 0xffff); - inst[5] = (inst[5] & 0xffff0000) | (new_target & 0xffff); + inst[0] = (inst[0] & 0xffff0000) | ((sljit_ins)(new_target >> 48) & 0xffff); + inst[1] = (inst[1] & 0xffff0000) | ((sljit_ins)(new_target >> 32) & 0xffff); + inst[3] = (inst[3] & 0xffff0000) | ((sljit_ins)(new_target >> 16) & 0xffff); + inst[5] = (inst[5] & 0xffff0000) | ((sljit_ins)new_target & 0xffff); SLJIT_UPDATE_WX_FLAGS(inst, inst + 6, 1); inst = (sljit_ins *)SLJIT_ADD_EXEC_OFFSET(inst, executable_offset); SLJIT_CACHE_FLUSH(inst, inst + 6); @@ -539,7 +560,7 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_set_jump_addr(sljit_uw addr, sljit_uw new_ta SLJIT_API_FUNC_ATTRIBUTE void sljit_set_const(sljit_uw addr, sljit_sw new_constant, sljit_sw executable_offset) { - sljit_set_jump_addr(addr, new_constant, executable_offset); + sljit_set_jump_addr(addr, (sljit_uw)new_constant, executable_offset); } static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_types, sljit_ins *ins_ptr) @@ -548,19 +569,19 @@ static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_t sljit_s32 word_arg_count = 0; sljit_s32 float_arg_count = 0; sljit_s32 types = 0; - sljit_ins prev_ins = NOP; + sljit_ins prev_ins = *ins_ptr; sljit_ins ins = NOP; SLJIT_ASSERT(reg_map[TMP_REG1] == 4 && freg_map[TMP_FREG1] == 12); - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; while (arg_types) { - types = (types << SLJIT_DEF_SHIFT) | (arg_types & SLJIT_DEF_MASK); + types = (types << SLJIT_ARG_SHIFT) | (arg_types & SLJIT_ARG_MASK); - switch (arg_types & SLJIT_DEF_MASK) { - case SLJIT_ARG_TYPE_F32: + switch (arg_types & SLJIT_ARG_MASK) { case SLJIT_ARG_TYPE_F64: + case SLJIT_ARG_TYPE_F32: arg_count++; float_arg_count++; break; @@ -570,24 +591,24 @@ static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_t break; } - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; } while (types) { - switch (types & SLJIT_DEF_MASK) { - case SLJIT_ARG_TYPE_F32: + switch (types & SLJIT_ARG_MASK) { + case SLJIT_ARG_TYPE_F64: if (arg_count != float_arg_count) - ins = MOV_S | FMT_S | FS(float_arg_count) | FD(arg_count); + ins = MOV_S | FMT_D | FS(float_arg_count) | FD(arg_count); else if (arg_count == 1) - ins = MOV_S | FMT_S | FS(SLJIT_FR0) | FD(TMP_FREG1); + ins = MOV_S | FMT_D | FS(SLJIT_FR0) | FD(TMP_FREG1); arg_count--; float_arg_count--; break; - case SLJIT_ARG_TYPE_F64: + case SLJIT_ARG_TYPE_F32: if (arg_count != float_arg_count) - ins = MOV_S | FMT_D | FS(float_arg_count) | FD(arg_count); + ins = MOV_S | FMT_S | FS(float_arg_count) | FD(arg_count); else if (arg_count == 1) - ins = MOV_S | FMT_D | FS(SLJIT_FR0) | FD(TMP_FREG1); + ins = MOV_S | FMT_S | FS(SLJIT_FR0) | FD(TMP_FREG1); arg_count--; float_arg_count--; break; @@ -608,7 +629,7 @@ static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_t ins = NOP; } - types >>= SLJIT_DEF_SHIFT; + types >>= SLJIT_ARG_SHIFT; } *ins_ptr = prev_ins; @@ -620,7 +641,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_call(struct sljit_compile sljit_s32 arg_types) { struct sljit_jump *jump; - sljit_ins ins; + sljit_ins ins = NOP; CHECK_ERROR_PTR(); CHECK_PTR(check_sljit_emit_call(compiler, type, arg_types)); @@ -628,7 +649,9 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_call(struct sljit_compile jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump)); PTR_FAIL_IF(!jump); set_jump(jump, compiler, type & SLJIT_REWRITABLE_JUMP); - type &= 0xff; + + if (type & SLJIT_CALL_RETURN) + PTR_FAIL_IF(emit_stack_frame_release(compiler, 0, &ins)); PTR_FAIL_IF(call_with_args(compiler, arg_types, &ins)); @@ -636,8 +659,12 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_call(struct sljit_compile PTR_FAIL_IF(emit_const(compiler, PIC_ADDR_REG, 0)); - jump->flags |= IS_JAL | IS_CALL; - PTR_FAIL_IF(push_inst(compiler, JALR | S(PIC_ADDR_REG) | DA(RETURN_ADDR_REG), UNMOVABLE_INS)); + if (!(type & SLJIT_CALL_RETURN)) { + jump->flags |= IS_JAL | IS_CALL; + PTR_FAIL_IF(push_inst(compiler, JALR | S(PIC_ADDR_REG) | DA(RETURN_ADDR_REG), UNMOVABLE_INS)); + } else + PTR_FAIL_IF(push_inst(compiler, JR | S(PIC_ADDR_REG), UNMOVABLE_INS)); + jump->addr = compiler->size; PTR_FAIL_IF(push_inst(compiler, ins, UNMOVABLE_INS)); @@ -648,7 +675,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_icall(struct sljit_compiler *compi sljit_s32 arg_types, sljit_s32 src, sljit_sw srcw) { - sljit_ins ins; + sljit_ins ins = NOP; CHECK_ERROR(); CHECK(check_sljit_emit_icall(compiler, type, arg_types, src, srcw)); @@ -664,9 +691,15 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_icall(struct sljit_compiler *compi FAIL_IF(emit_op_mem(compiler, WORD_DATA | LOAD_DATA, DR(PIC_ADDR_REG), src, srcw)); } + if (type & SLJIT_CALL_RETURN) + FAIL_IF(emit_stack_frame_release(compiler, 0, &ins)); + FAIL_IF(call_with_args(compiler, arg_types, &ins)); /* Register input. */ - FAIL_IF(push_inst(compiler, JALR | S(PIC_ADDR_REG) | DA(RETURN_ADDR_REG), UNMOVABLE_INS)); + if (!(type & SLJIT_CALL_RETURN)) + FAIL_IF(push_inst(compiler, JALR | S(PIC_ADDR_REG) | DA(RETURN_ADDR_REG), UNMOVABLE_INS)); + else + FAIL_IF(push_inst(compiler, JR | S(PIC_ADDR_REG), UNMOVABLE_INS)); return push_inst(compiler, ins, UNMOVABLE_INS); } diff --git a/thirdparty/pcre2/src/sljit/sljitNativeMIPS_common.c b/thirdparty/pcre2/src/sljit/sljitNativeMIPS_common.c index fd747695a7..be5cb22a23 100644 --- a/thirdparty/pcre2/src/sljit/sljitNativeMIPS_common.c +++ b/thirdparty/pcre2/src/sljit/sljitNativeMIPS_common.c @@ -86,13 +86,13 @@ static const sljit_u8 reg_map[SLJIT_NUMBER_OF_REGISTERS + 5] = { #if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 4] = { - 0, 0, 14, 2, 4, 6, 8, 12, 10, 16 + 0, 0, 14, 2, 4, 6, 8, 18, 30, 28, 26, 24, 22, 20, 12, 10, 16 }; #else static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 4] = { - 0, 0, 13, 14, 15, 16, 17, 12, 18, 10 + 0, 0, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 1, 2, 3, 4, 5, 6, 7, 8, 9, 31, 30, 29, 28, 27, 26, 25, 24, 12, 11, 10 }; #endif @@ -101,23 +101,23 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 4] = { /* Instrucion forms */ /* --------------------------------------------------------------------- */ -#define S(s) (reg_map[s] << 21) -#define T(t) (reg_map[t] << 16) -#define D(d) (reg_map[d] << 11) -#define FT(t) (freg_map[t] << 16) -#define FS(s) (freg_map[s] << 11) -#define FD(d) (freg_map[d] << 6) +#define S(s) ((sljit_ins)reg_map[s] << 21) +#define T(t) ((sljit_ins)reg_map[t] << 16) +#define D(d) ((sljit_ins)reg_map[d] << 11) +#define FT(t) ((sljit_ins)freg_map[t] << 16) +#define FS(s) ((sljit_ins)freg_map[s] << 11) +#define FD(d) ((sljit_ins)freg_map[d] << 6) /* Absolute registers. */ -#define SA(s) ((s) << 21) -#define TA(t) ((t) << 16) -#define DA(d) ((d) << 11) -#define IMM(imm) ((imm) & 0xffff) -#define SH_IMM(imm) ((imm) << 6) +#define SA(s) ((sljit_ins)(s) << 21) +#define TA(t) ((sljit_ins)(t) << 16) +#define DA(d) ((sljit_ins)(d) << 11) +#define IMM(imm) ((sljit_ins)(imm) & 0xffff) +#define SH_IMM(imm) ((sljit_ins)(imm) << 6) #define DR(dr) (reg_map[dr]) #define FR(dr) (freg_map[dr]) -#define HI(opcode) ((opcode) << 26) -#define LO(opcode) (opcode) +#define HI(opcode) ((sljit_ins)(opcode) << 26) +#define LO(opcode) ((sljit_ins)(opcode)) #if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 6) /* CMP.cond.fmt */ /* S = (20 << 21) D = (21 << 21) */ @@ -186,6 +186,7 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 4] = { #define DMULTU (HI(0) | LO(29)) #endif /* SLJIT_MIPS_REV >= 6 */ #define DIV_S (HI(17) | FMT_S | LO(3)) +#define DINSU (HI(31) | LO(6)) #define DSLL (HI(0) | LO(56)) #define DSLL32 (HI(0) | LO(60)) #define DSLLV (HI(0) | LO(20)) @@ -205,8 +206,10 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 4] = { #define JR (HI(0) | LO(8)) #endif /* SLJIT_MIPS_REV >= 6 */ #define LD (HI(55)) +#define LDC1 (HI(53)) #define LUI (HI(15)) #define LW (HI(35)) +#define LWC1 (HI(49)) #define MFC1 (HI(17)) #if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 6) #define MOD (HI(0) | (3 << 6) | LO(26)) @@ -292,7 +295,8 @@ static sljit_s32 push_inst(struct sljit_compiler *compiler, sljit_ins ins, sljit { sljit_ins *ptr = (sljit_ins*)ensure_buf(compiler, sizeof(sljit_ins)); SLJIT_ASSERT(delay_slot == MOVABLE_INS || delay_slot >= UNMOVABLE_INS - || delay_slot == ((ins >> 11) & 0x1f) || delay_slot == ((ins >> 16) & 0x1f)); + || (sljit_ins)delay_slot == ((ins >> 11) & 0x1f) + || (sljit_ins)delay_slot == ((ins >> 16) & 0x1f)); FAIL_IF(!ptr); *ptr = ins; compiler->size++; @@ -300,7 +304,7 @@ static sljit_s32 push_inst(struct sljit_compiler *compiler, sljit_ins ins, sljit return SLJIT_SUCCESS; } -static SLJIT_INLINE sljit_ins invert_branch(sljit_s32 flags) +static SLJIT_INLINE sljit_ins invert_branch(sljit_uw flags) { if (flags & IS_BIT26_COND) return (1 << 26); @@ -371,7 +375,7 @@ static SLJIT_INLINE sljit_ins* detect_jump_type(struct sljit_jump *jump, sljit_i inst[1] = NOP; return inst + 1; } - inst[0] = inst[0] ^ invert_branch(jump->flags); + inst[0] ^= invert_branch(jump->flags); inst[1] = NOP; jump->addr -= sizeof(sljit_ins); return inst + 1; @@ -379,7 +383,7 @@ static SLJIT_INLINE sljit_ins* detect_jump_type(struct sljit_jump *jump, sljit_i } if (jump->flags & IS_COND) { - if ((jump->flags & IS_MOVABLE) && (target_addr & ~0xfffffff) == ((jump->addr + 2 * sizeof(sljit_ins)) & ~0xfffffff)) { + if ((jump->flags & IS_MOVABLE) && (target_addr & ~(sljit_uw)0xfffffff) == ((jump->addr + 2 * sizeof(sljit_ins)) & ~(sljit_uw)0xfffffff)) { jump->flags |= PATCH_J; saved_inst = inst[0]; inst[0] = inst[-1]; @@ -388,7 +392,7 @@ static SLJIT_INLINE sljit_ins* detect_jump_type(struct sljit_jump *jump, sljit_i inst[2] = NOP; return inst + 2; } - else if ((target_addr & ~0xfffffff) == ((jump->addr + 3 * sizeof(sljit_ins)) & ~0xfffffff)) { + else if ((target_addr & ~(sljit_uw)0xfffffff) == ((jump->addr + 3 * sizeof(sljit_ins)) & ~(sljit_uw)0xfffffff)) { jump->flags |= PATCH_J; inst[0] = (inst[0] & 0xffff0000) | 3; inst[1] = NOP; @@ -400,7 +404,7 @@ static SLJIT_INLINE sljit_ins* detect_jump_type(struct sljit_jump *jump, sljit_i } else { /* J instuctions. */ - if ((jump->flags & IS_MOVABLE) && (target_addr & ~0xfffffff) == (jump->addr & ~0xfffffff)) { + if ((jump->flags & IS_MOVABLE) && (target_addr & ~(sljit_uw)0xfffffff) == (jump->addr & ~(sljit_uw)0xfffffff)) { jump->flags |= PATCH_J; inst[0] = inst[-1]; inst[-1] = (jump->flags & IS_JAL) ? JAL : J; @@ -408,7 +412,7 @@ static SLJIT_INLINE sljit_ins* detect_jump_type(struct sljit_jump *jump, sljit_i return inst; } - if ((target_addr & ~0xfffffff) == ((jump->addr + sizeof(sljit_ins)) & ~0xfffffff)) { + if ((target_addr & ~(sljit_uw)0xfffffff) == ((jump->addr + sizeof(sljit_ins)) & ~(sljit_uw)0xfffffff)) { jump->flags |= PATCH_J; inst[0] = (jump->flags & IS_JAL) ? JAL : J; inst[1] = NOP; @@ -472,7 +476,7 @@ static SLJIT_INLINE void put_label_set(struct sljit_put_label *put_label) { sljit_uw addr = put_label->label->addr; sljit_ins *inst = (sljit_ins *)put_label->addr; - sljit_s32 reg = *inst; + sljit_u32 reg = *inst; if (put_label->flags == 0) { SLJIT_ASSERT(addr < 0x80000000l); @@ -548,7 +552,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil /* These structures are ordered by their address. */ if (label && label->size == word_count) { label->addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset); - label->size = code_ptr - code; + label->size = (sljit_uw)(code_ptr - code); label = label->next; } if (jump && jump->addr == word_count) { @@ -584,7 +588,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil if (label && label->size == word_count) { label->addr = (sljit_uw)code_ptr; - label->size = code_ptr - code; + label->size = (sljit_uw)(code_ptr - code); label = label->next; } @@ -601,39 +605,46 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil buf_ptr = (sljit_ins *)jump->addr; if (jump->flags & PATCH_B) { - addr = (sljit_sw)(addr - ((sljit_uw)SLJIT_ADD_EXEC_OFFSET(buf_ptr, executable_offset) + sizeof(sljit_ins))) >> 2; + addr = (sljit_uw)((sljit_sw)(addr - (sljit_uw)SLJIT_ADD_EXEC_OFFSET(buf_ptr, executable_offset) - sizeof(sljit_ins)) >> 2); SLJIT_ASSERT((sljit_sw)addr <= SIMM_MAX && (sljit_sw)addr >= SIMM_MIN); - buf_ptr[0] = (buf_ptr[0] & 0xffff0000) | (addr & 0xffff); + buf_ptr[0] = (buf_ptr[0] & 0xffff0000) | ((sljit_ins)addr & 0xffff); break; } if (jump->flags & PATCH_J) { - SLJIT_ASSERT((addr & ~0xfffffff) == (((sljit_uw)SLJIT_ADD_EXEC_OFFSET(buf_ptr, executable_offset) + sizeof(sljit_ins)) & ~0xfffffff)); - buf_ptr[0] |= (addr >> 2) & 0x03ffffff; + SLJIT_ASSERT((addr & ~(sljit_uw)0xfffffff) + == (((sljit_uw)SLJIT_ADD_EXEC_OFFSET(buf_ptr, executable_offset) + sizeof(sljit_ins)) & ~(sljit_uw)0xfffffff)); + buf_ptr[0] |= (sljit_ins)(addr >> 2) & 0x03ffffff; break; } /* Set the fields of immediate loads. */ #if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) - buf_ptr[0] = (buf_ptr[0] & 0xffff0000) | ((addr >> 16) & 0xffff); - buf_ptr[1] = (buf_ptr[1] & 0xffff0000) | (addr & 0xffff); + SLJIT_ASSERT(((buf_ptr[0] | buf_ptr[1]) & 0xffff) == 0); + buf_ptr[0] |= (sljit_ins)(addr >> 16) & 0xffff; + buf_ptr[1] |= (sljit_ins)addr & 0xffff; #else if (jump->flags & PATCH_ABS32) { SLJIT_ASSERT(addr <= 0x7fffffff); - buf_ptr[0] = (buf_ptr[0] & 0xffff0000) | ((addr >> 16) & 0xffff); - buf_ptr[1] = (buf_ptr[1] & 0xffff0000) | (addr & 0xffff); + SLJIT_ASSERT(((buf_ptr[0] | buf_ptr[1]) & 0xffff) == 0); + buf_ptr[0] |= (sljit_ins)(addr >> 16) & 0xffff; + buf_ptr[1] |= (sljit_ins)addr & 0xffff; + break; } - else if (jump->flags & PATCH_ABS48) { + + if (jump->flags & PATCH_ABS48) { SLJIT_ASSERT(addr <= 0x7fffffffffffl); - buf_ptr[0] = (buf_ptr[0] & 0xffff0000) | ((addr >> 32) & 0xffff); - buf_ptr[1] = (buf_ptr[1] & 0xffff0000) | ((addr >> 16) & 0xffff); - buf_ptr[3] = (buf_ptr[3] & 0xffff0000) | (addr & 0xffff); - } - else { - buf_ptr[0] = (buf_ptr[0] & 0xffff0000) | ((addr >> 48) & 0xffff); - buf_ptr[1] = (buf_ptr[1] & 0xffff0000) | ((addr >> 32) & 0xffff); - buf_ptr[3] = (buf_ptr[3] & 0xffff0000) | ((addr >> 16) & 0xffff); - buf_ptr[5] = (buf_ptr[5] & 0xffff0000) | (addr & 0xffff); + SLJIT_ASSERT(((buf_ptr[0] | buf_ptr[1] | buf_ptr[3]) & 0xffff) == 0); + buf_ptr[0] |= (sljit_ins)(addr >> 32) & 0xffff; + buf_ptr[1] |= (sljit_ins)(addr >> 16) & 0xffff; + buf_ptr[3] |= (sljit_ins)addr & 0xffff; + break; } + + SLJIT_ASSERT(((buf_ptr[0] | buf_ptr[1] | buf_ptr[3] | buf_ptr[5]) & 0xffff) == 0); + buf_ptr[0] |= (sljit_ins)(addr >> 48) & 0xffff; + buf_ptr[1] |= (sljit_ins)(addr >> 32) & 0xffff; + buf_ptr[3] |= (sljit_ins)(addr >> 16) & 0xffff; + buf_ptr[5] |= (sljit_ins)addr & 0xffff; #endif } while (0); jump = jump->next; @@ -656,7 +667,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil compiler->error = SLJIT_ERR_COMPILED; compiler->executable_offset = executable_offset; - compiler->executable_size = (code_ptr - code) * sizeof(sljit_ins); + compiler->executable_size = (sljit_uw)(code_ptr - code) * sizeof(sljit_ins); code = (sljit_ins *)SLJIT_ADD_EXEC_OFFSET(code, executable_offset); code_ptr = (sljit_ins *)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset); @@ -673,7 +684,9 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_has_cpu_feature(sljit_s32 feature_type) { +#if defined(__GNUC__) && !defined(SLJIT_IS_FPU_AVAILABLE) sljit_sw fir = 0; +#endif /* __GNUC__ && !SLJIT_IS_FPU_AVAILABLE */ switch (feature_type) { case SLJIT_HAS_FPU: @@ -696,7 +709,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_has_cpu_feature(sljit_s32 feature_type) #endif /* SLJIT_MIPS_REV >= 1 */ default: - return fir; + return 0; } } @@ -723,15 +736,16 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_has_cpu_feature(sljit_s32 feature_type) #define CUMULATIVE_OP 0x00080 #define LOGICAL_OP 0x00100 #define IMM_OP 0x00200 -#define SRC2_IMM 0x00400 +#define MOVE_OP 0x00400 +#define SRC2_IMM 0x00800 -#define UNUSED_DEST 0x00800 -#define REG_DEST 0x01000 -#define REG1_SOURCE 0x02000 -#define REG2_SOURCE 0x04000 -#define SLOW_SRC1 0x08000 -#define SLOW_SRC2 0x10000 -#define SLOW_DEST 0x20000 +#define UNUSED_DEST 0x01000 +#define REG_DEST 0x02000 +#define REG1_SOURCE 0x04000 +#define REG2_SOURCE 0x08000 +#define SLOW_SRC1 0x10000 +#define SLOW_SRC2 0x20000 +#define SLOW_DEST 0x40000 #if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) #define STACK_STORE SW @@ -741,7 +755,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_has_cpu_feature(sljit_s32 feature_type) #define STACK_LOAD LD #endif -static SLJIT_INLINE sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg_ar, sljit_s32 arg, sljit_sw argw); +static sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg_ar, sljit_s32 arg, sljit_sw argw); +static sljit_s32 emit_stack_frame_release(struct sljit_compiler *compiler, sljit_s32 frame_size, sljit_ins *ins_ptr); #if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) #include "sljitNativeMIPS_32.c" @@ -754,56 +769,195 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_enter(struct sljit_compiler *compi sljit_s32 fscratches, sljit_s32 fsaveds, sljit_s32 local_size) { sljit_ins base; - sljit_s32 args, i, tmp, offs; + sljit_s32 i, tmp, offset; + sljit_s32 arg_count, word_arg_count, saved_arg_count, float_arg_count; CHECK_ERROR(); CHECK(check_sljit_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size)); set_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size); - local_size += GET_SAVED_REGISTERS_SIZE(scratches, saveds, 1) + SLJIT_LOCALS_OFFSET; + local_size += GET_SAVED_REGISTERS_SIZE(scratches, saveds, 1); #if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) - local_size = (local_size + 15) & ~0xf; + if (fsaveds > 0 || fscratches >= SLJIT_FIRST_SAVED_FLOAT_REG) { + if ((local_size & SSIZE_OF(sw)) != 0) + local_size += SSIZE_OF(sw); + local_size += GET_SAVED_FLOAT_REGISTERS_SIZE(fscratches, fsaveds, sizeof(sljit_f64)); + } + + local_size = (local_size + SLJIT_LOCALS_OFFSET + 15) & ~0xf; #else - local_size = (local_size + 31) & ~0x1f; + local_size += GET_SAVED_FLOAT_REGISTERS_SIZE(fscratches, fsaveds, sizeof(sljit_f64)); + local_size = (local_size + SLJIT_LOCALS_OFFSET + 31) & ~0x1f; #endif compiler->local_size = local_size; - if (local_size <= SIMM_MAX) { +#if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) + tmp = arg_types >> SLJIT_ARG_SHIFT; + arg_count = 0; + offset = 0; + + while (tmp) { + offset = arg_count; + if ((tmp & SLJIT_ARG_MASK) == SLJIT_ARG_TYPE_F64) { + if ((arg_count & 0x1) != 0) + arg_count++; + arg_count++; + } + + arg_count++; + tmp >>= SLJIT_ARG_SHIFT; + } + + compiler->args_size = (sljit_uw)arg_count << 2; + offset = (offset >= 4) ? (offset << 2) : 0; +#else /* !SLJIT_CONFIG_MIPS_32 */ + offset = 0; +#endif /* SLJIT_CONFIG_MIPS_32 */ + + if (local_size + offset <= -SIMM_MIN) { /* Frequent case. */ FAIL_IF(push_inst(compiler, ADDIU_W | S(SLJIT_SP) | T(SLJIT_SP) | IMM(-local_size), DR(SLJIT_SP))); base = S(SLJIT_SP); - offs = local_size - (sljit_sw)sizeof(sljit_sw); - } - else { + offset = local_size - SSIZE_OF(sw); + } else { FAIL_IF(load_immediate(compiler, DR(OTHER_FLAG), local_size)); FAIL_IF(push_inst(compiler, ADDU_W | S(SLJIT_SP) | TA(0) | D(TMP_REG2), DR(TMP_REG2))); FAIL_IF(push_inst(compiler, SUBU_W | S(SLJIT_SP) | T(OTHER_FLAG) | D(SLJIT_SP), DR(SLJIT_SP))); base = S(TMP_REG2); + offset = -SSIZE_OF(sw); +#if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) local_size = 0; - offs = -(sljit_sw)sizeof(sljit_sw); +#endif } - FAIL_IF(push_inst(compiler, STACK_STORE | base | TA(RETURN_ADDR_REG) | IMM(offs), MOVABLE_INS)); + FAIL_IF(push_inst(compiler, STACK_STORE | base | TA(RETURN_ADDR_REG) | IMM(offset), MOVABLE_INS)); - tmp = saveds < SLJIT_NUMBER_OF_SAVED_REGISTERS ? (SLJIT_S0 + 1 - saveds) : SLJIT_FIRST_SAVED_REG; - for (i = SLJIT_S0; i >= tmp; i--) { - offs -= (sljit_s32)(sizeof(sljit_sw)); - FAIL_IF(push_inst(compiler, STACK_STORE | base | T(i) | IMM(offs), MOVABLE_INS)); + tmp = SLJIT_S0 - saveds; + for (i = SLJIT_S0; i > tmp; i--) { + offset -= SSIZE_OF(sw); + FAIL_IF(push_inst(compiler, STACK_STORE | base | T(i) | IMM(offset), MOVABLE_INS)); } for (i = scratches; i >= SLJIT_FIRST_SAVED_REG; i--) { - offs -= (sljit_s32)(sizeof(sljit_sw)); - FAIL_IF(push_inst(compiler, STACK_STORE | base | T(i) | IMM(offs), MOVABLE_INS)); + offset -= SSIZE_OF(sw); + FAIL_IF(push_inst(compiler, STACK_STORE | base | T(i) | IMM(offset), MOVABLE_INS)); + } + +#if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) + /* This alignment is valid because offset is not used after storing FPU regs. */ + if ((offset & SSIZE_OF(sw)) != 0) + offset -= SSIZE_OF(sw); +#endif + + tmp = SLJIT_FS0 - fsaveds; + for (i = SLJIT_FS0; i > tmp; i--) { + offset -= SSIZE_OF(f64); + FAIL_IF(push_inst(compiler, SDC1 | base | FT(i) | IMM(offset), MOVABLE_INS)); + } + + for (i = fscratches; i >= SLJIT_FIRST_SAVED_FLOAT_REG; i--) { + offset -= SSIZE_OF(f64); + FAIL_IF(push_inst(compiler, SDC1 | base | FT(i) | IMM(offset), MOVABLE_INS)); + } + + arg_types >>= SLJIT_ARG_SHIFT; + arg_count = 0; + word_arg_count = 0; + saved_arg_count = 0; + float_arg_count = 0; + +#if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) + /* The first maximum two floating point arguments are passed in floating point + registers if no integer argument precedes them. The first 16 byte data is + passed in four integer registers, the rest is placed onto the stack. + The floating point registers are also part of the first 16 byte data, so + their corresponding integer registers are not used when they are present. */ + + while (arg_types) { + switch (arg_types & SLJIT_ARG_MASK) { + case SLJIT_ARG_TYPE_F64: + float_arg_count++; + if ((arg_count & 0x1) != 0) + arg_count++; + + if (word_arg_count == 0 && float_arg_count <= 2) { + if (float_arg_count == 1) + FAIL_IF(push_inst(compiler, MOV_S | FMT_D | FS(TMP_FREG1) | FD(SLJIT_FR0), MOVABLE_INS)); + } else if (arg_count < 4) { + FAIL_IF(push_inst(compiler, MTC1 | TA(4 + arg_count) | FS(float_arg_count), MOVABLE_INS)); + FAIL_IF(push_inst(compiler, MTC1 | TA(5 + arg_count) | FS(float_arg_count) | (1 << 11), MOVABLE_INS)); + } else + FAIL_IF(push_inst(compiler, LDC1 | base | FT(float_arg_count) | IMM(local_size + (arg_count << 2)), MOVABLE_INS)); + arg_count++; + break; + case SLJIT_ARG_TYPE_F32: + float_arg_count++; + + if (word_arg_count == 0 && float_arg_count <= 2) { + if (float_arg_count == 1) + FAIL_IF(push_inst(compiler, MOV_S | FMT_S | FS(TMP_FREG1) | FD(SLJIT_FR0), MOVABLE_INS)); + } else if (arg_count < 4) + FAIL_IF(push_inst(compiler, MTC1 | TA(4 + arg_count) | FS(float_arg_count), MOVABLE_INS)); + else + FAIL_IF(push_inst(compiler, LWC1 | base | FT(float_arg_count) | IMM(local_size + (arg_count << 2)), MOVABLE_INS)); + break; + default: + word_arg_count++; + + if (!(arg_types & SLJIT_ARG_TYPE_SCRATCH_REG)) { + tmp = SLJIT_S0 - saved_arg_count; + saved_arg_count++; + } else if (word_arg_count != arg_count + 1 || arg_count == 0) + tmp = word_arg_count; + else + break; + + if (arg_count < 4) + FAIL_IF(push_inst(compiler, ADDU_W | SA(4 + arg_count) | TA(0) | D(tmp), DR(tmp))); + else + FAIL_IF(push_inst(compiler, LW | base | T(tmp) | IMM(local_size + (arg_count << 2)), DR(tmp))); + break; + } + arg_count++; + arg_types >>= SLJIT_ARG_SHIFT; } - args = get_arg_count(arg_types); + SLJIT_ASSERT(compiler->args_size == (sljit_uw)arg_count << 2); +#else /* !SLJIT_CONFIG_MIPS_32 */ + while (arg_types) { + arg_count++; + switch (arg_types & SLJIT_ARG_MASK) { + case SLJIT_ARG_TYPE_F64: + float_arg_count++; + if (arg_count != float_arg_count) + FAIL_IF(push_inst(compiler, MOV_S | FMT_D | FS(arg_count) | FD(float_arg_count), MOVABLE_INS)); + else if (arg_count == 1) + FAIL_IF(push_inst(compiler, MOV_S | FMT_D | FS(TMP_FREG1) | FD(SLJIT_FR0), MOVABLE_INS)); + break; + case SLJIT_ARG_TYPE_F32: + float_arg_count++; + if (arg_count != float_arg_count) + FAIL_IF(push_inst(compiler, MOV_S | FMT_S | FS(arg_count) | FD(float_arg_count), MOVABLE_INS)); + else if (arg_count == 1) + FAIL_IF(push_inst(compiler, MOV_S | FMT_S | FS(TMP_FREG1) | FD(SLJIT_FR0), MOVABLE_INS)); + break; + default: + word_arg_count++; + + if (!(arg_types & SLJIT_ARG_TYPE_SCRATCH_REG)) { + tmp = SLJIT_S0 - saved_arg_count; + saved_arg_count++; + } else if (word_arg_count != arg_count || word_arg_count <= 1) + tmp = word_arg_count; + else + break; - if (args >= 1) - FAIL_IF(push_inst(compiler, ADDU_W | SA(4) | TA(0) | D(SLJIT_S0), DR(SLJIT_S0))); - if (args >= 2) - FAIL_IF(push_inst(compiler, ADDU_W | SA(5) | TA(0) | D(SLJIT_S1), DR(SLJIT_S1))); - if (args >= 3) - FAIL_IF(push_inst(compiler, ADDU_W | SA(6) | TA(0) | D(SLJIT_S2), DR(SLJIT_S2))); + FAIL_IF(push_inst(compiler, ADDU_W | SA(3 + arg_count) | TA(0) | D(tmp), DR(tmp))); + break; + } + arg_types >>= SLJIT_ARG_SHIFT; + } +#endif /* SLJIT_CONFIG_MIPS_32 */ return SLJIT_SUCCESS; } @@ -816,57 +970,110 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_set_context(struct sljit_compiler *comp CHECK(check_sljit_set_context(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size)); set_set_context(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size); - local_size += GET_SAVED_REGISTERS_SIZE(scratches, saveds, 1) + SLJIT_LOCALS_OFFSET; + local_size += GET_SAVED_REGISTERS_SIZE(scratches, saveds, 1); #if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) - compiler->local_size = (local_size + 15) & ~0xf; + if (fsaveds > 0 || fscratches >= SLJIT_FIRST_SAVED_FLOAT_REG) { + if ((local_size & SSIZE_OF(sw)) != 0) + local_size += SSIZE_OF(sw); + local_size += GET_SAVED_FLOAT_REGISTERS_SIZE(fscratches, fsaveds, sizeof(sljit_f64)); + } + + compiler->local_size = (local_size + SLJIT_LOCALS_OFFSET + 15) & ~0xf; #else - compiler->local_size = (local_size + 31) & ~0x1f; + local_size += GET_SAVED_FLOAT_REGISTERS_SIZE(fscratches, fsaveds, sizeof(sljit_f64)); + compiler->local_size = (local_size + SLJIT_LOCALS_OFFSET + 31) & ~0x1f; #endif return SLJIT_SUCCESS; } -SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src, sljit_sw srcw) +static sljit_s32 emit_stack_frame_release(struct sljit_compiler *compiler, sljit_s32 frame_size, sljit_ins *ins_ptr) { - sljit_s32 local_size, i, tmp, offs; - sljit_ins base; + sljit_s32 local_size, i, tmp, offset; + sljit_s32 scratches = compiler->scratches; + sljit_s32 saveds = compiler->saveds; + sljit_s32 fsaveds = compiler->fsaveds; + sljit_s32 fscratches = compiler->fscratches; - CHECK_ERROR(); - CHECK(check_sljit_emit_return(compiler, op, src, srcw)); + local_size = compiler->local_size; - FAIL_IF(emit_mov_before_return(compiler, op, src, srcw)); + tmp = GET_SAVED_REGISTERS_SIZE(scratches, saveds, 1); +#if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) + if (fsaveds > 0 || fscratches >= SLJIT_FIRST_SAVED_FLOAT_REG) { + if ((tmp & SSIZE_OF(sw)) != 0) + tmp += SSIZE_OF(sw); + tmp += GET_SAVED_FLOAT_REGISTERS_SIZE(fscratches, fsaveds, sizeof(sljit_f64)); + } +#else + tmp += GET_SAVED_FLOAT_REGISTERS_SIZE(fscratches, fsaveds, sizeof(sljit_f64)); +#endif - local_size = compiler->local_size; - if (local_size <= SIMM_MAX) - base = S(SLJIT_SP); - else { - FAIL_IF(load_immediate(compiler, DR(TMP_REG1), local_size)); - FAIL_IF(push_inst(compiler, ADDU_W | S(SLJIT_SP) | T(TMP_REG1) | D(TMP_REG1), DR(TMP_REG1))); - base = S(TMP_REG1); - local_size = 0; + if (local_size <= SIMM_MAX) { + if (local_size < frame_size) { + FAIL_IF(push_inst(compiler, ADDIU_W | S(SLJIT_SP) | T(SLJIT_SP) | IMM(local_size - frame_size), DR(SLJIT_SP))); + local_size = frame_size; + } + } else { + if (tmp < frame_size) + tmp = frame_size; + + FAIL_IF(load_immediate(compiler, DR(TMP_REG1), local_size - tmp)); + FAIL_IF(push_inst(compiler, ADDU_W | S(SLJIT_SP) | T(TMP_REG1) | D(SLJIT_SP), DR(SLJIT_SP))); + local_size = tmp; } - FAIL_IF(push_inst(compiler, STACK_LOAD | base | TA(RETURN_ADDR_REG) | IMM(local_size - (sljit_s32)sizeof(sljit_sw)), RETURN_ADDR_REG)); - offs = local_size - (sljit_s32)GET_SAVED_REGISTERS_SIZE(compiler->scratches, compiler->saveds, 1); + SLJIT_ASSERT(local_size >= frame_size); + + offset = local_size - SSIZE_OF(sw); + if (frame_size == 0) + FAIL_IF(push_inst(compiler, STACK_LOAD | S(SLJIT_SP) | TA(RETURN_ADDR_REG) | IMM(offset), RETURN_ADDR_REG)); + + tmp = SLJIT_S0 - saveds; + for (i = SLJIT_S0; i > tmp; i--) { + offset -= SSIZE_OF(sw); + FAIL_IF(push_inst(compiler, STACK_LOAD | S(SLJIT_SP) | T(i) | IMM(offset), MOVABLE_INS)); + } - tmp = compiler->scratches; - for (i = SLJIT_FIRST_SAVED_REG; i <= tmp; i++) { - FAIL_IF(push_inst(compiler, STACK_LOAD | base | T(i) | IMM(offs), DR(i))); - offs += (sljit_s32)(sizeof(sljit_sw)); + for (i = scratches; i >= SLJIT_FIRST_SAVED_REG; i--) { + offset -= SSIZE_OF(sw); + FAIL_IF(push_inst(compiler, STACK_LOAD | S(SLJIT_SP) | T(i) | IMM(offset), MOVABLE_INS)); } - tmp = compiler->saveds < SLJIT_NUMBER_OF_SAVED_REGISTERS ? (SLJIT_S0 + 1 - compiler->saveds) : SLJIT_FIRST_SAVED_REG; - for (i = tmp; i <= SLJIT_S0; i++) { - FAIL_IF(push_inst(compiler, STACK_LOAD | base | T(i) | IMM(offs), DR(i))); - offs += (sljit_s32)(sizeof(sljit_sw)); +#if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) + /* This alignment is valid because offset is not used after storing FPU regs. */ + if ((offset & SSIZE_OF(sw)) != 0) + offset -= SSIZE_OF(sw); +#endif + + tmp = SLJIT_FS0 - fsaveds; + for (i = SLJIT_FS0; i > tmp; i--) { + offset -= SSIZE_OF(f64); + FAIL_IF(push_inst(compiler, LDC1 | S(SLJIT_SP) | FT(i) | IMM(offset), MOVABLE_INS)); } - SLJIT_ASSERT(offs == local_size - (sljit_sw)(sizeof(sljit_sw))); + for (i = fscratches; i >= SLJIT_FIRST_SAVED_FLOAT_REG; i--) { + offset -= SSIZE_OF(f64); + FAIL_IF(push_inst(compiler, LDC1 | S(SLJIT_SP) | FT(i) | IMM(offset), MOVABLE_INS)); + } - FAIL_IF(push_inst(compiler, JR | SA(RETURN_ADDR_REG), UNMOVABLE_INS)); - if (compiler->local_size <= SIMM_MAX) - return push_inst(compiler, ADDIU_W | S(SLJIT_SP) | T(SLJIT_SP) | IMM(compiler->local_size), UNMOVABLE_INS); + if (local_size > frame_size) + *ins_ptr = ADDIU_W | S(SLJIT_SP) | T(SLJIT_SP) | IMM(local_size - frame_size); else - return push_inst(compiler, ADDU_W | S(TMP_REG1) | TA(0) | D(SLJIT_SP), UNMOVABLE_INS); + *ins_ptr = NOP; + + return SLJIT_SUCCESS; +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return_void(struct sljit_compiler *compiler) +{ + sljit_ins ins; + + CHECK_ERROR(); + CHECK(check_sljit_emit_return_void(compiler)); + + emit_stack_frame_release(compiler, 0, &ins); + + FAIL_IF(push_inst(compiler, JR | SA(RETURN_ADDR_REG), UNMOVABLE_INS)); + return push_inst(compiler, ins, UNMOVABLE_INS); } #undef STACK_STORE @@ -1041,7 +1248,7 @@ static sljit_s32 getput_arg(struct sljit_compiler *compiler, sljit_s32 flags, sl return push_inst(compiler, data_transfer_insts[flags & MEM_MASK] | SA(tmp_ar) | TA(reg_ar), delay_slot); } -static SLJIT_INLINE sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg_ar, sljit_s32 arg, sljit_sw argw) +static sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg_ar, sljit_s32 arg, sljit_sw argw) { sljit_s32 tmp_ar, base, delay_slot; @@ -1104,14 +1311,14 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3 compiler->cache_argw = 0; } - if (SLJIT_UNLIKELY(dst == SLJIT_UNUSED)) { + if (dst == TMP_REG2) { SLJIT_ASSERT(HAS_FLAGS(op)); flags |= UNUSED_DEST; } else if (FAST_IS_REG(dst)) { dst_r = dst; flags |= REG_DEST; - if (op >= SLJIT_MOV && op <= SLJIT_MOV_P) + if (flags & MOVE_OP) sugg_src2_r = dst_r; } else if ((dst & SLJIT_MEM) && !getput_arg_fast(compiler, flags | ARG_TEST, DR(TMP_REG1), dst, dstw)) @@ -1165,8 +1372,8 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3 if (FAST_IS_REG(src2)) { src2_r = src2; flags |= REG2_SOURCE; - if (!(flags & REG_DEST) && op >= SLJIT_MOV && op <= SLJIT_MOV_P) - dst_r = src2_r; + if ((flags & (REG_DEST | MOVE_OP)) == MOVE_OP) + dst_r = (sljit_s32)src2_r; } else if (src2 & SLJIT_IMM) { if (!(flags & SRC2_IMM)) { @@ -1176,8 +1383,12 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3 } else { src2_r = 0; - if ((op >= SLJIT_MOV && op <= SLJIT_MOV_P) && (dst & SLJIT_MEM)) - dst_r = 0; + if (flags & MOVE_OP) { + if (dst & SLJIT_MEM) + dst_r = 0; + else + op = SLJIT_MOV; + } } } } @@ -1221,7 +1432,7 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3 SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compiler, sljit_s32 op) { #if (defined SLJIT_CONFIG_MIPS_64 && SLJIT_CONFIG_MIPS_64) - sljit_s32 int_op = op & SLJIT_I32_OP; + sljit_s32 int_op = op & SLJIT_32; #endif CHECK_ERROR(); @@ -1326,11 +1537,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile sljit_s32 dst, sljit_sw dstw, sljit_s32 src, sljit_sw srcw) { -#if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) -# define flags 0 -#else sljit_s32 flags = 0; -#endif CHECK_ERROR(); CHECK(check_sljit_emit_op1(compiler, op, dst, dstw, src, srcw)); @@ -1338,58 +1545,50 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile ADJUST_LOCAL_OFFSET(src, srcw); #if (defined SLJIT_CONFIG_MIPS_64 && SLJIT_CONFIG_MIPS_64) - if ((op & SLJIT_I32_OP) && GET_OPCODE(op) >= SLJIT_NOT) - flags |= INT_DATA | SIGNED_DATA; + if (op & SLJIT_32) + flags = INT_DATA | SIGNED_DATA; #endif switch (GET_OPCODE(op)) { case SLJIT_MOV: +#if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) + case SLJIT_MOV_U32: + case SLJIT_MOV_S32: + case SLJIT_MOV32: +#endif case SLJIT_MOV_P: - return emit_op(compiler, SLJIT_MOV, WORD_DATA, dst, dstw, TMP_REG1, 0, src, srcw); + return emit_op(compiler, SLJIT_MOV, WORD_DATA | MOVE_OP, dst, dstw, TMP_REG1, 0, src, srcw); +#if (defined SLJIT_CONFIG_MIPS_64 && SLJIT_CONFIG_MIPS_64) case SLJIT_MOV_U32: -#if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) - return emit_op(compiler, SLJIT_MOV_U32, INT_DATA, dst, dstw, TMP_REG1, 0, src, srcw); -#else - return emit_op(compiler, SLJIT_MOV_U32, INT_DATA, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_u32)srcw : srcw); -#endif + return emit_op(compiler, SLJIT_MOV_U32, INT_DATA | MOVE_OP, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_u32)srcw : srcw); case SLJIT_MOV_S32: -#if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) - return emit_op(compiler, SLJIT_MOV_S32, INT_DATA | SIGNED_DATA, dst, dstw, TMP_REG1, 0, src, srcw); -#else - return emit_op(compiler, SLJIT_MOV_S32, INT_DATA | SIGNED_DATA, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_s32)srcw : srcw); + case SLJIT_MOV32: + return emit_op(compiler, SLJIT_MOV_S32, INT_DATA | SIGNED_DATA | MOVE_OP, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_s32)srcw : srcw); #endif case SLJIT_MOV_U8: - return emit_op(compiler, SLJIT_MOV_U8, BYTE_DATA, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_u8)srcw : srcw); + return emit_op(compiler, op, BYTE_DATA | MOVE_OP, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_u8)srcw : srcw); case SLJIT_MOV_S8: - return emit_op(compiler, SLJIT_MOV_S8, BYTE_DATA | SIGNED_DATA, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_s8)srcw : srcw); + return emit_op(compiler, op, BYTE_DATA | SIGNED_DATA | MOVE_OP, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_s8)srcw : srcw); case SLJIT_MOV_U16: - return emit_op(compiler, SLJIT_MOV_U16, HALF_DATA, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_u16)srcw : srcw); + return emit_op(compiler, op, HALF_DATA | MOVE_OP, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_u16)srcw : srcw); case SLJIT_MOV_S16: - return emit_op(compiler, SLJIT_MOV_S16, HALF_DATA | SIGNED_DATA, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_s16)srcw : srcw); + return emit_op(compiler, op, HALF_DATA | SIGNED_DATA | MOVE_OP, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_s16)srcw : srcw); case SLJIT_NOT: return emit_op(compiler, op, flags, dst, dstw, TMP_REG1, 0, src, srcw); - case SLJIT_NEG: - compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; - return emit_op(compiler, SLJIT_SUB | GET_ALL_FLAGS(op), flags | IMM_OP, dst, dstw, SLJIT_IMM, 0, src, srcw); - case SLJIT_CLZ: return emit_op(compiler, op, flags, dst, dstw, TMP_REG1, 0, src, srcw); } SLJIT_UNREACHABLE(); return SLJIT_SUCCESS; - -#if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) -# undef flags -#endif } SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compiler, sljit_s32 op, @@ -1397,23 +1596,16 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile sljit_s32 src1, sljit_sw src1w, sljit_s32 src2, sljit_sw src2w) { -#if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) -# define flags 0 -#else sljit_s32 flags = 0; -#endif CHECK_ERROR(); - CHECK(check_sljit_emit_op2(compiler, op, dst, dstw, src1, src1w, src2, src2w)); + CHECK(check_sljit_emit_op2(compiler, op, 0, dst, dstw, src1, src1w, src2, src2w)); ADJUST_LOCAL_OFFSET(dst, dstw); ADJUST_LOCAL_OFFSET(src1, src1w); ADJUST_LOCAL_OFFSET(src2, src2w); - if (dst == SLJIT_UNUSED && !HAS_FLAGS(op)) - return SLJIT_SUCCESS; - #if (defined SLJIT_CONFIG_MIPS_64 && SLJIT_CONFIG_MIPS_64) - if (op & SLJIT_I32_OP) { + if (op & SLJIT_32) { flags |= INT_DATA | SIGNED_DATA; if (src1 & SLJIT_IMM) src1w = (sljit_s32)src1w; @@ -1425,12 +1617,12 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile switch (GET_OPCODE(op)) { case SLJIT_ADD: case SLJIT_ADDC: - compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD; return emit_op(compiler, op, flags | CUMULATIVE_OP | IMM_OP, dst, dstw, src1, src1w, src2, src2w); case SLJIT_SUB: case SLJIT_SUBC: - compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_SUB; return emit_op(compiler, op, flags | IMM_OP, dst, dstw, src1, src1w, src2, src2w); case SLJIT_MUL: @@ -1450,7 +1642,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile src2w &= 0x1f; #else if (src2 & SLJIT_IMM) { - if (op & SLJIT_I32_OP) + if (op & SLJIT_32) src2w &= 0x1f; else src2w &= 0x3f; @@ -1461,10 +1653,20 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile SLJIT_UNREACHABLE(); return SLJIT_SUCCESS; +} -#if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) -# undef flags +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2u(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2, sljit_sw src2w) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_op2(compiler, op, 1, 0, 0, src1, src1w, src2, src2w)); + +#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ + || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) + compiler->skip_checks = 1; #endif + return sljit_emit_op2(compiler, op, TMP_REG2, 0, src1, src1w, src2, src2w); } SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_src(struct sljit_compiler *compiler, sljit_s32 op, @@ -1512,7 +1714,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_float_register_index(sljit_s32 reg) } SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_custom(struct sljit_compiler *compiler, - void *instruction, sljit_s32 size) + void *instruction, sljit_u32 size) { CHECK_ERROR(); CHECK(check_sljit_emit_op_custom(compiler, instruction, size)); @@ -1524,17 +1726,17 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_custom(struct sljit_compiler *c /* Floating point operators */ /* --------------------------------------------------------------------- */ -#define FLOAT_DATA(op) (DOUBLE_DATA | ((op & SLJIT_F32_OP) >> 7)) -#define FMT(op) (((op & SLJIT_F32_OP) ^ SLJIT_F32_OP) << (21 - 8)) +#define FLOAT_DATA(op) (DOUBLE_DATA | ((op & SLJIT_32) >> 7)) +#define FMT(op) ((((sljit_ins)op & SLJIT_32) ^ SLJIT_32) << (21 - 8)) static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_sw_from_f64(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 dst, sljit_sw dstw, sljit_s32 src, sljit_sw srcw) { #if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) -# define flags 0 +# define flags (sljit_u32)0 #else - sljit_s32 flags = (GET_OPCODE(op) == SLJIT_CONV_SW_FROM_F64) << 21; + sljit_u32 flags = ((sljit_u32)(GET_OPCODE(op) == SLJIT_CONV_SW_FROM_F64)) << 21; #endif if (src & SLJIT_MEM) { @@ -1560,9 +1762,9 @@ static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_f64_from_sw(struct sljit_comp sljit_s32 src, sljit_sw srcw) { #if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) -# define flags 0 +# define flags (sljit_u32)0 #else - sljit_s32 flags = (GET_OPCODE(op) == SLJIT_CONV_F64_FROM_SW) << 21; + sljit_u32 flags = ((sljit_u32)(GET_OPCODE(op) == SLJIT_CONV_F64_FROM_SW)) << 21; #endif sljit_s32 dst_r = FAST_IS_REG(dst) ? dst : TMP_FREG1; @@ -1582,7 +1784,7 @@ static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_f64_from_sw(struct sljit_comp FAIL_IF(push_inst(compiler, MTC1 | flags | T(TMP_REG1) | FS(TMP_FREG1), MOVABLE_INS)); } - FAIL_IF(push_inst(compiler, CVT_S_S | flags | (4 << 21) | (((op & SLJIT_F32_OP) ^ SLJIT_F32_OP) >> 8) | FS(TMP_FREG1) | FD(dst_r), MOVABLE_INS)); + FAIL_IF(push_inst(compiler, CVT_S_S | flags | (4 << 21) | ((((sljit_ins)op & SLJIT_32) ^ SLJIT_32) >> 8) | FS(TMP_FREG1) | FD(dst_r), MOVABLE_INS)); if (dst & SLJIT_MEM) return emit_op_mem2(compiler, FLOAT_DATA(op), FR(TMP_FREG1), dst, dstw, 0, 0); @@ -1640,11 +1842,11 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compil compiler->cache_arg = 0; compiler->cache_argw = 0; - SLJIT_COMPILE_ASSERT((SLJIT_F32_OP == 0x100) && !(DOUBLE_DATA & 0x2), float_transfer_bit_error); + SLJIT_COMPILE_ASSERT((SLJIT_32 == 0x100) && !(DOUBLE_DATA & 0x2), float_transfer_bit_error); SELECT_FOP1_OPERATION_WITH_CHECKS(compiler, op, dst, dstw, src, srcw); if (GET_OPCODE(op) == SLJIT_CONV_F64_FROM_F32) - op ^= SLJIT_F32_OP; + op ^= SLJIT_32; dst_r = FAST_IS_REG(dst) ? dst : TMP_FREG1; @@ -1669,8 +1871,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compil FAIL_IF(push_inst(compiler, ABS_S | FMT(op) | FS(src) | FD(dst_r), MOVABLE_INS)); break; case SLJIT_CONV_F64_FROM_F32: - FAIL_IF(push_inst(compiler, CVT_S_S | ((op & SLJIT_F32_OP) ? 1 : (1 << 21)) | FS(src) | FD(dst_r), MOVABLE_INS)); - op ^= SLJIT_F32_OP; + FAIL_IF(push_inst(compiler, CVT_S_S | (sljit_ins)((op & SLJIT_32) ? 1 : (1 << 21)) | FS(src) | FD(dst_r), MOVABLE_INS)); + op ^= SLJIT_32; break; } @@ -1841,7 +2043,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile { struct sljit_jump *jump; sljit_ins inst; - sljit_s32 flags = 0; + sljit_u32 flags = 0; sljit_s32 delay_check = UNMOVABLE_INS; CHECK_ERROR_PTR(); @@ -1864,6 +2066,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile case SLJIT_SIG_LESS: case SLJIT_SIG_GREATER: case SLJIT_OVERFLOW: + case SLJIT_CARRY: BR_Z(OTHER_FLAG); break; case SLJIT_GREATER_EQUAL: @@ -1871,6 +2074,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile case SLJIT_SIG_GREATER_EQUAL: case SLJIT_SIG_LESS_EQUAL: case SLJIT_NOT_OVERFLOW: + case SLJIT_NOT_CARRY: BR_NZ(OTHER_FLAG); break; case SLJIT_NOT_EQUAL_F64: @@ -1947,7 +2151,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_cmp(struct sljit_compiler compiler->cache_arg = 0; compiler->cache_argw = 0; - flags = ((type & SLJIT_I32_OP) ? INT_DATA : WORD_DATA) | LOAD_DATA; + flags = ((type & SLJIT_32) ? INT_DATA : WORD_DATA) | LOAD_DATA; if (src1 & SLJIT_MEM) { PTR_FAIL_IF(emit_op_mem2(compiler, flags, DR(TMP_REG1), src1, src1w, src2, src2w)); src1 = TMP_REG1; @@ -2074,7 +2278,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_ijump(struct sljit_compiler *compi jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump)); FAIL_IF(!jump); set_jump(jump, compiler, JUMP_ADDR | ((type >= SLJIT_FAST_CALL) ? IS_JAL : 0)); - jump->u.target = srcw; + jump->u.target = (sljit_uw)srcw; if (compiler->delay_slot != UNMOVABLE_INS) jump->flags |= IS_MOVABLE; @@ -2103,7 +2307,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co #if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) sljit_s32 mem_type = WORD_DATA; #else - sljit_s32 mem_type = (op & SLJIT_I32_OP) ? (INT_DATA | SIGNED_DATA) : WORD_DATA; + sljit_s32 mem_type = ((op & SLJIT_32) || op == SLJIT_MOV32) ? (INT_DATA | SIGNED_DATA) : WORD_DATA; #endif CHECK_ERROR(); @@ -2111,10 +2315,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co ADJUST_LOCAL_OFFSET(dst, dstw); op = GET_OPCODE(op); -#if (defined SLJIT_CONFIG_MIPS_64 && SLJIT_CONFIG_MIPS_64) - if (op == SLJIT_MOV_S32) - mem_type = INT_DATA | SIGNED_DATA; -#endif dst_ar = DR((op < SLJIT_ADD && FAST_IS_REG(dst)) ? dst : TMP_REG2); compiler->cache_arg = 0; @@ -2131,7 +2331,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co break; case SLJIT_OVERFLOW: case SLJIT_NOT_OVERFLOW: - if (compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB) { + if (compiler->status_flags_state & (SLJIT_CURRENT_FLAGS_ADD | SLJIT_CURRENT_FLAGS_SUB)) { src_ar = OTHER_FLAG; break; } @@ -2142,6 +2342,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co case SLJIT_GREATER_F64: case SLJIT_LESS_EQUAL_F64: type ^= 0x1; /* Flip type bit for the XORI below. */ + /* fallthrough */ case SLJIT_EQUAL_F64: case SLJIT_NOT_EQUAL_F64: case SLJIT_LESS_F64: @@ -2203,7 +2404,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_cmov(struct sljit_compiler *compil if (SLJIT_UNLIKELY(src & SLJIT_IMM)) { #if (defined SLJIT_CONFIG_MIPS_64 && SLJIT_CONFIG_MIPS_64) - if (dst_reg & SLJIT_I32_OP) + if (dst_reg & SLJIT_32) srcw = (sljit_s32)srcw; #endif FAIL_IF(load_immediate(compiler, DR(TMP_REG1), srcw)); @@ -2211,7 +2412,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_cmov(struct sljit_compiler *compil srcw = 0; } - dst_reg &= ~SLJIT_I32_OP; + dst_reg &= ~SLJIT_32; switch (type & 0xff) { case SLJIT_EQUAL: @@ -2298,7 +2499,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_put_label* sljit_emit_put_label(struct slj #if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) PTR_FAIL_IF(emit_const(compiler, dst_r, 0)); #else - PTR_FAIL_IF(push_inst(compiler, dst_r, UNMOVABLE_INS)); + PTR_FAIL_IF(push_inst(compiler, (sljit_ins)dst_r, UNMOVABLE_INS)); compiler->size += 5; #endif diff --git a/thirdparty/pcre2/src/sljit/sljitNativePPC_32.c b/thirdparty/pcre2/src/sljit/sljitNativePPC_32.c index 6ddb5508ec..95fe6bbe0e 100644 --- a/thirdparty/pcre2/src/sljit/sljitNativePPC_32.c +++ b/thirdparty/pcre2/src/sljit/sljitNativePPC_32.c @@ -86,11 +86,6 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl SLJIT_ASSERT(src1 == TMP_REG1); return push_inst(compiler, NOR | RC(flags) | S(src2) | A(dst) | B(src2)); - case SLJIT_NEG: - SLJIT_ASSERT(src1 == TMP_REG1); - /* Setting XER SO is not enough, CR SO is also needed. */ - return push_inst(compiler, NEG | OE((flags & ALT_FORM1) ? ALT_SET_FLAGS : 0) | RC(flags) | D(dst) | A(src2)); - case SLJIT_CLZ: SLJIT_ASSERT(src1 == TMP_REG1); return push_inst(compiler, CNTLZW | S(src2) | A(dst)); @@ -158,7 +153,9 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl if (flags & ALT_FORM3) { /* Setting XER SO is not enough, CR SO is also needed. */ - return push_inst(compiler, SUBF | OE(ALT_SET_FLAGS) | RC(ALT_SET_FLAGS) | D(dst) | A(src2) | B(src1)); + if (src1 != TMP_ZERO) + return push_inst(compiler, SUBF | OE(ALT_SET_FLAGS) | RC(ALT_SET_FLAGS) | D(dst) | A(src2) | B(src1)); + return push_inst(compiler, NEG | OE(ALT_SET_FLAGS) | RC(ALT_SET_FLAGS) | D(dst) | A(src2)); } if (flags & ALT_FORM4) { @@ -167,11 +164,17 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl return push_inst(compiler, SUBFIC | D(dst) | A(src1) | compiler->imm); } - if (!(flags & ALT_SET_FLAGS)) + if (!(flags & ALT_SET_FLAGS)) { + SLJIT_ASSERT(src1 != TMP_ZERO); return push_inst(compiler, SUBF | D(dst) | A(src2) | B(src1)); + } + if (flags & ALT_FORM5) return push_inst(compiler, SUBFC | RC(ALT_SET_FLAGS) | D(dst) | A(src2) | B(src1)); - return push_inst(compiler, SUBF | RC(flags) | D(dst) | A(src2) | B(src1)); + + if (src1 != TMP_ZERO) + return push_inst(compiler, SUBF | RC(ALT_SET_FLAGS) | D(dst) | A(src2) | B(src1)); + return push_inst(compiler, NEG | RC(ALT_SET_FLAGS) | D(dst) | A(src2)); case SLJIT_SUBC: return push_inst(compiler, SUBFE | D(dst) | A(src2) | B(src1)); @@ -277,5 +280,5 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_set_jump_addr(sljit_uw addr, sljit_uw new_ta SLJIT_API_FUNC_ATTRIBUTE void sljit_set_const(sljit_uw addr, sljit_sw new_constant, sljit_sw executable_offset) { - sljit_set_jump_addr(addr, new_constant, executable_offset); + sljit_set_jump_addr(addr, (sljit_uw)new_constant, executable_offset); } diff --git a/thirdparty/pcre2/src/sljit/sljitNativePPC_64.c b/thirdparty/pcre2/src/sljit/sljitNativePPC_64.c index cbdf2dd8a2..d104f6d75f 100644 --- a/thirdparty/pcre2/src/sljit/sljitNativePPC_64.c +++ b/thirdparty/pcre2/src/sljit/sljitNativePPC_64.c @@ -57,20 +57,20 @@ static sljit_s32 load_immediate(struct sljit_compiler *compiler, sljit_s32 reg, } /* Count leading zeroes. */ - tmp = (imm >= 0) ? imm : ~imm; + tmp = (sljit_uw)((imm >= 0) ? imm : ~imm); ASM_SLJIT_CLZ(tmp, shift); SLJIT_ASSERT(shift > 0); shift--; - tmp = (imm << shift); + tmp = ((sljit_uw)imm << shift); if ((tmp & ~0xffff000000000000ul) == 0) { - FAIL_IF(push_inst(compiler, ADDI | D(reg) | A(0) | IMM(tmp >> 48))); + FAIL_IF(push_inst(compiler, ADDI | D(reg) | A(0) | (sljit_ins)(tmp >> 48))); shift += 15; return PUSH_RLDICR(reg, shift); } if ((tmp & ~0xffffffff00000000ul) == 0) { - FAIL_IF(push_inst(compiler, ADDIS | D(reg) | A(0) | IMM(tmp >> 48))); + FAIL_IF(push_inst(compiler, ADDIS | D(reg) | A(0) | (sljit_ins)(tmp >> 48))); FAIL_IF(push_inst(compiler, ORI | S(reg) | A(reg) | IMM(tmp >> 32))); shift += 31; return PUSH_RLDICR(reg, shift); @@ -78,18 +78,18 @@ static sljit_s32 load_immediate(struct sljit_compiler *compiler, sljit_s32 reg, /* Cut out the 16 bit from immediate. */ shift += 15; - tmp2 = imm & ((1ul << (63 - shift)) - 1); + tmp2 = (sljit_uw)imm & (((sljit_uw)1 << (63 - shift)) - 1); if (tmp2 <= 0xffff) { - FAIL_IF(push_inst(compiler, ADDI | D(reg) | A(0) | IMM(tmp >> 48))); + FAIL_IF(push_inst(compiler, ADDI | D(reg) | A(0) | (sljit_ins)(tmp >> 48))); FAIL_IF(PUSH_RLDICR(reg, shift)); - return push_inst(compiler, ORI | S(reg) | A(reg) | tmp2); + return push_inst(compiler, ORI | S(reg) | A(reg) | (sljit_ins)tmp2); } if (tmp2 <= 0xffffffff) { FAIL_IF(push_inst(compiler, ADDI | D(reg) | A(0) | IMM(tmp >> 48))); FAIL_IF(PUSH_RLDICR(reg, shift)); - FAIL_IF(push_inst(compiler, ORIS | S(reg) | A(reg) | (tmp2 >> 16))); + FAIL_IF(push_inst(compiler, ORIS | S(reg) | A(reg) | (sljit_ins)(tmp2 >> 16))); return (imm & 0xffff) ? push_inst(compiler, ORI | S(reg) | A(reg) | IMM(tmp2)) : SLJIT_SUCCESS; } @@ -97,16 +97,16 @@ static sljit_s32 load_immediate(struct sljit_compiler *compiler, sljit_s32 reg, tmp2 <<= shift2; if ((tmp2 & ~0xffff000000000000ul) == 0) { - FAIL_IF(push_inst(compiler, ADDI | D(reg) | A(0) | IMM(tmp >> 48))); + FAIL_IF(push_inst(compiler, ADDI | D(reg) | A(0) | (sljit_ins)(tmp >> 48))); shift2 += 15; shift += (63 - shift2); FAIL_IF(PUSH_RLDICR(reg, shift)); - FAIL_IF(push_inst(compiler, ORI | S(reg) | A(reg) | (tmp2 >> 48))); + FAIL_IF(push_inst(compiler, ORI | S(reg) | A(reg) | (sljit_ins)(tmp2 >> 48))); return PUSH_RLDICR(reg, shift2); } /* The general version. */ - FAIL_IF(push_inst(compiler, ADDIS | D(reg) | A(0) | IMM(imm >> 48))); + FAIL_IF(push_inst(compiler, ADDIS | D(reg) | A(0) | (sljit_ins)((sljit_uw)imm >> 48))); FAIL_IF(push_inst(compiler, ORI | S(reg) | A(reg) | IMM(imm >> 32))); FAIL_IF(PUSH_RLDICR(reg, 31)); FAIL_IF(push_inst(compiler, ORIS | S(reg) | A(reg) | IMM(imm >> 16))); @@ -199,19 +199,6 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl UN_EXTS(); return push_inst(compiler, NOR | RC(flags) | S(src2) | A(dst) | B(src2)); - case SLJIT_NEG: - SLJIT_ASSERT(src1 == TMP_REG1); - - if ((flags & (ALT_FORM1 | ALT_SIGN_EXT)) == (ALT_FORM1 | ALT_SIGN_EXT)) { - FAIL_IF(push_inst(compiler, RLDI(TMP_REG2, src2, 32, 31, 1))); - FAIL_IF(push_inst(compiler, NEG | OE(ALT_SET_FLAGS) | RC(ALT_SET_FLAGS) | D(dst) | A(TMP_REG2))); - return push_inst(compiler, RLDI(dst, dst, 32, 32, 0)); - } - - UN_EXTS(); - /* Setting XER SO is not enough, CR SO is also needed. */ - return push_inst(compiler, NEG | OE((flags & ALT_FORM1) ? ALT_SET_FLAGS : 0) | RC(flags) | D(dst) | A(src2)); - case SLJIT_CLZ: SLJIT_ASSERT(src1 == TMP_REG1); if (flags & ALT_FORM1) @@ -299,13 +286,22 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl if (flags & ALT_FORM3) { if (flags & ALT_SIGN_EXT) { - FAIL_IF(push_inst(compiler, RLDI(TMP_REG1, src1, 32, 31, 1))); - src1 = TMP_REG1; - FAIL_IF(push_inst(compiler, RLDI(TMP_REG2, src2, 32, 31, 1))); - src2 = TMP_REG2; + if (src1 != TMP_ZERO) { + FAIL_IF(push_inst(compiler, RLDI(TMP_REG1, src1, 32, 31, 1))); + src1 = TMP_REG1; + } + if (src2 != TMP_ZERO) { + FAIL_IF(push_inst(compiler, RLDI(TMP_REG2, src2, 32, 31, 1))); + src2 = TMP_REG2; + } } + /* Setting XER SO is not enough, CR SO is also needed. */ - FAIL_IF(push_inst(compiler, SUBF | OE(ALT_SET_FLAGS) | RC(ALT_SET_FLAGS) | D(dst) | A(src2) | B(src1))); + if (src1 != TMP_ZERO) + FAIL_IF(push_inst(compiler, SUBF | OE(ALT_SET_FLAGS) | RC(ALT_SET_FLAGS) | D(dst) | A(src2) | B(src1))); + else + FAIL_IF(push_inst(compiler, NEG | OE(ALT_SET_FLAGS) | RC(ALT_SET_FLAGS) | D(dst) | A(src2))); + if (flags & ALT_SIGN_EXT) return push_inst(compiler, RLDI(dst, dst, 32, 32, 0)); return SLJIT_SUCCESS; @@ -317,12 +313,18 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl return push_inst(compiler, SUBFIC | D(dst) | A(src1) | compiler->imm); } - if (!(flags & ALT_SET_FLAGS)) + if (!(flags & ALT_SET_FLAGS)) { + SLJIT_ASSERT(src1 != TMP_ZERO); return push_inst(compiler, SUBF | D(dst) | A(src2) | B(src1)); + } + BIN_EXTS(); if (flags & ALT_FORM5) return push_inst(compiler, SUBFC | RC(ALT_SET_FLAGS) | D(dst) | A(src2) | B(src1)); - return push_inst(compiler, SUBF | RC(flags) | D(dst) | A(src2) | B(src1)); + + if (src1 != TMP_ZERO) + return push_inst(compiler, SUBF | RC(ALT_SET_FLAGS) | D(dst) | A(src2) | B(src1)); + return push_inst(compiler, NEG | RC(ALT_SET_FLAGS) | D(dst) | A(src2)); case SLJIT_SUBC: BIN_EXTS(); @@ -432,14 +434,14 @@ static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_t if (src) reg = *src & REG_MASK; - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; while (arg_types) { - types = (types << SLJIT_DEF_SHIFT) | (arg_types & SLJIT_DEF_MASK); + types = (types << SLJIT_ARG_SHIFT) | (arg_types & SLJIT_ARG_MASK); - switch (arg_types & SLJIT_DEF_MASK) { - case SLJIT_ARG_TYPE_F32: + switch (arg_types & SLJIT_ARG_MASK) { case SLJIT_ARG_TYPE_F64: + case SLJIT_ARG_TYPE_F32: arg_count++; break; default: @@ -453,13 +455,13 @@ static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_t break; } - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; } while (types) { - switch (types & SLJIT_DEF_MASK) { - case SLJIT_ARG_TYPE_F32: + switch (types & SLJIT_ARG_MASK) { case SLJIT_ARG_TYPE_F64: + case SLJIT_ARG_TYPE_F32: arg_count--; break; default: @@ -471,7 +473,7 @@ static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_t break; } - types >>= SLJIT_DEF_SHIFT; + types >>= SLJIT_ARG_SHIFT; } return SLJIT_SUCCESS; @@ -492,10 +494,10 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_set_jump_addr(sljit_uw addr, sljit_uw new_ta SLJIT_UNUSED_ARG(executable_offset); SLJIT_UPDATE_WX_FLAGS(inst, inst + 5, 0); - inst[0] = (inst[0] & 0xffff0000) | ((new_target >> 48) & 0xffff); - inst[1] = (inst[1] & 0xffff0000) | ((new_target >> 32) & 0xffff); - inst[3] = (inst[3] & 0xffff0000) | ((new_target >> 16) & 0xffff); - inst[4] = (inst[4] & 0xffff0000) | (new_target & 0xffff); + inst[0] = (inst[0] & 0xffff0000u) | ((sljit_ins)(new_target >> 48) & 0xffff); + inst[1] = (inst[1] & 0xffff0000u) | ((sljit_ins)(new_target >> 32) & 0xffff); + inst[3] = (inst[3] & 0xffff0000u) | ((sljit_ins)(new_target >> 16) & 0xffff); + inst[4] = (inst[4] & 0xffff0000u) | ((sljit_ins)new_target & 0xffff); SLJIT_UPDATE_WX_FLAGS(inst, inst + 5, 1); inst = (sljit_ins *)SLJIT_ADD_EXEC_OFFSET(inst, executable_offset); SLJIT_CACHE_FLUSH(inst, inst + 5); @@ -503,5 +505,5 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_set_jump_addr(sljit_uw addr, sljit_uw new_ta SLJIT_API_FUNC_ATTRIBUTE void sljit_set_const(sljit_uw addr, sljit_sw new_constant, sljit_sw executable_offset) { - sljit_set_jump_addr(addr, new_constant, executable_offset); + sljit_set_jump_addr(addr, (sljit_uw)new_constant, executable_offset); } diff --git a/thirdparty/pcre2/src/sljit/sljitNativePPC_common.c b/thirdparty/pcre2/src/sljit/sljitNativePPC_common.c index 2174dbb07b..8bfdc69522 100644 --- a/thirdparty/pcre2/src/sljit/sljitNativePPC_common.c +++ b/thirdparty/pcre2/src/sljit/sljitNativePPC_common.c @@ -109,32 +109,32 @@ static const sljit_u8 reg_map[SLJIT_NUMBER_OF_REGISTERS + 7] = { }; static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { - 0, 1, 2, 3, 4, 5, 6, 0, 7 + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 0, 13 }; /* --------------------------------------------------------------------- */ /* Instrucion forms */ /* --------------------------------------------------------------------- */ -#define D(d) (reg_map[d] << 21) -#define S(s) (reg_map[s] << 21) -#define A(a) (reg_map[a] << 16) -#define B(b) (reg_map[b] << 11) -#define C(c) (reg_map[c] << 6) -#define FD(fd) (freg_map[fd] << 21) -#define FS(fs) (freg_map[fs] << 21) -#define FA(fa) (freg_map[fa] << 16) -#define FB(fb) (freg_map[fb] << 11) -#define FC(fc) (freg_map[fc] << 6) -#define IMM(imm) ((imm) & 0xffff) -#define CRD(d) ((d) << 21) +#define D(d) ((sljit_ins)reg_map[d] << 21) +#define S(s) ((sljit_ins)reg_map[s] << 21) +#define A(a) ((sljit_ins)reg_map[a] << 16) +#define B(b) ((sljit_ins)reg_map[b] << 11) +#define C(c) ((sljit_ins)reg_map[c] << 6) +#define FD(fd) ((sljit_ins)freg_map[fd] << 21) +#define FS(fs) ((sljit_ins)freg_map[fs] << 21) +#define FA(fa) ((sljit_ins)freg_map[fa] << 16) +#define FB(fb) ((sljit_ins)freg_map[fb] << 11) +#define FC(fc) ((sljit_ins)freg_map[fc] << 6) +#define IMM(imm) ((sljit_ins)(imm) & 0xffff) +#define CRD(d) ((sljit_ins)(d) << 21) /* Instruction bit sections. OE and Rc flag (see ALT_SET_FLAGS). */ #define OE(flags) ((flags) & ALT_SET_FLAGS) /* Rc flag (see ALT_SET_FLAGS). */ #define RC(flags) (((flags) & ALT_SET_FLAGS) >> 10) -#define HI(opcode) ((opcode) << 26) -#define LO(opcode) ((opcode) << 1) +#define HI(opcode) ((sljit_ins)(opcode) << 26) +#define LO(opcode) ((sljit_ins)(opcode) << 1) #define ADD (HI(31) | LO(266)) #define ADDC (HI(31) | LO(10)) @@ -182,6 +182,7 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { #define FSUB (HI(63) | LO(20)) #define FSUBS (HI(59) | LO(20)) #define LD (HI(58) | 0) +#define LFD (HI(50)) #define LWZ (HI(32)) #define MFCR (HI(31) | LO(19)) #define MFLR (HI(31) | LO(339) | 0x80000) @@ -215,6 +216,7 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { #define STD (HI(62) | 0) #define STDU (HI(62) | 1) #define STDUX (HI(31) | LO(181)) +#define STFD (HI(54)) #define STFIWX (HI(31) | LO(983)) #define STW (HI(36)) #define STWU (HI(37)) @@ -232,15 +234,18 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { #define UIMM_MAX (0xffff) #define RLDI(dst, src, sh, mb, type) \ - (HI(30) | S(src) | A(dst) | ((type) << 2) | (((sh) & 0x1f) << 11) | (((sh) & 0x20) >> 4) | (((mb) & 0x1f) << 6) | ((mb) & 0x20)) + (HI(30) | S(src) | A(dst) | ((sljit_ins)(type) << 2) | (((sljit_ins)(sh) & 0x1f) << 11) \ + | (((sljit_ins)(sh) & 0x20) >> 4) | (((sljit_ins)(mb) & 0x1f) << 6) | ((sljit_ins)(mb) & 0x20)) #if (defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL) -SLJIT_API_FUNC_ATTRIBUTE void sljit_set_function_context(void** func_ptr, struct sljit_function_context* context, sljit_sw addr, void* func) +SLJIT_API_FUNC_ATTRIBUTE void sljit_set_function_context(void** func_ptr, struct sljit_function_context* context, sljit_uw addr, void* func) { - sljit_sw* ptrs; + sljit_uw* ptrs; + if (func_ptr) *func_ptr = (void*)context; - ptrs = (sljit_sw*)func; + + ptrs = (sljit_uw*)func; context->addr = addr ? addr : ptrs[0]; context->r2 = ptrs[1]; context->r11 = ptrs[2]; @@ -260,7 +265,7 @@ static SLJIT_INLINE sljit_s32 detect_jump_type(struct sljit_jump *jump, sljit_in { sljit_sw diff; sljit_uw target_addr; - sljit_sw extra_jump_flags; + sljit_uw extra_jump_flags; #if (defined SLJIT_PASS_ENTRY_ADDR_TO_CALL && SLJIT_PASS_ENTRY_ADDR_TO_CALL) && (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32) if (jump->flags & (SLJIT_REWRITABLE_JUMP | IS_CALL)) @@ -296,7 +301,7 @@ static SLJIT_INLINE sljit_s32 detect_jump_type(struct sljit_jump *jump, sljit_in } extra_jump_flags = REMOVE_COND; - diff -= sizeof(sljit_ins); + diff -= SSIZE_OF(ins); } if (diff <= 0x01ffffff && diff >= -0x02000000) { @@ -349,7 +354,7 @@ static SLJIT_INLINE void put_label_set(struct sljit_put_label *put_label) { sljit_uw addr = put_label->label->addr; sljit_ins *inst = (sljit_ins *)put_label->addr; - sljit_s32 reg = *inst; + sljit_u32 reg = *inst; if (put_label->flags == 0) { SLJIT_ASSERT(addr < 0x100000000l); @@ -433,7 +438,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil if (label && label->size == word_count) { /* Just recording the address. */ label->addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset); - label->size = code_ptr - code; + label->size = (sljit_uw)(code_ptr - code); label = label->next; } if (jump && jump->addr == word_count) { @@ -501,7 +506,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil if (label && label->size == word_count) { label->addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset); - label->size = code_ptr - code; + label->size = (sljit_uw)(code_ptr - code); label = label->next; } @@ -511,7 +516,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil SLJIT_ASSERT(!put_label); #if (defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL) - SLJIT_ASSERT(code_ptr - code <= (sljit_sw)compiler->size - (sizeof(struct sljit_function_context) / sizeof(sljit_ins))); + SLJIT_ASSERT(code_ptr - code <= (sljit_sw)(compiler->size - (sizeof(struct sljit_function_context) / sizeof(sljit_ins)))); #else SLJIT_ASSERT(code_ptr - code <= (sljit_sw)compiler->size); #endif @@ -527,22 +532,22 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil if (!(jump->flags & PATCH_ABS_B)) { addr -= (sljit_uw)SLJIT_ADD_EXEC_OFFSET(buf_ptr, executable_offset); SLJIT_ASSERT((sljit_sw)addr <= 0x7fff && (sljit_sw)addr >= -0x8000); - *buf_ptr = BCx | (addr & 0xfffc) | ((*buf_ptr) & 0x03ff0001); + *buf_ptr = BCx | ((sljit_ins)addr & 0xfffc) | ((*buf_ptr) & 0x03ff0001); } else { SLJIT_ASSERT(addr <= 0xffff); - *buf_ptr = BCx | (addr & 0xfffc) | 0x2 | ((*buf_ptr) & 0x03ff0001); + *buf_ptr = BCx | ((sljit_ins)addr & 0xfffc) | 0x2 | ((*buf_ptr) & 0x03ff0001); } } else { if (!(jump->flags & PATCH_ABS_B)) { addr -= (sljit_uw)SLJIT_ADD_EXEC_OFFSET(buf_ptr, executable_offset); SLJIT_ASSERT((sljit_sw)addr <= 0x01ffffff && (sljit_sw)addr >= -0x02000000); - *buf_ptr = Bx | (addr & 0x03fffffc) | ((*buf_ptr) & 0x1); + *buf_ptr = Bx | ((sljit_ins)addr & 0x03fffffc) | ((*buf_ptr) & 0x1); } else { SLJIT_ASSERT(addr <= 0x03ffffff); - *buf_ptr = Bx | (addr & 0x03fffffc) | 0x2 | ((*buf_ptr) & 0x1); + *buf_ptr = Bx | ((sljit_ins)addr & 0x03fffffc) | 0x2 | ((*buf_ptr) & 0x1); } } break; @@ -550,26 +555,32 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil /* Set the fields of immediate loads. */ #if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32) - buf_ptr[0] = (buf_ptr[0] & 0xffff0000) | ((addr >> 16) & 0xffff); - buf_ptr[1] = (buf_ptr[1] & 0xffff0000) | (addr & 0xffff); + SLJIT_ASSERT(((buf_ptr[0] | buf_ptr[1]) & 0xffff) == 0); + buf_ptr[0] |= (sljit_ins)(addr >> 16) & 0xffff; + buf_ptr[1] |= (sljit_ins)addr & 0xffff; #else if (jump->flags & PATCH_ABS32) { SLJIT_ASSERT(addr <= 0x7fffffff); - buf_ptr[0] = (buf_ptr[0] & 0xffff0000) | ((addr >> 16) & 0xffff); - buf_ptr[1] = (buf_ptr[1] & 0xffff0000) | (addr & 0xffff); + SLJIT_ASSERT(((buf_ptr[0] | buf_ptr[1]) & 0xffff) == 0); + buf_ptr[0] |= (sljit_ins)(addr >> 16) & 0xffff; + buf_ptr[1] |= (sljit_ins)addr & 0xffff; break; } + if (jump->flags & PATCH_ABS48) { SLJIT_ASSERT(addr <= 0x7fffffffffff); - buf_ptr[0] = (buf_ptr[0] & 0xffff0000) | ((addr >> 32) & 0xffff); - buf_ptr[1] = (buf_ptr[1] & 0xffff0000) | ((addr >> 16) & 0xffff); - buf_ptr[3] = (buf_ptr[3] & 0xffff0000) | (addr & 0xffff); + SLJIT_ASSERT(((buf_ptr[0] | buf_ptr[1] | buf_ptr[3]) & 0xffff) == 0); + buf_ptr[0] |= (sljit_ins)(addr >> 32) & 0xffff; + buf_ptr[1] |= (sljit_ins)(addr >> 16) & 0xffff; + buf_ptr[3] |= (sljit_ins)addr & 0xffff; break; } - buf_ptr[0] = (buf_ptr[0] & 0xffff0000) | ((addr >> 48) & 0xffff); - buf_ptr[1] = (buf_ptr[1] & 0xffff0000) | ((addr >> 32) & 0xffff); - buf_ptr[3] = (buf_ptr[3] & 0xffff0000) | ((addr >> 16) & 0xffff); - buf_ptr[4] = (buf_ptr[4] & 0xffff0000) | (addr & 0xffff); + + SLJIT_ASSERT(((buf_ptr[0] | buf_ptr[1] | buf_ptr[3] | buf_ptr[4]) & 0xffff) == 0); + buf_ptr[0] |= (sljit_ins)(addr >> 48) & 0xffff; + buf_ptr[1] |= (sljit_ins)(addr >> 32) & 0xffff; + buf_ptr[3] |= (sljit_ins)(addr >> 16) & 0xffff; + buf_ptr[4] |= (sljit_ins)addr & 0xffff; #endif } while (0); jump = jump->next; @@ -592,7 +603,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil compiler->error = SLJIT_ERR_COMPILED; compiler->executable_offset = executable_offset; - compiler->executable_size = (code_ptr - code) * sizeof(sljit_ins); + compiler->executable_size = (sljit_uw)(code_ptr - code) * sizeof(sljit_ins); code = (sljit_ins *)SLJIT_ADD_EXEC_OFFSET(code, executable_offset); @@ -601,7 +612,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil if (((sljit_sw)code_ptr) & 0x4) code_ptr++; #endif - sljit_set_function_context(NULL, (struct sljit_function_context*)code_ptr, (sljit_sw)code, (void*)sljit_generate_code); + sljit_set_function_context(NULL, (struct sljit_function_context*)code_ptr, (sljit_uw)code, (void*)sljit_generate_code); #endif code_ptr = (sljit_ins *)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset); @@ -696,69 +707,116 @@ ALT_FORM5 0x010000 */ #define STACK_LOAD LD #endif +#if (defined SLJIT_PPC_STACK_FRAME_V2 && SLJIT_PPC_STACK_FRAME_V2) +#define LR_SAVE_OFFSET 2 * SSIZE_OF(sw) +#else +#define LR_SAVE_OFFSET SSIZE_OF(sw) +#endif + +#define STACK_MAX_DISTANCE (0x8000 - SSIZE_OF(sw) - LR_SAVE_OFFSET) + SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_enter(struct sljit_compiler *compiler, sljit_s32 options, sljit_s32 arg_types, sljit_s32 scratches, sljit_s32 saveds, sljit_s32 fscratches, sljit_s32 fsaveds, sljit_s32 local_size) { - sljit_s32 args, i, tmp, offs; + sljit_s32 i, tmp, base, offset; + sljit_s32 word_arg_count = 0; + sljit_s32 saved_arg_count = 0; +#if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64) + sljit_s32 arg_count = 0; +#endif CHECK_ERROR(); CHECK(check_sljit_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size)); set_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size); + local_size += GET_SAVED_REGISTERS_SIZE(scratches, saveds, 1) + + GET_SAVED_FLOAT_REGISTERS_SIZE(fscratches, fsaveds, sizeof(sljit_f64)); + local_size = (local_size + SLJIT_LOCALS_OFFSET + 15) & ~0xf; + compiler->local_size = local_size; + FAIL_IF(push_inst(compiler, MFLR | D(0))); - offs = -(sljit_s32)(sizeof(sljit_sw)); - FAIL_IF(push_inst(compiler, STACK_STORE | S(TMP_ZERO) | A(SLJIT_SP) | IMM(offs))); - tmp = saveds < SLJIT_NUMBER_OF_SAVED_REGISTERS ? (SLJIT_S0 + 1 - saveds) : SLJIT_FIRST_SAVED_REG; - for (i = SLJIT_S0; i >= tmp; i--) { - offs -= (sljit_s32)(sizeof(sljit_sw)); - FAIL_IF(push_inst(compiler, STACK_STORE | S(i) | A(SLJIT_SP) | IMM(offs))); + base = SLJIT_SP; + offset = local_size; + + if (local_size <= STACK_MAX_DISTANCE) { +#if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32) + FAIL_IF(push_inst(compiler, STWU | S(SLJIT_SP) | A(SLJIT_SP) | IMM(-local_size))); +#else + FAIL_IF(push_inst(compiler, STDU | S(SLJIT_SP) | A(SLJIT_SP) | IMM(-local_size))); +#endif + } else { + base = TMP_REG1; + FAIL_IF(push_inst(compiler, OR | S(SLJIT_SP) | A(TMP_REG1) | B(SLJIT_SP))); + FAIL_IF(load_immediate(compiler, TMP_REG2, -local_size)); +#if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32) + FAIL_IF(push_inst(compiler, STWUX | S(SLJIT_SP) | A(SLJIT_SP) | B(TMP_REG2))); +#else + FAIL_IF(push_inst(compiler, STDUX | S(SLJIT_SP) | A(SLJIT_SP) | B(TMP_REG2))); +#endif + local_size = 0; + offset = 0; } - for (i = scratches; i >= SLJIT_FIRST_SAVED_REG; i--) { - offs -= (sljit_s32)(sizeof(sljit_sw)); - FAIL_IF(push_inst(compiler, STACK_STORE | S(i) | A(SLJIT_SP) | IMM(offs))); + tmp = SLJIT_FS0 - fsaveds; + for (i = SLJIT_FS0; i > tmp; i--) { + offset -= SSIZE_OF(f64); + FAIL_IF(push_inst(compiler, STFD | FS(i) | A(base) | IMM(offset))); } - SLJIT_ASSERT(offs == -(sljit_s32)GET_SAVED_REGISTERS_SIZE(compiler->scratches, compiler->saveds, 1)); + for (i = fscratches; i >= SLJIT_FIRST_SAVED_FLOAT_REG; i--) { + offset -= SSIZE_OF(f64); + FAIL_IF(push_inst(compiler, STFD | FS(i) | A(base) | IMM(offset))); + } -#if (defined SLJIT_PPC_STACK_FRAME_V2 && SLJIT_PPC_STACK_FRAME_V2) - FAIL_IF(push_inst(compiler, STACK_STORE | S(0) | A(SLJIT_SP) | IMM(2 * sizeof(sljit_sw)))); -#else - FAIL_IF(push_inst(compiler, STACK_STORE | S(0) | A(SLJIT_SP) | IMM(sizeof(sljit_sw)))); -#endif + offset -= SSIZE_OF(sw); + FAIL_IF(push_inst(compiler, STACK_STORE | S(TMP_ZERO) | A(base) | IMM(offset))); - FAIL_IF(push_inst(compiler, ADDI | D(TMP_ZERO) | A(0) | 0)); + tmp = SLJIT_S0 - saveds; + for (i = SLJIT_S0; i > tmp; i--) { + offset -= SSIZE_OF(sw); + FAIL_IF(push_inst(compiler, STACK_STORE | S(i) | A(base) | IMM(offset))); + } - args = get_arg_count(arg_types); + for (i = scratches; i >= SLJIT_FIRST_SAVED_REG; i--) { + offset -= SSIZE_OF(sw); + FAIL_IF(push_inst(compiler, STACK_STORE | S(i) | A(base) | IMM(offset))); + } - if (args >= 1) - FAIL_IF(push_inst(compiler, OR | S(SLJIT_R0) | A(SLJIT_S0) | B(SLJIT_R0))); - if (args >= 2) - FAIL_IF(push_inst(compiler, OR | S(SLJIT_R1) | A(SLJIT_S1) | B(SLJIT_R1))); - if (args >= 3) - FAIL_IF(push_inst(compiler, OR | S(SLJIT_R2) | A(SLJIT_S2) | B(SLJIT_R2))); + FAIL_IF(push_inst(compiler, STACK_STORE | S(0) | A(base) | IMM(local_size + LR_SAVE_OFFSET))); + FAIL_IF(push_inst(compiler, ADDI | D(TMP_ZERO) | A(0) | 0)); - local_size += GET_SAVED_REGISTERS_SIZE(scratches, saveds, 1) + SLJIT_LOCALS_OFFSET; - local_size = (local_size + 15) & ~0xf; - compiler->local_size = local_size; + arg_types >>= SLJIT_ARG_SHIFT; -#if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32) - if (local_size <= SIMM_MAX) - FAIL_IF(push_inst(compiler, STWU | S(SLJIT_SP) | A(SLJIT_SP) | IMM(-local_size))); - else { - FAIL_IF(load_immediate(compiler, 0, -local_size)); - FAIL_IF(push_inst(compiler, STWUX | S(SLJIT_SP) | A(SLJIT_SP) | B(0))); - } + while (arg_types > 0) { + if ((arg_types & SLJIT_ARG_MASK) < SLJIT_ARG_TYPE_F64) { +#if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64) + do { + if (!(arg_types & SLJIT_ARG_TYPE_SCRATCH_REG)) { + tmp = SLJIT_S0 - saved_arg_count; + saved_arg_count++; + } else if (arg_count != word_arg_count) + tmp = SLJIT_R0 + word_arg_count; + else + break; + + FAIL_IF(push_inst(compiler, OR | S(SLJIT_R0 + arg_count) | A(tmp) | B(SLJIT_R0 + arg_count))); + } while (0); #else - if (local_size <= SIMM_MAX) - FAIL_IF(push_inst(compiler, STDU | S(SLJIT_SP) | A(SLJIT_SP) | IMM(-local_size))); - else { - FAIL_IF(load_immediate(compiler, 0, -local_size)); - FAIL_IF(push_inst(compiler, STDUX | S(SLJIT_SP) | A(SLJIT_SP) | B(0))); - } + if (!(arg_types & SLJIT_ARG_TYPE_SCRATCH_REG)) { + FAIL_IF(push_inst(compiler, OR | S(SLJIT_R0 + word_arg_count) | A(SLJIT_S0 - saved_arg_count) | B(SLJIT_R0 + word_arg_count))); + saved_arg_count++; + } #endif + word_arg_count++; + } + +#if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64) + arg_count++; +#endif + arg_types >>= SLJIT_ARG_SHIFT; + } return SLJIT_SUCCESS; } @@ -771,54 +829,74 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_set_context(struct sljit_compiler *comp CHECK(check_sljit_set_context(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size)); set_set_context(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size); - local_size += GET_SAVED_REGISTERS_SIZE(scratches, saveds, 1) + SLJIT_LOCALS_OFFSET; - compiler->local_size = (local_size + 15) & ~0xf; + local_size += GET_SAVED_REGISTERS_SIZE(scratches, saveds, 1) + + GET_SAVED_FLOAT_REGISTERS_SIZE(fscratches, fsaveds, sizeof(sljit_f64)); + compiler->local_size = (local_size + SLJIT_LOCALS_OFFSET + 15) & ~0xf; return SLJIT_SUCCESS; } -SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src, sljit_sw srcw) -{ - sljit_s32 i, tmp, offs; - CHECK_ERROR(); - CHECK(check_sljit_emit_return(compiler, op, src, srcw)); +static sljit_s32 emit_stack_frame_release(struct sljit_compiler *compiler) +{ + sljit_s32 i, tmp, base, offset; + sljit_s32 local_size = compiler->local_size; + + base = SLJIT_SP; + if (local_size > STACK_MAX_DISTANCE) { + base = TMP_REG1; + if (local_size > 2 * STACK_MAX_DISTANCE + LR_SAVE_OFFSET) { + FAIL_IF(push_inst(compiler, STACK_LOAD | D(base) | A(SLJIT_SP) | IMM(0))); + local_size = 0; + } else { + FAIL_IF(push_inst(compiler, ADDI | D(TMP_REG1) | A(SLJIT_SP) | IMM(local_size - STACK_MAX_DISTANCE))); + local_size = STACK_MAX_DISTANCE; + } + } - FAIL_IF(emit_mov_before_return(compiler, op, src, srcw)); + offset = local_size; + FAIL_IF(push_inst(compiler, STACK_LOAD | S(0) | A(base) | IMM(offset + LR_SAVE_OFFSET))); - if (compiler->local_size <= SIMM_MAX) - FAIL_IF(push_inst(compiler, ADDI | D(SLJIT_SP) | A(SLJIT_SP) | IMM(compiler->local_size))); - else { - FAIL_IF(load_immediate(compiler, 0, compiler->local_size)); - FAIL_IF(push_inst(compiler, ADD | D(SLJIT_SP) | A(SLJIT_SP) | B(0))); + tmp = SLJIT_FS0 - compiler->fsaveds; + for (i = SLJIT_FS0; i > tmp; i--) { + offset -= SSIZE_OF(f64); + FAIL_IF(push_inst(compiler, LFD | FS(i) | A(base) | IMM(offset))); } -#if (defined SLJIT_PPC_STACK_FRAME_V2 && SLJIT_PPC_STACK_FRAME_V2) - FAIL_IF(push_inst(compiler, STACK_LOAD | D(0) | A(SLJIT_SP) | IMM(2 * sizeof(sljit_sw)))); -#else - FAIL_IF(push_inst(compiler, STACK_LOAD | D(0) | A(SLJIT_SP) | IMM(sizeof(sljit_sw)))); -#endif + for (i = compiler->fscratches; i >= SLJIT_FIRST_SAVED_FLOAT_REG; i--) { + offset -= SSIZE_OF(f64); + FAIL_IF(push_inst(compiler, LFD | FS(i) | A(base) | IMM(offset))); + } - offs = -(sljit_s32)GET_SAVED_REGISTERS_SIZE(compiler->scratches, compiler->saveds, 1); + offset -= SSIZE_OF(sw); + FAIL_IF(push_inst(compiler, STACK_LOAD | S(TMP_ZERO) | A(base) | IMM(offset))); - tmp = compiler->scratches; - for (i = SLJIT_FIRST_SAVED_REG; i <= tmp; i++) { - FAIL_IF(push_inst(compiler, STACK_LOAD | D(i) | A(SLJIT_SP) | IMM(offs))); - offs += (sljit_s32)(sizeof(sljit_sw)); + tmp = SLJIT_S0 - compiler->saveds; + for (i = SLJIT_S0; i > tmp; i--) { + offset -= SSIZE_OF(sw); + FAIL_IF(push_inst(compiler, STACK_LOAD | S(i) | A(base) | IMM(offset))); } - tmp = compiler->saveds < SLJIT_NUMBER_OF_SAVED_REGISTERS ? (SLJIT_S0 + 1 - compiler->saveds) : SLJIT_FIRST_SAVED_REG; - for (i = tmp; i <= SLJIT_S0; i++) { - FAIL_IF(push_inst(compiler, STACK_LOAD | D(i) | A(SLJIT_SP) | IMM(offs))); - offs += (sljit_s32)(sizeof(sljit_sw)); + for (i = compiler->scratches; i >= SLJIT_FIRST_SAVED_REG; i--) { + offset -= SSIZE_OF(sw); + FAIL_IF(push_inst(compiler, STACK_LOAD | S(i) | A(base) | IMM(offset))); } - FAIL_IF(push_inst(compiler, STACK_LOAD | D(TMP_ZERO) | A(SLJIT_SP) | IMM(offs))); - SLJIT_ASSERT(offs == -(sljit_sw)(sizeof(sljit_sw))); + push_inst(compiler, MTLR | S(0)); - FAIL_IF(push_inst(compiler, MTLR | S(0))); - FAIL_IF(push_inst(compiler, BLR)); + if (local_size > 0) + return push_inst(compiler, ADDI | D(SLJIT_SP) | A(base) | IMM(local_size)); - return SLJIT_SUCCESS; + SLJIT_ASSERT(base == TMP_REG1); + return push_inst(compiler, OR | S(base) | A(SLJIT_SP) | B(base)); +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return_void(struct sljit_compiler *compiler) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_return_void(compiler)); + + FAIL_IF(emit_stack_frame_release(compiler)); + return push_inst(compiler, BLR); } #undef STACK_STORE @@ -843,11 +921,11 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return(struct sljit_compiler *comp #if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32) #define ARCH_32_64(a, b) a #define INST_CODE_AND_DST(inst, flags, reg) \ - ((inst) | (((flags) & MEM_MASK) <= GPR_REG ? D(reg) : FD(reg))) + ((sljit_ins)(inst) | (sljit_ins)(((flags) & MEM_MASK) <= GPR_REG ? D(reg) : FD(reg))) #else #define ARCH_32_64(a, b) b #define INST_CODE_AND_DST(inst, flags, reg) \ - (((inst) & ~INT_ALIGNED) | (((flags) & MEM_MASK) <= GPR_REG ? D(reg) : FD(reg))) + (((sljit_ins)(inst) & ~(sljit_ins)INT_ALIGNED) | (sljit_ins)(((flags) & MEM_MASK) <= GPR_REG ? D(reg) : FD(reg))) #endif static const sljit_ins data_transfer_insts[64 + 16] = { @@ -1000,7 +1078,7 @@ static sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit_s32 inp_flag if (argw != 0) { #if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32) - FAIL_IF(push_inst(compiler, RLWINM | S(OFFS_REG(arg)) | A(tmp_reg) | (argw << 11) | ((31 - argw) << 1))); + FAIL_IF(push_inst(compiler, RLWINM | S(OFFS_REG(arg)) | A(tmp_reg) | ((sljit_ins)argw << 11) | ((31 - (sljit_ins)argw) << 1))); #else FAIL_IF(push_inst(compiler, RLDI(tmp_reg, OFFS_REG(arg), argw, 63 - argw, 1))); #endif @@ -1073,8 +1151,10 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3 sljit_s32 flags = input_flags & (ALT_FORM1 | ALT_FORM2 | ALT_FORM3 | ALT_FORM4 | ALT_FORM5 | ALT_SIGN_EXT | ALT_SET_FLAGS); /* Destination check. */ - if (SLOW_IS_REG(dst)) { + if (FAST_IS_REG(dst)) { dst_r = dst; + /* The REG_DEST is only used by SLJIT_MOV operations, although + * it is set for op2 operations with unset destination. */ flags |= REG_DEST; if (op >= SLJIT_MOV && op <= SLJIT_MOV_P) @@ -1087,8 +1167,11 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3 flags |= REG1_SOURCE; } else if (src1 & SLJIT_IMM) { - FAIL_IF(load_immediate(compiler, TMP_REG1, src1w)); - src1_r = TMP_REG1; + src1_r = TMP_ZERO; + if (src1w != 0) { + FAIL_IF(load_immediate(compiler, TMP_REG1, src1w)); + src1_r = TMP_REG1; + } } else { FAIL_IF(emit_op_mem(compiler, input_flags | LOAD_DATA, TMP_REG1, src1, src1w, TMP_REG1)); @@ -1104,8 +1187,11 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3 dst_r = src2_r; } else if (src2 & SLJIT_IMM) { - FAIL_IF(load_immediate(compiler, sugg_src2_r, src2w)); - src2_r = sugg_src2_r; + src2_r = TMP_ZERO; + if (src2w != 0) { + FAIL_IF(load_immediate(compiler, sugg_src2_r, src2w)); + src2_r = sugg_src2_r; + } } else { FAIL_IF(emit_op_mem(compiler, input_flags | LOAD_DATA, sugg_src2_r, src2, src2w, TMP_REG2)); @@ -1123,7 +1209,7 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3 SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compiler, sljit_s32 op) { #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64) - sljit_s32 int_op = op & SLJIT_I32_OP; + sljit_s32 int_op = op & SLJIT_32; #endif CHECK_ERROR(); @@ -1174,7 +1260,7 @@ static sljit_s32 emit_prefetch(struct sljit_compiler *compiler, sljit_s32 src, sljit_sw srcw) { if (!(src & OFFS_REG_MASK)) { - if (srcw == 0 && (src & REG_MASK) != SLJIT_UNUSED) + if (srcw == 0 && (src & REG_MASK)) return push_inst(compiler, DCBT | A(0) | B(src & REG_MASK)); FAIL_IF(load_immediate(compiler, TMP_REG1, srcw)); @@ -1188,7 +1274,7 @@ static sljit_s32 emit_prefetch(struct sljit_compiler *compiler, return push_inst(compiler, DCBT | A(src & REG_MASK) | B(OFFS_REG(src))); #if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32) - FAIL_IF(push_inst(compiler, RLWINM | S(OFFS_REG(src)) | A(TMP_REG1) | (srcw << 11) | ((31 - srcw) << 1))); + FAIL_IF(push_inst(compiler, RLWINM | S(OFFS_REG(src)) | A(TMP_REG1) | ((sljit_ins)srcw << 11) | ((31 - (sljit_ins)srcw) << 1))); #else FAIL_IF(push_inst(compiler, RLDI(TMP_REG1, OFFS_REG(src), srcw, 63 - srcw, 1))); #endif @@ -1211,8 +1297,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile ADJUST_LOCAL_OFFSET(src, srcw); op = GET_OPCODE(op); - if ((src & SLJIT_IMM) && srcw == 0) - src = TMP_ZERO; if (GET_FLAG_TYPE(op_flags) == SLJIT_OVERFLOW) FAIL_IF(push_inst(compiler, MTXER | S(TMP_ZERO))); @@ -1223,7 +1307,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile } #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64) - if (op_flags & SLJIT_I32_OP) { + if (op_flags & SLJIT_32) { if (op < SLJIT_NOT) { if (src & SLJIT_MEM) { if (op == SLJIT_MOV_S32) @@ -1245,11 +1329,12 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile switch (op) { case SLJIT_MOV: - case SLJIT_MOV_P: #if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32) case SLJIT_MOV_U32: case SLJIT_MOV_S32: + case SLJIT_MOV32: #endif + case SLJIT_MOV_P: return emit_op(compiler, SLJIT_MOV, flags | WORD_DATA, dst, dstw, TMP_REG1, 0, src, srcw); #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64) @@ -1257,6 +1342,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile return EMIT_MOV(SLJIT_MOV_U32, INT_DATA, (sljit_u32)); case SLJIT_MOV_S32: + case SLJIT_MOV32: return EMIT_MOV(SLJIT_MOV_S32, INT_DATA | SIGNED_DATA, (sljit_s32)); #endif @@ -1275,12 +1361,9 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile case SLJIT_NOT: return emit_op(compiler, SLJIT_NOT, flags, dst, dstw, TMP_REG1, 0, src, srcw); - case SLJIT_NEG: - return emit_op(compiler, SLJIT_NEG, flags | (GET_FLAG_TYPE(op_flags) ? ALT_FORM1 : 0), dst, dstw, TMP_REG1, 0, src, srcw); - case SLJIT_CLZ: #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64) - return emit_op(compiler, SLJIT_CLZ, flags | (!(op_flags & SLJIT_I32_OP) ? 0 : ALT_FORM1), dst, dstw, TMP_REG1, 0, src, srcw); + return emit_op(compiler, SLJIT_CLZ, flags | (!(op_flags & SLJIT_32) ? 0 : ALT_FORM1), dst, dstw, TMP_REG1, 0, src, srcw); #else return emit_op(compiler, SLJIT_CLZ, flags, dst, dstw, TMP_REG1, 0, src, srcw); #endif @@ -1306,7 +1389,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile #endif #define TEST_UH_IMM(src, srcw) \ - (((src) & SLJIT_IMM) && !((srcw) & ~0xffff0000)) + (((src) & SLJIT_IMM) && !((srcw) & ~(sljit_sw)0xffff0000)) #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64) #define TEST_ADD_IMM(src, srcw) \ @@ -1327,13 +1410,13 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64) #define TEST_ADD_FORM1(op) \ (GET_FLAG_TYPE(op) == SLJIT_OVERFLOW \ - || (op & (SLJIT_I32_OP | SLJIT_SET_Z | VARIABLE_FLAG_MASK)) == (SLJIT_I32_OP | SLJIT_SET_Z | SLJIT_SET_CARRY)) + || (op & (SLJIT_32 | SLJIT_SET_Z | VARIABLE_FLAG_MASK)) == (SLJIT_32 | SLJIT_SET_Z | SLJIT_SET_CARRY)) #define TEST_SUB_FORM2(op) \ ((GET_FLAG_TYPE(op) >= SLJIT_SIG_LESS && GET_FLAG_TYPE(op) <= SLJIT_SIG_LESS_EQUAL) \ - || (op & (SLJIT_I32_OP | SLJIT_SET_Z | VARIABLE_FLAG_MASK)) == (SLJIT_I32_OP | SLJIT_SET_Z)) + || (op & (SLJIT_32 | SLJIT_SET_Z | VARIABLE_FLAG_MASK)) == (SLJIT_32 | SLJIT_SET_Z)) #define TEST_SUB_FORM3(op) \ (GET_FLAG_TYPE(op) == SLJIT_OVERFLOW \ - || (op & (SLJIT_I32_OP | SLJIT_SET_Z)) == (SLJIT_I32_OP | SLJIT_SET_Z)) + || (op & (SLJIT_32 | SLJIT_SET_Z)) == (SLJIT_32 | SLJIT_SET_Z)) #else #define TEST_ADD_FORM1(op) \ (GET_FLAG_TYPE(op) == SLJIT_OVERFLOW) @@ -1351,21 +1434,13 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile sljit_s32 flags = HAS_FLAGS(op) ? ALT_SET_FLAGS : 0; CHECK_ERROR(); - CHECK(check_sljit_emit_op2(compiler, op, dst, dstw, src1, src1w, src2, src2w)); + CHECK(check_sljit_emit_op2(compiler, op, 0, dst, dstw, src1, src1w, src2, src2w)); ADJUST_LOCAL_OFFSET(dst, dstw); ADJUST_LOCAL_OFFSET(src1, src1w); ADJUST_LOCAL_OFFSET(src2, src2w); - if (dst == SLJIT_UNUSED && !HAS_FLAGS(op)) - return SLJIT_SUCCESS; - - if ((src1 & SLJIT_IMM) && src1w == 0) - src1 = TMP_ZERO; - if ((src2 & SLJIT_IMM) && src2w == 0) - src2 = TMP_ZERO; - #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64) - if (op & SLJIT_I32_OP) { + if (op & SLJIT_32) { /* Most operations expect sign extended arguments. */ flags |= INT_DATA | SIGNED_DATA; if (src1 & SLJIT_IMM) @@ -1381,45 +1456,47 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile switch (GET_OPCODE(op)) { case SLJIT_ADD: + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD; + if (TEST_ADD_FORM1(op)) return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM1, dst, dstw, src1, src1w, src2, src2w); if (!HAS_FLAGS(op) && ((src1 | src2) & SLJIT_IMM)) { if (TEST_SL_IMM(src2, src2w)) { - compiler->imm = src2w & 0xffff; + compiler->imm = (sljit_ins)src2w & 0xffff; return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM2, dst, dstw, src1, src1w, TMP_REG2, 0); } if (TEST_SL_IMM(src1, src1w)) { - compiler->imm = src1w & 0xffff; + compiler->imm = (sljit_ins)src1w & 0xffff; return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM2, dst, dstw, src2, src2w, TMP_REG2, 0); } if (TEST_SH_IMM(src2, src2w)) { - compiler->imm = (src2w >> 16) & 0xffff; + compiler->imm = (sljit_ins)(src2w >> 16) & 0xffff; return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM2 | ALT_FORM3, dst, dstw, src1, src1w, TMP_REG2, 0); } if (TEST_SH_IMM(src1, src1w)) { - compiler->imm = (src1w >> 16) & 0xffff; + compiler->imm = (sljit_ins)(src1w >> 16) & 0xffff; return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM2 | ALT_FORM3, dst, dstw, src2, src2w, TMP_REG2, 0); } /* Range between -1 and -32768 is covered above. */ if (TEST_ADD_IMM(src2, src2w)) { - compiler->imm = src2w & 0xffffffff; + compiler->imm = (sljit_ins)src2w & 0xffffffff; return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM2 | ALT_FORM4, dst, dstw, src1, src1w, TMP_REG2, 0); } if (TEST_ADD_IMM(src1, src1w)) { - compiler->imm = src1w & 0xffffffff; + compiler->imm = (sljit_ins)src1w & 0xffffffff; return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM2 | ALT_FORM4, dst, dstw, src2, src2w, TMP_REG2, 0); } } #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64) - if ((op & (SLJIT_I32_OP | SLJIT_SET_Z)) == (SLJIT_I32_OP | SLJIT_SET_Z)) { + if ((op & (SLJIT_32 | SLJIT_SET_Z)) == (SLJIT_32 | SLJIT_SET_Z)) { if (TEST_SL_IMM(src2, src2w)) { - compiler->imm = src2w & 0xffff; + compiler->imm = (sljit_ins)src2w & 0xffff; return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM4 | ALT_FORM5, dst, dstw, src1, src1w, TMP_REG2, 0); } if (TEST_SL_IMM(src1, src1w)) { - compiler->imm = src1w & 0xffff; + compiler->imm = (sljit_ins)src1w & 0xffff; return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM4 | ALT_FORM5, dst, dstw, src2, src2w, TMP_REG2, 0); } return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM4, dst, dstw, src1, src1w, src2, src2w); @@ -1427,39 +1504,42 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile #endif if (HAS_FLAGS(op)) { if (TEST_SL_IMM(src2, src2w)) { - compiler->imm = src2w & 0xffff; + compiler->imm = (sljit_ins)src2w & 0xffff; return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM3, dst, dstw, src1, src1w, TMP_REG2, 0); } if (TEST_SL_IMM(src1, src1w)) { - compiler->imm = src1w & 0xffff; + compiler->imm = (sljit_ins)src1w & 0xffff; return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM3, dst, dstw, src2, src2w, TMP_REG2, 0); } } return emit_op(compiler, SLJIT_ADD, flags | ((GET_FLAG_TYPE(op) == GET_FLAG_TYPE(SLJIT_SET_CARRY)) ? ALT_FORM5 : 0), dst, dstw, src1, src1w, src2, src2w); case SLJIT_ADDC: + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD; return emit_op(compiler, SLJIT_ADDC, flags, dst, dstw, src1, src1w, src2, src2w); case SLJIT_SUB: + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_SUB; + if (GET_FLAG_TYPE(op) >= SLJIT_LESS && GET_FLAG_TYPE(op) <= SLJIT_LESS_EQUAL) { - if (dst == SLJIT_UNUSED) { + if (dst == TMP_REG2) { if (TEST_UL_IMM(src2, src2w)) { - compiler->imm = src2w & 0xffff; + compiler->imm = (sljit_ins)src2w & 0xffff; return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM1 | ALT_FORM2, dst, dstw, src1, src1w, TMP_REG2, 0); } return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM1, dst, dstw, src1, src1w, src2, src2w); } if ((src2 & SLJIT_IMM) && src2w >= 0 && src2w <= (SIMM_MAX + 1)) { - compiler->imm = src2w; + compiler->imm = (sljit_ins)src2w; return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM1 | ALT_FORM2 | ALT_FORM3, dst, dstw, src1, src1w, TMP_REG2, 0); } return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM1 | ALT_FORM3, dst, dstw, src1, src1w, src2, src2w); } - if (dst == SLJIT_UNUSED && GET_FLAG_TYPE(op) <= SLJIT_SIG_LESS_EQUAL) { + if (dst == TMP_REG2 && GET_FLAG_TYPE(op) <= SLJIT_SIG_LESS_EQUAL) { if (TEST_SL_IMM(src2, src2w)) { - compiler->imm = src2w & 0xffff; + compiler->imm = (sljit_ins)src2w & 0xffff; return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM2 | ALT_FORM3, dst, dstw, src1, src1w, TMP_REG2, 0); } return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM2, dst, dstw, src1, src1w, src2, src2w); @@ -1467,7 +1547,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile if (TEST_SUB_FORM2(op)) { if ((src2 & SLJIT_IMM) && src2w >= -SIMM_MAX && src2w <= SIMM_MAX) { - compiler->imm = src2w & 0xffff; + compiler->imm = (sljit_ins)src2w & 0xffff; return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM2 | ALT_FORM3 | ALT_FORM4, dst, dstw, src1, src1w, TMP_REG2, 0); } return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM2 | ALT_FORM4, dst, dstw, src1, src1w, src2, src2w); @@ -1477,45 +1557,46 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM3, dst, dstw, src1, src1w, src2, src2w); if (TEST_SL_IMM(src2, -src2w)) { - compiler->imm = (-src2w) & 0xffff; + compiler->imm = (sljit_ins)(-src2w) & 0xffff; return emit_op(compiler, SLJIT_ADD, flags | (!HAS_FLAGS(op) ? ALT_FORM2 : ALT_FORM3), dst, dstw, src1, src1w, TMP_REG2, 0); } if (TEST_SL_IMM(src1, src1w) && !(op & SLJIT_SET_Z)) { - compiler->imm = src1w & 0xffff; + compiler->imm = (sljit_ins)src1w & 0xffff; return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM4, dst, dstw, src2, src2w, TMP_REG2, 0); } if (!HAS_FLAGS(op)) { if (TEST_SH_IMM(src2, -src2w)) { - compiler->imm = ((-src2w) >> 16) & 0xffff; + compiler->imm = (sljit_ins)((-src2w) >> 16) & 0xffff; return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM2 | ALT_FORM3, dst, dstw, src1, src1w, TMP_REG2, 0); } /* Range between -1 and -32768 is covered above. */ if (TEST_ADD_IMM(src2, -src2w)) { - compiler->imm = -src2w & 0xffffffff; + compiler->imm = (sljit_ins)-src2w; return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM2 | ALT_FORM4, dst, dstw, src1, src1w, TMP_REG2, 0); } } - /* We know ALT_SIGN_EXT is set if it is an SLJIT_I32_OP on 64 bit systems. */ + /* We know ALT_SIGN_EXT is set if it is an SLJIT_32 on 64 bit systems. */ return emit_op(compiler, SLJIT_SUB, flags | ((GET_FLAG_TYPE(op) == GET_FLAG_TYPE(SLJIT_SET_CARRY)) ? ALT_FORM5 : 0), dst, dstw, src1, src1w, src2, src2w); case SLJIT_SUBC: + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_SUB; return emit_op(compiler, SLJIT_SUBC, flags, dst, dstw, src1, src1w, src2, src2w); case SLJIT_MUL: #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64) - if (op & SLJIT_I32_OP) + if (op & SLJIT_32) flags |= ALT_FORM2; #endif if (!HAS_FLAGS(op)) { if (TEST_SL_IMM(src2, src2w)) { - compiler->imm = src2w & 0xffff; + compiler->imm = (sljit_ins)src2w & 0xffff; return emit_op(compiler, SLJIT_MUL, flags | ALT_FORM1, dst, dstw, src1, src1w, TMP_REG2, 0); } if (TEST_SL_IMM(src1, src1w)) { - compiler->imm = src1w & 0xffff; + compiler->imm = (sljit_ins)src1w & 0xffff; return emit_op(compiler, SLJIT_MUL, flags | ALT_FORM1, dst, dstw, src2, src2w, TMP_REG2, 0); } } @@ -1529,30 +1610,30 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile /* Commutative unsigned operations. */ if (!HAS_FLAGS(op) || GET_OPCODE(op) == SLJIT_AND) { if (TEST_UL_IMM(src2, src2w)) { - compiler->imm = src2w; + compiler->imm = (sljit_ins)src2w; return emit_op(compiler, GET_OPCODE(op), flags | ALT_FORM1, dst, dstw, src1, src1w, TMP_REG2, 0); } if (TEST_UL_IMM(src1, src1w)) { - compiler->imm = src1w; + compiler->imm = (sljit_ins)src1w; return emit_op(compiler, GET_OPCODE(op), flags | ALT_FORM1, dst, dstw, src2, src2w, TMP_REG2, 0); } if (TEST_UH_IMM(src2, src2w)) { - compiler->imm = (src2w >> 16) & 0xffff; + compiler->imm = (sljit_ins)(src2w >> 16) & 0xffff; return emit_op(compiler, GET_OPCODE(op), flags | ALT_FORM2, dst, dstw, src1, src1w, TMP_REG2, 0); } if (TEST_UH_IMM(src1, src1w)) { - compiler->imm = (src1w >> 16) & 0xffff; + compiler->imm = (sljit_ins)(src1w >> 16) & 0xffff; return emit_op(compiler, GET_OPCODE(op), flags | ALT_FORM2, dst, dstw, src2, src2w, TMP_REG2, 0); } } - if (GET_OPCODE(op) != SLJIT_AND && GET_OPCODE(op) != SLJIT_AND) { - /* Unlike or and xor, and resets unwanted bits as well. */ + if (GET_OPCODE(op) != SLJIT_AND) { + /* Unlike or and xor, the and resets unwanted bits as well. */ if (TEST_UI_IMM(src2, src2w)) { - compiler->imm = src2w; + compiler->imm = (sljit_ins)src2w; return emit_op(compiler, GET_OPCODE(op), flags | ALT_FORM3, dst, dstw, src1, src1w, TMP_REG2, 0); } if (TEST_UI_IMM(src1, src1w)) { - compiler->imm = src1w; + compiler->imm = (sljit_ins)src1w; return emit_op(compiler, GET_OPCODE(op), flags | ALT_FORM3, dst, dstw, src2, src2w, TMP_REG2, 0); } } @@ -1562,11 +1643,11 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile case SLJIT_LSHR: case SLJIT_ASHR: #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64) - if (op & SLJIT_I32_OP) + if (op & SLJIT_32) flags |= ALT_FORM2; #endif if (src2 & SLJIT_IMM) { - compiler->imm = src2w; + compiler->imm = (sljit_ins)src2w; return emit_op(compiler, GET_OPCODE(op), flags | ALT_FORM1, dst, dstw, src1, src1w, TMP_REG2, 0); } return emit_op(compiler, GET_OPCODE(op), flags, dst, dstw, src1, src1w, src2, src2w); @@ -1575,6 +1656,20 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile return SLJIT_SUCCESS; } +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2u(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2, sljit_sw src2w) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_op2(compiler, op, 1, 0, 0, src1, src1w, src2, src2w)); + +#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ + || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) + compiler->skip_checks = 1; +#endif + return sljit_emit_op2(compiler, op, TMP_REG2, 0, src1, src1w, src2, src2w); +} + #undef TEST_ADD_FORM1 #undef TEST_SUB_FORM2 #undef TEST_SUB_FORM3 @@ -1621,7 +1716,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_float_register_index(sljit_s32 reg) } SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_custom(struct sljit_compiler *compiler, - void *instruction, sljit_s32 size) + void *instruction, sljit_u32 size) { CHECK_ERROR(); CHECK(check_sljit_emit_op_custom(compiler, instruction, size)); @@ -1633,8 +1728,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_custom(struct sljit_compiler *c /* Floating point operators */ /* --------------------------------------------------------------------- */ -#define FLOAT_DATA(op) (DOUBLE_DATA | ((op & SLJIT_F32_OP) >> 6)) -#define SELECT_FOP(op, single, double) ((op & SLJIT_F32_OP) ? single : double) +#define FLOAT_DATA(op) (DOUBLE_DATA | ((op & SLJIT_32) >> 6)) +#define SELECT_FOP(op, single, double) ((sljit_ins)((op & SLJIT_32) ? single : double)) #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64) #define FLOAT_TMP_MEM_OFFSET (6 * sizeof(sljit_sw)) @@ -1688,7 +1783,7 @@ static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_sw_from_f64(struct sljit_comp dstw &= 0x3; if (dstw) { #if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32) - FAIL_IF(push_inst(compiler, RLWINM | S(OFFS_REG(dst)) | A(TMP_REG1) | (dstw << 11) | ((31 - dstw) << 1))); + FAIL_IF(push_inst(compiler, RLWINM | S(OFFS_REG(dst)) | A(TMP_REG1) | ((sljit_ins)dstw << 11) | ((31 - (sljit_ins)dstw) << 1))); #else FAIL_IF(push_inst(compiler, RLDI(TMP_REG1, OFFS_REG(dst), dstw, 63 - dstw, 1))); #endif @@ -1745,7 +1840,7 @@ static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_f64_from_sw(struct sljit_comp if (dst & SLJIT_MEM) return emit_op_mem(compiler, FLOAT_DATA(op), TMP_FREG1, dst, dstw, TMP_REG1); - if (op & SLJIT_F32_OP) + if (op & SLJIT_32) return push_inst(compiler, FRSP | FD(dst_r) | FB(dst_r)); return SLJIT_SUCCESS; @@ -1755,7 +1850,7 @@ static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_f64_from_sw(struct sljit_comp sljit_s32 invert_sign = 1; if (src & SLJIT_IMM) { - FAIL_IF(load_immediate(compiler, TMP_REG1, srcw ^ 0x80000000)); + FAIL_IF(load_immediate(compiler, TMP_REG1, srcw ^ (sljit_sw)0x80000000)); src = TMP_REG1; invert_sign = 0; } @@ -1783,7 +1878,7 @@ static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_f64_from_sw(struct sljit_comp if (dst & SLJIT_MEM) return emit_op_mem(compiler, FLOAT_DATA(op), TMP_FREG1, dst, dstw, TMP_REG1); - if (op & SLJIT_F32_OP) + if (op & SLJIT_32) return push_inst(compiler, FRSP | FD(dst_r) | FB(dst_r)); return SLJIT_SUCCESS; @@ -1815,11 +1910,11 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compil CHECK_ERROR(); - SLJIT_COMPILE_ASSERT((SLJIT_F32_OP == 0x100) && !(DOUBLE_DATA & 0x4), float_transfer_bit_error); + SLJIT_COMPILE_ASSERT((SLJIT_32 == 0x100) && !(DOUBLE_DATA & 0x4), float_transfer_bit_error); SELECT_FOP1_OPERATION_WITH_CHECKS(compiler, op, dst, dstw, src, srcw); if (GET_OPCODE(op) == SLJIT_CONV_F64_FROM_F32) - op ^= SLJIT_F32_OP; + op ^= SLJIT_32; dst_r = FAST_IS_REG(dst) ? dst : TMP_FREG1; @@ -1830,8 +1925,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compil switch (GET_OPCODE(op)) { case SLJIT_CONV_F64_FROM_F32: - op ^= SLJIT_F32_OP; - if (op & SLJIT_F32_OP) { + op ^= SLJIT_32; + if (op & SLJIT_32) { FAIL_IF(push_inst(compiler, FRSP | FD(dst_r) | FB(src))); break; } @@ -1946,12 +2041,22 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_label* sljit_emit_label(struct sljit_compi return label; } -static sljit_ins get_bo_bi_flags(sljit_s32 type) +static sljit_ins get_bo_bi_flags(struct sljit_compiler *compiler, sljit_s32 type) { switch (type) { + case SLJIT_NOT_CARRY: + if (compiler->status_flags_state & SLJIT_CURRENT_FLAGS_SUB) + return (4 << 21) | (2 << 16); + /* fallthrough */ + case SLJIT_EQUAL: return (12 << 21) | (2 << 16); + case SLJIT_CARRY: + if (compiler->status_flags_state & SLJIT_CURRENT_FLAGS_SUB) + return (12 << 21) | (2 << 16); + /* fallthrough */ + case SLJIT_NOT_EQUAL: return (4 << 21) | (2 << 16); @@ -2015,15 +2120,18 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile CHECK_ERROR_PTR(); CHECK_PTR(check_sljit_emit_jump(compiler, type)); - bo_bi_flags = get_bo_bi_flags(type & 0xff); + bo_bi_flags = get_bo_bi_flags(compiler, type & 0xff); if (!bo_bi_flags) return NULL; jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump)); PTR_FAIL_IF(!jump); - set_jump(jump, compiler, type & SLJIT_REWRITABLE_JUMP); + set_jump(jump, compiler, (sljit_u32)type & SLJIT_REWRITABLE_JUMP); type &= 0xff; + if (type == SLJIT_CARRY || type == SLJIT_NOT_CARRY) + PTR_FAIL_IF(push_inst(compiler, ADDE | RC(ALT_SET_FLAGS) | D(TMP_REG1) | A(TMP_ZERO) | B(TMP_ZERO))); + /* In PPC, we don't need to touch the arguments. */ if (type < SLJIT_JUMP) jump->flags |= IS_COND; @@ -2049,6 +2157,11 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_call(struct sljit_compile PTR_FAIL_IF(call_with_args(compiler, arg_types, NULL)); #endif + if (type & SLJIT_CALL_RETURN) { + PTR_FAIL_IF(emit_stack_frame_release(compiler)); + type = SLJIT_JUMP | (type & SLJIT_REWRITABLE_JUMP); + } + #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) compiler->skip_checks = 1; @@ -2068,25 +2181,27 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_ijump(struct sljit_compiler *compi if (FAST_IS_REG(src)) { #if (defined SLJIT_PASS_ENTRY_ADDR_TO_CALL && SLJIT_PASS_ENTRY_ADDR_TO_CALL) - if (type >= SLJIT_CALL) { + if (type >= SLJIT_CALL && src != TMP_CALL_REG) { FAIL_IF(push_inst(compiler, OR | S(src) | A(TMP_CALL_REG) | B(src))); src_r = TMP_CALL_REG; } else src_r = src; -#else +#else /* SLJIT_PASS_ENTRY_ADDR_TO_CALL */ src_r = src; -#endif +#endif /* SLJIT_PASS_ENTRY_ADDR_TO_CALL */ } else if (src & SLJIT_IMM) { /* These jumps are converted to jump/call instructions when possible. */ jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump)); FAIL_IF(!jump); set_jump(jump, compiler, JUMP_ADDR); - jump->u.target = srcw; + jump->u.target = (sljit_uw)srcw; + #if (defined SLJIT_PASS_ENTRY_ADDR_TO_CALL && SLJIT_PASS_ENTRY_ADDR_TO_CALL) if (type >= SLJIT_CALL) jump->flags |= IS_CALL; -#endif +#endif /* SLJIT_PASS_ENTRY_ADDR_TO_CALL */ + FAIL_IF(emit_const(compiler, TMP_CALL_REG, 0)); src_r = TMP_CALL_REG; } @@ -2108,13 +2223,23 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_icall(struct sljit_compiler *compi CHECK_ERROR(); CHECK(check_sljit_emit_icall(compiler, type, arg_types, src, srcw)); -#if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64) if (src & SLJIT_MEM) { ADJUST_LOCAL_OFFSET(src, srcw); FAIL_IF(emit_op(compiler, SLJIT_MOV, WORD_DATA, TMP_CALL_REG, 0, TMP_REG1, 0, src, srcw)); src = TMP_CALL_REG; } + if (type & SLJIT_CALL_RETURN) { + if (src >= SLJIT_FIRST_SAVED_REG && src <= SLJIT_S0) { + FAIL_IF(push_inst(compiler, OR | S(src) | A(TMP_CALL_REG) | B(src))); + src = TMP_CALL_REG; + } + + FAIL_IF(emit_stack_frame_release(compiler)); + type = SLJIT_JUMP; + } + +#if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64) FAIL_IF(call_with_args(compiler, arg_types, &src)); #endif @@ -2130,20 +2255,20 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co sljit_s32 dst, sljit_sw dstw, sljit_s32 type) { - sljit_s32 reg, input_flags, cr_bit, invert; + sljit_s32 reg, invert; + sljit_u32 bit, from_xer; sljit_s32 saved_op = op; sljit_sw saved_dstw = dstw; +#if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64) + sljit_s32 input_flags = ((op & SLJIT_32) || op == SLJIT_MOV32) ? INT_DATA : WORD_DATA; +#else + sljit_s32 input_flags = WORD_DATA; +#endif CHECK_ERROR(); CHECK(check_sljit_emit_op_flags(compiler, op, dst, dstw, type)); ADJUST_LOCAL_OFFSET(dst, dstw); -#if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64) - input_flags = (op & SLJIT_I32_OP) ? INT_DATA : WORD_DATA; -#else - input_flags = WORD_DATA; -#endif - op = GET_OPCODE(op); reg = (op < SLJIT_ADD && FAST_IS_REG(dst)) ? dst : TMP_REG2; @@ -2151,7 +2276,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co FAIL_IF(emit_op_mem(compiler, input_flags | LOAD_DATA, TMP_REG1, dst, dstw, TMP_REG1)); invert = 0; - cr_bit = 0; + bit = 0; + from_xer = 0; switch (type & 0xff) { case SLJIT_LESS: @@ -2165,66 +2291,80 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co case SLJIT_GREATER: case SLJIT_SIG_GREATER: - cr_bit = 1; + bit = 1; break; case SLJIT_LESS_EQUAL: case SLJIT_SIG_LESS_EQUAL: - cr_bit = 1; + bit = 1; invert = 1; break; case SLJIT_EQUAL: - cr_bit = 2; + bit = 2; break; case SLJIT_NOT_EQUAL: - cr_bit = 2; + bit = 2; invert = 1; break; case SLJIT_OVERFLOW: - cr_bit = 3; + from_xer = 1; + bit = 1; break; case SLJIT_NOT_OVERFLOW: - cr_bit = 3; + from_xer = 1; + bit = 1; invert = 1; break; + case SLJIT_CARRY: + from_xer = 1; + bit = 2; + invert = (compiler->status_flags_state & SLJIT_CURRENT_FLAGS_SUB) != 0; + break; + + case SLJIT_NOT_CARRY: + from_xer = 1; + bit = 2; + invert = (compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD) != 0; + break; + case SLJIT_LESS_F64: - cr_bit = 4 + 0; + bit = 4 + 0; break; case SLJIT_GREATER_EQUAL_F64: - cr_bit = 4 + 0; + bit = 4 + 0; invert = 1; break; case SLJIT_GREATER_F64: - cr_bit = 4 + 1; + bit = 4 + 1; break; case SLJIT_LESS_EQUAL_F64: - cr_bit = 4 + 1; + bit = 4 + 1; invert = 1; break; case SLJIT_EQUAL_F64: - cr_bit = 4 + 2; + bit = 4 + 2; break; case SLJIT_NOT_EQUAL_F64: - cr_bit = 4 + 2; + bit = 4 + 2; invert = 1; break; case SLJIT_UNORDERED_F64: - cr_bit = 4 + 3; + bit = 4 + 3; break; case SLJIT_ORDERED_F64: - cr_bit = 4 + 3; + bit = 4 + 3; invert = 1; break; @@ -2233,8 +2373,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co break; } - FAIL_IF(push_inst(compiler, MFCR | D(reg))); - FAIL_IF(push_inst(compiler, RLWINM | S(reg) | A(reg) | ((1 + (cr_bit)) << 11) | (31 << 6) | (31 << 1))); + FAIL_IF(push_inst(compiler, (from_xer ? MFXER : MFCR) | D(reg))); + FAIL_IF(push_inst(compiler, RLWINM | S(reg) | A(reg) | ((1 + bit) << 11) | (31 << 6) | (31 << 1))); if (invert) FAIL_IF(push_inst(compiler, XORI | S(reg) | A(reg) | 0x1)); @@ -2283,19 +2423,21 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_mem(struct sljit_compiler *compile #if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32) case SLJIT_MOV_U32: case SLJIT_MOV_S32: + case SLJIT_MOV32: #endif mem_flags = WORD_DATA; break; #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64) case SLJIT_MOV_U32: + case SLJIT_MOV32: mem_flags = INT_DATA; break; case SLJIT_MOV_S32: mem_flags = INT_DATA; - if (!(type & SLJIT_MEM_STORE) && !(type & SLJIT_I32_OP)) { + if (!(type & SLJIT_MEM_STORE) && !(type & SLJIT_32)) { if (mem & OFFS_REG_MASK) mem_flags |= SIGNED_DATA; else @@ -2436,7 +2578,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_put_label* sljit_emit_put_label(struct slj #if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32) PTR_FAIL_IF(emit_const(compiler, dst_r, 0)); #else - PTR_FAIL_IF(push_inst(compiler, dst_r)); + PTR_FAIL_IF(push_inst(compiler, (sljit_ins)dst_r)); compiler->size += 4; #endif diff --git a/thirdparty/pcre2/src/sljit/sljitNativeS390X.c b/thirdparty/pcre2/src/sljit/sljitNativeS390X.c index 716491ec72..8eef910c42 100644 --- a/thirdparty/pcre2/src/sljit/sljitNativeS390X.c +++ b/thirdparty/pcre2/src/sljit/sljitNativeS390X.c @@ -44,6 +44,9 @@ typedef sljit_uw sljit_ins; /* Instruction tags (most significant halfword). */ static const sljit_ins sljit_ins_const = (sljit_ins)1 << 48; +#define TMP_REG1 (SLJIT_NUMBER_OF_REGISTERS + 2) +#define TMP_REG2 (SLJIT_NUMBER_OF_REGISTERS + 3) + static const sljit_u8 reg_map[SLJIT_NUMBER_OF_REGISTERS + 4] = { 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 0, 1 }; @@ -97,20 +100,37 @@ static const sljit_gpr r15 = 15; /* reg_map[SLJIT_NUMBER_OF_REGISTERS + 1]: stac * link register doesn't need to change */ +/* When reg cannot be unused. */ +#define IS_GPR_REG(reg) ((reg > 0) && (reg) <= SLJIT_SP) + /* Link registers. The normal link register is r14, but since we use that for flags we need to use r0 instead to do fast calls so that flags are preserved. */ static const sljit_gpr link_r = 14; /* r14 */ static const sljit_gpr fast_link_r = 0; /* r0 */ -/* Flag register layout: +#define TMP_FREG1 (0) + +static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 1] = { + 1, 0, 2, 4, 6, 3, 5, 7, 15, 14, 13, 12, 11, 10, 9, 8, +}; + +#define R0A(r) (r) +#define R4A(r) ((r) << 4) +#define R8A(r) ((r) << 8) +#define R12A(r) ((r) << 12) +#define R16A(r) ((r) << 16) +#define R20A(r) ((r) << 20) +#define R28A(r) ((r) << 28) +#define R32A(r) ((r) << 32) +#define R36A(r) ((r) << 36) - 0 32 33 34 36 64 - +---------------+---+---+-------+-------+ - | ZERO | 0 | 0 | C C |///////| - +---------------+---+---+-------+-------+ -*/ -static const sljit_gpr flag_r = 14; /* r14 */ +#define R0(r) ((sljit_ins)reg_map[r]) + +#define F0(r) ((sljit_ins)freg_map[r]) +#define F4(r) (R4A((sljit_ins)freg_map[r])) +#define F20(r) (R20A((sljit_ins)freg_map[r])) +#define F36(r) (R36A((sljit_ins)freg_map[r])) struct sljit_s390x_const { struct sljit_const const_; /* must be first */ @@ -124,19 +144,25 @@ static SLJIT_INLINE sljit_gpr gpr(sljit_s32 r) return reg_map[r]; } +static SLJIT_INLINE sljit_gpr fgpr(sljit_s32 r) +{ + SLJIT_ASSERT(r >= 0 && r < (sljit_s32)(sizeof(freg_map) / sizeof(freg_map[0]))); + return freg_map[r]; +} + /* Size of instruction in bytes. Tags must already be cleared. */ static SLJIT_INLINE sljit_uw sizeof_ins(sljit_ins ins) { /* keep faulting instructions */ if (ins == 0) - return 2; + return 2; if ((ins & 0x00000000ffffL) == ins) - return 2; + return 2; if ((ins & 0x0000ffffffffL) == ins) - return 4; + return 4; if ((ins & 0xffffffffffffL) == ins) - return 6; + return 6; SLJIT_UNREACHABLE(); return (sljit_uw)-1; @@ -172,7 +198,8 @@ static sljit_s32 encode_inst(void **ptr, sljit_ins ins) } #define SLJIT_ADD_SUB_NO_COMPARE(status_flags_state) \ - (((status_flags_state) & (SLJIT_CURRENT_FLAGS_ADD_SUB | SLJIT_CURRENT_FLAGS_COMPARE)) == SLJIT_CURRENT_FLAGS_ADD_SUB) + (((status_flags_state) & (SLJIT_CURRENT_FLAGS_ADD | SLJIT_CURRENT_FLAGS_SUB)) \ + && !((status_flags_state) & SLJIT_CURRENT_FLAGS_COMPARE)) /* Map the given type to a 4-bit condition code mask. */ static SLJIT_INLINE sljit_u8 get_cc(struct sljit_compiler *compiler, sljit_s32 type) { @@ -191,6 +218,7 @@ static SLJIT_INLINE sljit_u8 get_cc(struct sljit_compiler *compiler, sljit_s32 t return (cc0 | cc3); return (cc0 | cc2); } + /* fallthrough */ case SLJIT_EQUAL_F64: return cc0; @@ -204,6 +232,7 @@ static SLJIT_INLINE sljit_u8 get_cc(struct sljit_compiler *compiler, sljit_s32 t return (cc1 | cc2); return (cc1 | cc3); } + /* fallthrough */ case SLJIT_NOT_EQUAL_F64: return (cc1 | cc2 | cc3); @@ -228,10 +257,20 @@ static SLJIT_INLINE sljit_u8 get_cc(struct sljit_compiler *compiler, sljit_s32 t case SLJIT_LESS_F64: return cc1; + case SLJIT_NOT_CARRY: + if (compiler->status_flags_state & SLJIT_CURRENT_FLAGS_SUB) + return (cc2 | cc3); + /* fallthrough */ + case SLJIT_SIG_LESS_EQUAL: case SLJIT_LESS_EQUAL_F64: return (cc0 | cc1); + case SLJIT_CARRY: + if (compiler->status_flags_state & SLJIT_CURRENT_FLAGS_SUB) + return (cc0 | cc1); + /* fallthrough */ + case SLJIT_SIG_GREATER: /* Overflow is considered greater, see SLJIT_SUB. */ return cc2 | cc3; @@ -242,6 +281,7 @@ static SLJIT_INLINE sljit_u8 get_cc(struct sljit_compiler *compiler, sljit_s32 t case SLJIT_OVERFLOW: if (compiler->status_flags_state & SLJIT_SET_Z) return (cc2 | cc3); + /* fallthrough */ case SLJIT_UNORDERED_F64: return cc3; @@ -249,6 +289,7 @@ static SLJIT_INLINE sljit_u8 get_cc(struct sljit_compiler *compiler, sljit_s32 t case SLJIT_NOT_OVERFLOW: if (compiler->status_flags_state & SLJIT_SET_Z) return (cc0 | cc1); + /* fallthrough */ case SLJIT_ORDERED_F64: return (cc0 | cc1 | cc2); @@ -444,7 +485,7 @@ SLJIT_S390X_RR(or, 0x1600) #define SLJIT_S390X_RRE(name, pattern) \ SLJIT_S390X_INSTRUCTION(name, sljit_gpr dst, sljit_gpr src) \ { \ - return (pattern) | ((dst & 0xf) << 4) | (src & 0xf); \ + return (pattern) | R4A(dst) | R0A(src); \ } /* AND */ @@ -504,7 +545,7 @@ SLJIT_S390X_RRE(sgr, 0xb9090000) #define SLJIT_S390X_RIA(name, pattern, imm_type) \ SLJIT_S390X_INSTRUCTION(name, sljit_gpr reg, imm_type imm) \ { \ - return (pattern) | ((reg & 0xf) << 20) | (imm & 0xffff); \ + return (pattern) | R20A(reg) | (imm & 0xffff); \ } /* ADD HALFWORD IMMEDIATE */ @@ -534,7 +575,7 @@ SLJIT_S390X_RIA(oilh, 0xa50a0000, sljit_u16) SLJIT_S390X_INSTRUCTION(name, sljit_gpr reg, imm_type imm) \ { \ SLJIT_ASSERT(have_eimm()); \ - return (pattern) | ((sljit_ins)(reg & 0xf) << 36) | (imm & 0xffffffff); \ + return (pattern) | R36A(reg) | ((sljit_ins)imm & 0xffffffffu); \ } /* ADD IMMEDIATE */ @@ -567,17 +608,11 @@ SLJIT_S390X_RILA(slfi, 0xc20500000000, sljit_u32) /* RX-a form instructions */ #define SLJIT_S390X_RXA(name, pattern) \ -SLJIT_S390X_INSTRUCTION(name, sljit_gpr r, sljit_u16 d, sljit_gpr x, sljit_gpr b) \ +SLJIT_S390X_INSTRUCTION(name, sljit_gpr r, sljit_s32 d, sljit_gpr x, sljit_gpr b) \ { \ - sljit_ins ri, xi, bi, di; \ -\ SLJIT_ASSERT((d & 0xfff) == d); \ - ri = (sljit_ins)(r & 0xf) << 20; \ - xi = (sljit_ins)(x & 0xf) << 16; \ - bi = (sljit_ins)(b & 0xf) << 12; \ - di = (sljit_ins)(d & 0xfff); \ \ - return (pattern) | ri | xi | bi | di; \ + return (pattern) | R20A(r) | R16A(x) | R12A(b) | (sljit_ins)(d & 0xfff); \ } /* LOAD */ @@ -607,15 +642,9 @@ SLJIT_S390X_RXA(sth, 0x40000000) #define SLJIT_S390X_RXYA(name, pattern, cond) \ SLJIT_S390X_INSTRUCTION(name, sljit_gpr r, sljit_s32 d, sljit_gpr x, sljit_gpr b) \ { \ - sljit_ins ri, xi, bi, di; \ -\ SLJIT_ASSERT(cond); \ - ri = (sljit_ins)(r & 0xf) << 36; \ - xi = (sljit_ins)(x & 0xf) << 32; \ - bi = (sljit_ins)(b & 0xf) << 28; \ - di = disp_s20(d); \ \ - return (pattern) | ri | xi | bi | di; \ + return (pattern) | R36A(r) | R32A(x) | R28A(b) | disp_s20(d); \ } /* LOAD */ @@ -660,17 +689,11 @@ SLJIT_S390X_RXYA(sthy, 0xe30000000070, have_ldisp()) /* RSY-a instructions */ #define SLJIT_S390X_RSYA(name, pattern, cond) \ -SLJIT_S390X_INSTRUCTION(name, sljit_gpr dst, sljit_gpr src, sljit_sw d, sljit_gpr b) \ +SLJIT_S390X_INSTRUCTION(name, sljit_gpr dst, sljit_gpr src, sljit_s32 d, sljit_gpr b) \ { \ - sljit_ins r1, r3, b2, d2; \ -\ SLJIT_ASSERT(cond); \ - r1 = (sljit_ins)(dst & 0xf) << 36; \ - r3 = (sljit_ins)(src & 0xf) << 32; \ - b2 = (sljit_ins)(b & 0xf) << 28; \ - d2 = disp_s20(d); \ \ - return (pattern) | r1 | r3 | b2 | d2; \ + return (pattern) | R36A(dst) | R32A(src) | R28A(b) | disp_s20(d); \ } /* LOAD MULTIPLE */ @@ -691,16 +714,14 @@ SLJIT_S390X_RSYA(stmg, 0xeb0000000024, 1) #define SLJIT_S390X_RIEF(name, pattern) \ SLJIT_S390X_INSTRUCTION(name, sljit_gpr dst, sljit_gpr src, sljit_u8 start, sljit_u8 end, sljit_u8 rot) \ { \ - sljit_ins r1, r2, i3, i4, i5; \ + sljit_ins i3, i4, i5; \ \ SLJIT_ASSERT(have_genext()); \ - r1 = (sljit_ins)(dst & 0xf) << 36; \ - r2 = (sljit_ins)(src & 0xf) << 32; \ i3 = (sljit_ins)start << 24; \ i4 = (sljit_ins)end << 16; \ i5 = (sljit_ins)rot << 8; \ \ - return (pattern) | r1 | r2 | i3 | i4 | i5; \ + return (pattern) | R36A(dst & 0xf) | R32A(src & 0xf) | i3 | i4 | i5; \ } /* ROTATE THEN AND SELECTED BITS */ @@ -728,14 +749,12 @@ SLJIT_S390X_RIEF(risbhg, 0xec000000005d) #define SLJIT_S390X_RRFC(name, pattern) \ SLJIT_S390X_INSTRUCTION(name, sljit_gpr dst, sljit_gpr src, sljit_uw mask) \ { \ - sljit_ins r1, r2, m3; \ + sljit_ins m3; \ \ SLJIT_ASSERT(have_lscond1()); \ - r1 = (sljit_ins)(dst & 0xf) << 4; \ - r2 = (sljit_ins)(src & 0xf); \ m3 = (sljit_ins)(mask & 0xf) << 12; \ \ - return (pattern) | m3 | r1 | r2; \ + return (pattern) | m3 | R4A(dst) | R0A(src); \ } /* LOAD HALFWORD IMMEDIATE ON CONDITION */ @@ -748,14 +767,13 @@ SLJIT_S390X_RRFC(locgr, 0xb9e20000) #define SLJIT_S390X_RIEG(name, pattern) \ SLJIT_S390X_INSTRUCTION(name, sljit_gpr reg, sljit_sw imm, sljit_uw mask) \ { \ - sljit_ins r1, m3, i2; \ + sljit_ins m3, i2; \ \ SLJIT_ASSERT(have_lscond2()); \ - r1 = (sljit_ins)(reg & 0xf) << 36; \ m3 = (sljit_ins)(mask & 0xf) << 32; \ i2 = (sljit_ins)(imm & 0xffffL) << 16; \ \ - return (pattern) | r1 | m3 | i2; \ + return (pattern) | R36A(reg) | m3 | i2; \ } /* LOAD HALFWORD IMMEDIATE ON CONDITION */ @@ -767,13 +785,9 @@ SLJIT_S390X_RIEG(locghi, 0xec0000000046) #define SLJIT_S390X_RILB(name, pattern, cond) \ SLJIT_S390X_INSTRUCTION(name, sljit_gpr reg, sljit_sw ri) \ { \ - sljit_ins r1, ri2; \ -\ SLJIT_ASSERT(cond); \ - r1 = (sljit_ins)(reg & 0xf) << 36; \ - ri2 = (sljit_ins)(ri & 0xffffffff); \ \ - return (pattern) | r1 | ri2; \ + return (pattern) | R36A(reg) | (sljit_ins)(ri & 0xffffffff); \ } /* BRANCH RELATIVE AND SAVE LONG */ @@ -808,22 +822,20 @@ SLJIT_S390X_INSTRUCTION(brcl, sljit_uw mask, sljit_sw target) SLJIT_S390X_INSTRUCTION(flogr, sljit_gpr dst, sljit_gpr src) { - sljit_ins r1 = ((sljit_ins)dst & 0xf) << 8; - sljit_ins r2 = ((sljit_ins)src & 0xf); SLJIT_ASSERT(have_eimm()); - return 0xb9830000 | r1 | r2; + return 0xb9830000 | R8A(dst) | R0A(src); } /* INSERT PROGRAM MASK */ SLJIT_S390X_INSTRUCTION(ipm, sljit_gpr dst) { - return 0xb2220000 | ((sljit_ins)(dst & 0xf) << 4); + return 0xb2220000 | R4A(dst); } /* SET PROGRAM MASK */ SLJIT_S390X_INSTRUCTION(spm, sljit_gpr dst) { - return 0x0400 | ((sljit_ins)(dst & 0xf) << 4); + return 0x0400 | R4A(dst); } /* ROTATE THEN INSERT SELECTED BITS HIGH (ZERO) */ @@ -842,12 +854,12 @@ static sljit_s32 update_zero_overflow(struct sljit_compiler *compiler, sljit_s32 1 (non-zero and no overflow) : unchanged 2 (zero and overflow) : decreased by 1 3 (non-zero and overflow) : decreased by 1 if non-zero */ - FAIL_IF(push_inst(compiler, brc(0xc, 2 + 2 + ((op & SLJIT_I32_OP) ? 1 : 2) + 2 + 3 + 1))); - FAIL_IF(push_inst(compiler, ipm(flag_r))); - FAIL_IF(push_inst(compiler, (op & SLJIT_I32_OP) ? or(dst_r, dst_r) : ogr(dst_r, dst_r))); + FAIL_IF(push_inst(compiler, brc(0xc, 2 + 2 + ((op & SLJIT_32) ? 1 : 2) + 2 + 3 + 1))); + FAIL_IF(push_inst(compiler, ipm(tmp1))); + FAIL_IF(push_inst(compiler, (op & SLJIT_32) ? or(dst_r, dst_r) : ogr(dst_r, dst_r))); FAIL_IF(push_inst(compiler, brc(0x8, 2 + 3))); - FAIL_IF(push_inst(compiler, slfi(flag_r, 0x10000000))); - FAIL_IF(push_inst(compiler, spm(flag_r))); + FAIL_IF(push_inst(compiler, slfi(tmp1, 0x10000000))); + FAIL_IF(push_inst(compiler, spm(tmp1))); return SLJIT_SUCCESS; } @@ -858,16 +870,16 @@ static sljit_s32 push_load_imm_inst(struct sljit_compiler *compiler, sljit_gpr t if (is_s16(v)) return push_inst(compiler, lghi(target, (sljit_s16)v)); - if ((sljit_uw)v == (v & 0x000000000000ffffU)) + if (((sljit_uw)v & ~(sljit_uw)0x000000000000ffff) == 0) return push_inst(compiler, llill(target, (sljit_u16)v)); - if ((sljit_uw)v == (v & 0x00000000ffff0000U)) + if (((sljit_uw)v & ~(sljit_uw)0x00000000ffff0000) == 0) return push_inst(compiler, llilh(target, (sljit_u16)(v >> 16))); - if ((sljit_uw)v == (v & 0x0000ffff00000000U)) + if (((sljit_uw)v & ~(sljit_uw)0x0000ffff00000000) == 0) return push_inst(compiler, llihl(target, (sljit_u16)(v >> 32))); - if ((sljit_uw)v == (v & 0xffff000000000000U)) + if (((sljit_uw)v & ~(sljit_uw)0xffff000000000000) == 0) return push_inst(compiler, llihh(target, (sljit_u16)(v >> 48))); /* 6 byte instructions (requires extended immediate facility) */ @@ -875,15 +887,16 @@ static sljit_s32 push_load_imm_inst(struct sljit_compiler *compiler, sljit_gpr t if (is_s32(v)) return push_inst(compiler, lgfi(target, (sljit_s32)v)); - if ((sljit_uw)v == (v & 0x00000000ffffffffU)) + if (((sljit_uw)v >> 32) == 0) return push_inst(compiler, llilf(target, (sljit_u32)v)); - if ((sljit_uw)v == (v & 0xffffffff00000000U)) - return push_inst(compiler, llihf(target, (sljit_u32)(v >> 32))); + if (((sljit_uw)v << 32) == 0) + return push_inst(compiler, llihf(target, (sljit_u32)((sljit_uw)v >> 32))); FAIL_IF(push_inst(compiler, llilf(target, (sljit_u32)v))); return push_inst(compiler, iihf(target, (sljit_u32)(v >> 32))); } + /* TODO(mundaym): instruction sequences that don't use extended immediates */ abort(); } @@ -891,7 +904,7 @@ static sljit_s32 push_load_imm_inst(struct sljit_compiler *compiler, sljit_gpr t struct addr { sljit_gpr base; sljit_gpr index; - sljit_sw offset; + sljit_s32 offset; }; /* transform memory operand into D(X,B) form with a signed 20-bit offset */ @@ -911,7 +924,7 @@ static sljit_s32 make_addr_bxy(struct sljit_compiler *compiler, if (off != 0) { /* shift and put the result into tmp */ SLJIT_ASSERT(0 <= off && off < 64); - FAIL_IF(push_inst(compiler, sllg(tmp, index, off, 0))); + FAIL_IF(push_inst(compiler, sllg(tmp, index, (sljit_s32)off, 0))); index = tmp; off = 0; /* clear offset */ } @@ -923,7 +936,7 @@ static sljit_s32 make_addr_bxy(struct sljit_compiler *compiler, } addr->base = base; addr->index = index; - addr->offset = off; + addr->offset = (sljit_s32)off; return SLJIT_SUCCESS; } @@ -944,7 +957,7 @@ static sljit_s32 make_addr_bx(struct sljit_compiler *compiler, if (off != 0) { /* shift and put the result into tmp */ SLJIT_ASSERT(0 <= off && off < 64); - FAIL_IF(push_inst(compiler, sllg(tmp, index, off, 0))); + FAIL_IF(push_inst(compiler, sllg(tmp, index, (sljit_s32)off, 0))); index = tmp; off = 0; /* clear offset */ } @@ -956,7 +969,7 @@ static sljit_s32 make_addr_bx(struct sljit_compiler *compiler, } addr->base = base; addr->index = index; - addr->offset = off; + addr->offset = (sljit_s32)off; return SLJIT_SUCCESS; } @@ -1014,16 +1027,16 @@ static sljit_s32 emit_move(struct sljit_compiler *compiler, sljit_gpr dst_r, sljit_s32 src, sljit_sw srcw) { - SLJIT_ASSERT(!SLOW_IS_REG(src) || dst_r != gpr(src & REG_MASK)); + SLJIT_ASSERT(!IS_GPR_REG(src) || dst_r != gpr(src & REG_MASK)); if (src & SLJIT_IMM) return push_load_imm_inst(compiler, dst_r, srcw); if (src & SLJIT_MEM) - return load_word(compiler, dst_r, src, srcw, (compiler->mode & SLJIT_I32_OP) != 0); + return load_word(compiler, dst_r, src, srcw, (compiler->mode & SLJIT_32) != 0); sljit_gpr src_r = gpr(src & REG_MASK); - return push_inst(compiler, (compiler->mode & SLJIT_I32_OP) ? lr(dst_r, src_r) : lgr(dst_r, src_r)); + return push_inst(compiler, (compiler->mode & SLJIT_32) ? lr(dst_r, src_r) : lgr(dst_r, src_r)); } static sljit_s32 emit_rr(struct sljit_compiler *compiler, sljit_ins ins, @@ -1035,8 +1048,8 @@ static sljit_s32 emit_rr(struct sljit_compiler *compiler, sljit_ins ins, sljit_gpr src_r = tmp1; sljit_s32 needs_move = 1; - if (SLOW_IS_REG(dst)) { - dst_r = gpr(dst & REG_MASK); + if (FAST_IS_REG(dst)) { + dst_r = gpr(dst); if (dst == src1) needs_move = 0; @@ -1050,17 +1063,32 @@ static sljit_s32 emit_rr(struct sljit_compiler *compiler, sljit_ins ins, FAIL_IF(emit_move(compiler, dst_r, src1, src1w)); if (FAST_IS_REG(src2)) - src_r = gpr(src2 & REG_MASK); + src_r = gpr(src2); else FAIL_IF(emit_move(compiler, tmp1, src2, src2w)); - FAIL_IF(push_inst(compiler, ins | (dst_r << 4) | src_r)); + FAIL_IF(push_inst(compiler, ins | R4A(dst_r) | R0A(src_r))); if (needs_move != 2) return SLJIT_SUCCESS; dst_r = gpr(dst & REG_MASK); - return push_inst(compiler, (compiler->mode & SLJIT_I32_OP) ? lr(dst_r, tmp0) : lgr(dst_r, tmp0)); + return push_inst(compiler, (compiler->mode & SLJIT_32) ? lr(dst_r, tmp0) : lgr(dst_r, tmp0)); +} + +static sljit_s32 emit_rr1(struct sljit_compiler *compiler, sljit_ins ins, + sljit_s32 dst, + sljit_s32 src1, sljit_sw src1w) +{ + sljit_gpr dst_r = FAST_IS_REG(dst) ? gpr(dst) : tmp0; + sljit_gpr src_r = tmp1; + + if (FAST_IS_REG(src1)) + src_r = gpr(src1); + else + FAIL_IF(emit_move(compiler, tmp1, src1, src1w)); + + return push_inst(compiler, ins | R4A(dst_r) | R0A(src_r)); } static sljit_s32 emit_rrf(struct sljit_compiler *compiler, sljit_ins ins, @@ -1068,21 +1096,21 @@ static sljit_s32 emit_rrf(struct sljit_compiler *compiler, sljit_ins ins, sljit_s32 src1, sljit_sw src1w, sljit_s32 src2, sljit_sw src2w) { - sljit_gpr dst_r = SLOW_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0; + sljit_gpr dst_r = FAST_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0; sljit_gpr src1_r = tmp0; sljit_gpr src2_r = tmp1; if (FAST_IS_REG(src1)) - src1_r = gpr(src1 & REG_MASK); + src1_r = gpr(src1); else FAIL_IF(emit_move(compiler, tmp0, src1, src1w)); if (FAST_IS_REG(src2)) - src2_r = gpr(src2 & REG_MASK); + src2_r = gpr(src2); else FAIL_IF(emit_move(compiler, tmp1, src2, src2w)); - return push_inst(compiler, ins | (dst_r << 4) | src1_r | (src2_r << 12)); + return push_inst(compiler, ins | R4A(dst_r) | R0A(src1_r) | R12A(src2_r)); } typedef enum { @@ -1099,8 +1127,8 @@ static sljit_s32 emit_ri(struct sljit_compiler *compiler, sljit_ins ins, sljit_gpr dst_r = tmp0; sljit_s32 needs_move = 1; - if (SLOW_IS_REG(dst)) { - dst_r = gpr(dst & REG_MASK); + if (FAST_IS_REG(dst)) { + dst_r = gpr(dst); if (dst == src1) needs_move = 0; @@ -1110,8 +1138,8 @@ static sljit_s32 emit_ri(struct sljit_compiler *compiler, sljit_ins ins, FAIL_IF(emit_move(compiler, dst_r, src1, src1w)); if (type == RIL_A) - return push_inst(compiler, ins | (dst_r << 36) | (src2w & 0xffffffff)); - return push_inst(compiler, ins | (dst_r << 20) | (src2w & 0xffff)); + return push_inst(compiler, ins | R36A(dst_r) | (src2w & 0xffffffff)); + return push_inst(compiler, ins | R20A(dst_r) | (src2w & 0xffff)); } static sljit_s32 emit_rie_d(struct sljit_compiler *compiler, sljit_ins ins, @@ -1119,15 +1147,15 @@ static sljit_s32 emit_rie_d(struct sljit_compiler *compiler, sljit_ins ins, sljit_s32 src1, sljit_sw src1w, sljit_sw src2w) { - sljit_gpr dst_r = SLOW_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0; + sljit_gpr dst_r = FAST_IS_REG(dst) ? gpr(dst) : tmp0; sljit_gpr src_r = tmp0; - if (!SLOW_IS_REG(src1)) + if (!FAST_IS_REG(src1)) FAIL_IF(emit_move(compiler, tmp0, src1, src1w)); else src_r = gpr(src1 & REG_MASK); - return push_inst(compiler, ins | (dst_r << 36) | (src_r << 32) | (src2w & 0xffff) << 16); + return push_inst(compiler, ins | R36A(dst_r) | R32A(src_r) | (sljit_ins)(src2w & 0xffff) << 16); } typedef enum { @@ -1147,7 +1175,7 @@ static sljit_s32 emit_rx(struct sljit_compiler *compiler, sljit_ins ins, SLJIT_ASSERT(src2 & SLJIT_MEM); - if (SLOW_IS_REG(dst)) { + if (FAST_IS_REG(dst)) { dst_r = gpr(dst); if (dst == src1) @@ -1183,9 +1211,9 @@ static sljit_s32 emit_rx(struct sljit_compiler *compiler, sljit_ins ins, } if (type == RX_A) - ins |= (dst_r << 20) | (index << 16) | (base << 12) | src2w; + ins |= R20A(dst_r) | R16A(index) | R12A(base) | (sljit_ins)src2w; else - ins |= (dst_r << 36) | (index << 32) | (base << 28) | disp_s20(src2w); + ins |= R36A(dst_r) | R32A(index) | R28A(base) | disp_s20((sljit_s32)src2w); FAIL_IF(push_inst(compiler, ins)); @@ -1193,7 +1221,7 @@ static sljit_s32 emit_rx(struct sljit_compiler *compiler, sljit_ins ins, return SLJIT_SUCCESS; dst_r = gpr(dst); - return push_inst(compiler, (compiler->mode & SLJIT_I32_OP) ? lr(dst_r, tmp0) : lgr(dst_r, tmp0)); + return push_inst(compiler, (compiler->mode & SLJIT_32) ? lr(dst_r, tmp0) : lgr(dst_r, tmp0)); } static sljit_s32 emit_siy(struct sljit_compiler *compiler, sljit_ins ins, @@ -1226,7 +1254,7 @@ static sljit_s32 emit_siy(struct sljit_compiler *compiler, sljit_ins ins, else dst_r = gpr(dst & REG_MASK); - return push_inst(compiler, ins | ((srcw & 0xff) << 32) | (dst_r << 28) | disp_s20(dstw)); + return push_inst(compiler, ins | ((sljit_ins)(srcw & 0xff) << 32) | R28A(dst_r) | disp_s20((sljit_s32)dstw)); } struct ins_forms { @@ -1240,7 +1268,7 @@ struct ins_forms { }; static sljit_s32 emit_commutative(struct sljit_compiler *compiler, const struct ins_forms *forms, - sljit_s32 dst, sljit_sw dstw, + sljit_s32 dst, sljit_s32 src1, sljit_sw src1w, sljit_s32 src2, sljit_sw src2w) { @@ -1250,7 +1278,7 @@ static sljit_s32 emit_commutative(struct sljit_compiler *compiler, const struct if ((src1 | src2) & SLJIT_MEM) { sljit_ins ins12, ins20; - if (mode & SLJIT_I32_OP) { + if (mode & SLJIT_32) { ins12 = forms->op; ins20 = forms->op_y; } @@ -1297,7 +1325,7 @@ static sljit_s32 emit_commutative(struct sljit_compiler *compiler, const struct } } - if (mode & SLJIT_I32_OP) { + if (mode & SLJIT_32) { ins = forms->op_r; ins_k = forms->op_rk; } @@ -1308,7 +1336,7 @@ static sljit_s32 emit_commutative(struct sljit_compiler *compiler, const struct SLJIT_ASSERT(ins != 0 || ins_k != 0); - if (ins && SLOW_IS_REG(dst)) { + if (ins && FAST_IS_REG(dst)) { if (dst == src1) return emit_rr(compiler, ins, dst, src1, src1w, src2, src2w); @@ -1323,7 +1351,7 @@ static sljit_s32 emit_commutative(struct sljit_compiler *compiler, const struct } static sljit_s32 emit_non_commutative(struct sljit_compiler *compiler, const struct ins_forms *forms, - sljit_s32 dst, sljit_sw dstw, + sljit_s32 dst, sljit_s32 src1, sljit_sw src1w, sljit_s32 src2, sljit_sw src2w) { @@ -1333,7 +1361,7 @@ static sljit_s32 emit_non_commutative(struct sljit_compiler *compiler, const str if (src2 & SLJIT_MEM) { sljit_ins ins12, ins20; - if (mode & SLJIT_I32_OP) { + if (mode & SLJIT_32) { ins12 = forms->op; ins20 = forms->op_y; } @@ -1354,10 +1382,10 @@ static sljit_s32 emit_non_commutative(struct sljit_compiler *compiler, const str return emit_rx(compiler, ins20, dst, src1, src1w, src2, src2w, RXY_A); } - ins = (mode & SLJIT_I32_OP) ? forms->op_rk : forms->op_grk; + ins = (mode & SLJIT_32) ? forms->op_rk : forms->op_grk; - if (ins == 0 || (SLOW_IS_REG(dst) && dst == src1)) - return emit_rr(compiler, (mode & SLJIT_I32_OP) ? forms->op_r : forms->op_gr, dst, src1, src1w, src2, src2w); + if (ins == 0 || (FAST_IS_REG(dst) && dst == src1)) + return emit_rr(compiler, (mode & SLJIT_32) ? forms->op_r : forms->op_gr, dst, src1, src1w, src2, src2w); return emit_rrf(compiler, ins, dst, src1, src1w, src2, src2w); } @@ -1376,9 +1404,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil struct sljit_memory_fragment *buf; void *code, *code_ptr; sljit_uw *pool, *pool_ptr; - - sljit_uw source; - sljit_sw offset; /* TODO(carenas): only need 32 bit */ + sljit_sw source, offset; /* TODO(carenas): only need 32 bit */ CHECK_ERROR_PTR(); CHECK_PTR(check_sljit_generate_code(compiler)); @@ -1489,38 +1515,41 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil ins &= ~sljit_ins_const; /* update instruction with relative address of constant */ - source = (sljit_uw)code_ptr; - offset = (sljit_uw)pool_ptr - source; + source = (sljit_sw)code_ptr; + offset = (sljit_sw)pool_ptr - source; + SLJIT_ASSERT(!(offset & 1)); offset >>= 1; /* halfword (not byte) offset */ SLJIT_ASSERT(is_s32(offset)); + ins |= (sljit_ins)offset & 0xffffffff; /* update address */ const_->const_.addr = (sljit_uw)pool_ptr; /* store initial value into pool and update pool address */ - *(pool_ptr++) = const_->init_value; + *(pool_ptr++) = (sljit_uw)const_->init_value; /* move to next constant */ const_ = (struct sljit_s390x_const *)const_->const_.next; } if (jump && jump->addr == j) { - sljit_sw target = (jump->flags & JUMP_LABEL) ? jump->u.label->addr : jump->u.target; + sljit_sw target = (sljit_sw)((jump->flags & JUMP_LABEL) ? jump->u.label->addr : jump->u.target); if ((jump->flags & SLJIT_REWRITABLE_JUMP) || (jump->flags & JUMP_ADDR)) { jump->addr = (sljit_uw)pool_ptr; /* load address into tmp1 */ - source = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset); - offset = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(pool_ptr, executable_offset) - source; + source = (sljit_sw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset); + offset = (sljit_sw)SLJIT_ADD_EXEC_OFFSET(pool_ptr, executable_offset) - source; + SLJIT_ASSERT(!(offset & 1)); offset >>= 1; SLJIT_ASSERT(is_s32(offset)); - encode_inst(&code_ptr, - lgrl(tmp1, offset & 0xffffffff)); + + encode_inst(&code_ptr, lgrl(tmp1, offset & 0xffffffff)); /* store jump target into pool and update pool address */ - *(pool_ptr++) = target; + *(pool_ptr++) = (sljit_uw)target; /* branch to tmp1 */ sljit_ins op = (ins >> 32) & 0xf; @@ -1538,7 +1567,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil } else { jump->addr = (sljit_uw)code_ptr + 2; - source = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset); + source = (sljit_sw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset); offset = target - source; /* offset must be halfword aligned */ @@ -1552,14 +1581,14 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil jump = jump->next; } if (put_label && put_label->addr == j) { - source = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset); + source = (sljit_sw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset); SLJIT_ASSERT(put_label->label); put_label->addr = (sljit_uw)code_ptr; /* store target into pool */ *pool_ptr = put_label->label->addr; - offset = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(pool_ptr, executable_offset) - source; + offset = (sljit_sw)SLJIT_ADD_EXEC_OFFSET(pool_ptr, executable_offset) - source; pool_ptr++; SLJIT_ASSERT(!(offset & 1)); @@ -1594,7 +1623,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_has_cpu_feature(sljit_s32 feature_type) case SLJIT_HAS_CMOV: return have_lscond1() ? 1 : 0; case SLJIT_HAS_FPU: - return 0; + return 1; } return 0; } @@ -1607,36 +1636,67 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_enter(struct sljit_compiler *compi sljit_s32 options, sljit_s32 arg_types, sljit_s32 scratches, sljit_s32 saveds, sljit_s32 fscratches, sljit_s32 fsaveds, sljit_s32 local_size) { - sljit_s32 args = get_arg_count(arg_types); - sljit_sw frame_size; + sljit_s32 word_arg_count = 0; + sljit_s32 offset, i, tmp; CHECK_ERROR(); CHECK(check_sljit_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size)); set_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size); - /* saved registers go in callee allocated save area */ - compiler->local_size = (local_size + 0xf) & ~0xf; - frame_size = compiler->local_size + SLJIT_S390X_DEFAULT_STACK_FRAME_SIZE; + /* Saved registers are stored in callee allocated save area. */ + SLJIT_ASSERT(gpr(SLJIT_FIRST_SAVED_REG) == r6 && gpr(SLJIT_S0) == r13); - FAIL_IF(push_inst(compiler, stmg(r6, r15, r6 * sizeof(sljit_sw), r15))); /* save registers TODO(MGM): optimize */ - if (frame_size != 0) { - if (is_s16(-frame_size)) - FAIL_IF(push_inst(compiler, aghi(r15, -((sljit_s16)frame_size)))); - else if (is_s32(-frame_size)) - FAIL_IF(push_inst(compiler, agfi(r15, -((sljit_s32)frame_size)))); - else { - FAIL_IF(push_load_imm_inst(compiler, tmp1, -frame_size)); - FAIL_IF(push_inst(compiler, la(r15, 0, tmp1, r15))); + offset = 2 * SSIZE_OF(sw); + if (saveds + scratches >= SLJIT_NUMBER_OF_REGISTERS) { + FAIL_IF(push_inst(compiler, stmg(r6, r14, offset, r15))); /* save registers TODO(MGM): optimize */ + offset += 9 * SSIZE_OF(sw); + } else { + if (scratches == SLJIT_FIRST_SAVED_REG) { + FAIL_IF(push_inst(compiler, stg(r6, offset, 0, r15))); + offset += SSIZE_OF(sw); + } else if (scratches > SLJIT_FIRST_SAVED_REG) { + FAIL_IF(push_inst(compiler, stmg(r6, r6 + (sljit_gpr)(scratches - SLJIT_FIRST_SAVED_REG), offset, r15))); + offset += (scratches - (SLJIT_FIRST_SAVED_REG - 1)) * SSIZE_OF(sw); } + + if (saveds == 0) { + FAIL_IF(push_inst(compiler, stg(r14, offset, 0, r15))); + offset += SSIZE_OF(sw); + } else { + FAIL_IF(push_inst(compiler, stmg(r14 - (sljit_gpr)saveds, r14, offset, r15))); + offset += (saveds + 1) * SSIZE_OF(sw); + } + } + + tmp = SLJIT_FS0 - fsaveds; + for (i = SLJIT_FS0; i > tmp; i--) { + FAIL_IF(push_inst(compiler, 0x60000000 /* std */ | F20(i) | R12A(r15) | (sljit_ins)offset)); + offset += SSIZE_OF(sw); + } + + for (i = fscratches; i >= SLJIT_FIRST_SAVED_FLOAT_REG; i--) { + FAIL_IF(push_inst(compiler, 0x60000000 /* std */ | F20(i) | R12A(r15) | (sljit_ins)offset)); + offset += SSIZE_OF(sw); } - if (args >= 1) - FAIL_IF(push_inst(compiler, lgr(gpr(SLJIT_S0), gpr(SLJIT_R0)))); - if (args >= 2) - FAIL_IF(push_inst(compiler, lgr(gpr(SLJIT_S1), gpr(SLJIT_R1)))); - if (args >= 3) - FAIL_IF(push_inst(compiler, lgr(gpr(SLJIT_S2), gpr(SLJIT_R2)))); - SLJIT_ASSERT(args < 4); + local_size = (local_size + SLJIT_S390X_DEFAULT_STACK_FRAME_SIZE + 0xf) & ~0xf; + compiler->local_size = local_size; + + FAIL_IF(push_inst(compiler, 0xe30000000071 /* lay */ | R36A(r15) | R28A(r15) | disp_s20(-local_size))); + + arg_types >>= SLJIT_ARG_SHIFT; + tmp = 0; + while (arg_types > 0) { + if ((arg_types & SLJIT_ARG_MASK) < SLJIT_ARG_TYPE_F64) { + if (!(arg_types & SLJIT_ARG_TYPE_SCRATCH_REG)) { + FAIL_IF(push_inst(compiler, lgr(gpr(SLJIT_S0 - tmp), gpr(SLJIT_R0 + word_arg_count)))); + tmp++; + } + word_arg_count++; + } + + arg_types >>= SLJIT_ARG_SHIFT; + } return SLJIT_SUCCESS; } @@ -1649,37 +1709,67 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_set_context(struct sljit_compiler *comp CHECK(check_sljit_set_context(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size)); set_set_context(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size); - /* TODO(mundaym): stack space for saved floating point registers */ - compiler->local_size = (local_size + 0xf) & ~0xf; + compiler->local_size = (local_size + SLJIT_S390X_DEFAULT_STACK_FRAME_SIZE + 0xf) & ~0xf; return SLJIT_SUCCESS; } -SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src, sljit_sw srcw) +static sljit_s32 emit_stack_frame_release(struct sljit_compiler *compiler) { - sljit_sw size; - sljit_gpr end; + sljit_s32 offset, i, tmp; + sljit_s32 local_size = compiler->local_size; + sljit_s32 saveds = compiler->saveds; + sljit_s32 scratches = compiler->scratches; - CHECK_ERROR(); - CHECK(check_sljit_emit_return(compiler, op, src, srcw)); + if (is_u12(local_size)) + FAIL_IF(push_inst(compiler, 0x41000000 /* ly */ | R20A(r15) | R12A(r15) | (sljit_ins)local_size)); + else + FAIL_IF(push_inst(compiler, 0xe30000000071 /* lay */ | R36A(r15) | R28A(r15) | disp_s20(local_size))); - FAIL_IF(emit_mov_before_return(compiler, op, src, srcw)); + offset = 2 * SSIZE_OF(sw); + if (saveds + scratches >= SLJIT_NUMBER_OF_REGISTERS) { + FAIL_IF(push_inst(compiler, lmg(r6, r14, offset, r15))); /* save registers TODO(MGM): optimize */ + offset += 9 * SSIZE_OF(sw); + } else { + if (scratches == SLJIT_FIRST_SAVED_REG) { + FAIL_IF(push_inst(compiler, lg(r6, offset, 0, r15))); + offset += SSIZE_OF(sw); + } else if (scratches > SLJIT_FIRST_SAVED_REG) { + FAIL_IF(push_inst(compiler, lmg(r6, r6 + (sljit_gpr)(scratches - SLJIT_FIRST_SAVED_REG), offset, r15))); + offset += (scratches - (SLJIT_FIRST_SAVED_REG - 1)) * SSIZE_OF(sw); + } - size = compiler->local_size + SLJIT_S390X_DEFAULT_STACK_FRAME_SIZE + (r6 * sizeof(sljit_sw)); - if (!is_s20(size)) { - FAIL_IF(push_load_imm_inst(compiler, tmp1, compiler->local_size + SLJIT_S390X_DEFAULT_STACK_FRAME_SIZE)); - FAIL_IF(push_inst(compiler, la(r15, 0, tmp1, r15))); - size = r6 * sizeof(sljit_sw); - end = r14; /* r15 has been restored already */ + if (saveds == 0) { + FAIL_IF(push_inst(compiler, lg(r14, offset, 0, r15))); + offset += SSIZE_OF(sw); + } else { + FAIL_IF(push_inst(compiler, lmg(r14 - (sljit_gpr)saveds, r14, offset, r15))); + offset += (saveds + 1) * SSIZE_OF(sw); + } } - else - end = r15; - FAIL_IF(push_inst(compiler, lmg(r6, end, size, r15))); /* restore registers TODO(MGM): optimize */ - FAIL_IF(push_inst(compiler, br(r14))); /* return */ + tmp = SLJIT_FS0 - compiler->fsaveds; + for (i = SLJIT_FS0; i > tmp; i--) { + FAIL_IF(push_inst(compiler, 0x68000000 /* ld */ | F20(i) | R12A(r15) | (sljit_ins)offset)); + offset += SSIZE_OF(sw); + } + + for (i = compiler->fscratches; i >= SLJIT_FIRST_SAVED_FLOAT_REG; i--) { + FAIL_IF(push_inst(compiler, 0x68000000 /* ld */ | F20(i) | R12A(r15) | (sljit_ins)offset)); + offset += SSIZE_OF(sw); + } return SLJIT_SUCCESS; } +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return_void(struct sljit_compiler *compiler) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_return_void(compiler)); + + FAIL_IF(emit_stack_frame_release(compiler)); + return push_inst(compiler, br(r14)); /* return */ +} + /* --------------------------------------------------------------------- */ /* Operators */ /* --------------------------------------------------------------------- */ @@ -1692,7 +1782,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compile CHECK_ERROR(); CHECK(check_sljit_emit_op0(compiler, op)); - op = GET_OPCODE(op) | (op & SLJIT_I32_OP); + op = GET_OPCODE(op) | (op & SLJIT_32); switch (op) { case SLJIT_BREAKPOINT: /* The following invalid instruction is emitted by gdb. */ @@ -1786,17 +1876,12 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile ADJUST_LOCAL_OFFSET(dst, dstw); ADJUST_LOCAL_OFFSET(src, srcw); - if ((dst == SLJIT_UNUSED) && !HAS_FLAGS(op)) { - /* TODO(carenas): implement prefetch? */ - return SLJIT_SUCCESS; - } - if (opcode >= SLJIT_MOV && opcode <= SLJIT_MOV_P) { /* LOAD REGISTER */ if (FAST_IS_REG(dst) && FAST_IS_REG(src)) { dst_r = gpr(dst); src_r = gpr(src); - switch (opcode | (op & SLJIT_I32_OP)) { + switch (opcode | (op & SLJIT_32)) { /* 32-bit */ case SLJIT_MOV32_U8: ins = llcr(dst_r, src_r); @@ -1811,6 +1896,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile ins = lhr(dst_r, src_r); break; case SLJIT_MOV32: + if (dst_r == src_r) + return SLJIT_SUCCESS; ins = lr(dst_r, src_r); break; /* 64-bit */ @@ -1834,11 +1921,14 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile break; case SLJIT_MOV: case SLJIT_MOV_P: + if (dst_r == src_r) + return SLJIT_SUCCESS; ins = lgr(dst_r, src_r); break; default: ins = 0; SLJIT_UNREACHABLE(); + break; } FAIL_IF(push_inst(compiler, ins)); return SLJIT_SUCCESS; @@ -1862,6 +1952,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile srcw = (sljit_sw)((sljit_u32)(srcw)); break; case SLJIT_MOV_S32: + case SLJIT_MOV32: srcw = (sljit_sw)((sljit_s32)(srcw)); break; } @@ -1875,7 +1966,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile FAIL_IF(make_addr_bxy(compiler, &mem, src, srcw, tmp1)); /* TODO(carenas): convert all calls below to LEVAL */ - switch (opcode | (op & SLJIT_I32_OP)) { + switch (opcode | (op & SLJIT_32)) { case SLJIT_MOV32_U8: ins = llc(reg, mem.offset, mem.index, mem.base); break; @@ -1914,7 +2005,9 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile ins = lg(reg, mem.offset, mem.index, mem.base); break; default: + ins = 0; SLJIT_UNREACHABLE(); + break; } FAIL_IF(push_inst(compiler, ins)); return SLJIT_SUCCESS; @@ -1940,6 +2033,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile WHEN2(is_u12(mem.offset), sth, sthy)); case SLJIT_MOV_U32: case SLJIT_MOV_S32: + case SLJIT_MOV32: return push_inst(compiler, WHEN2(is_u12(mem.offset), st, sty)); case SLJIT_MOV_P: @@ -1972,6 +2066,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile EVAL(sthy, tmp0, mem)); case SLJIT_MOV_U32: case SLJIT_MOV_S32: + case SLJIT_MOV32: FAIL_IF(push_inst(compiler, EVAL(ly, tmp0, mem))); FAIL_IF(make_addr_bxy(compiler, &mem, dst, dstw, tmp1)); @@ -1994,15 +2089,15 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile SLJIT_ASSERT((src & SLJIT_IMM) == 0); /* no immediates */ - dst_r = SLOW_IS_REG(dst) ? gpr(REG_MASK & dst) : tmp0; + dst_r = FAST_IS_REG(dst) ? gpr(REG_MASK & dst) : tmp0; src_r = FAST_IS_REG(src) ? gpr(REG_MASK & src) : tmp0; if (src & SLJIT_MEM) - FAIL_IF(load_word(compiler, src_r, src, srcw, src & SLJIT_I32_OP)); + FAIL_IF(load_word(compiler, src_r, src, srcw, src & SLJIT_32)); compiler->status_flags_state = op & (VARIABLE_FLAG_MASK | SLJIT_SET_Z); /* TODO(mundaym): optimize loads and stores */ - switch (opcode | (op & SLJIT_I32_OP)) { + switch (opcode | (op & SLJIT_32)) { case SLJIT_NOT: /* emulate ~x with x^-1 */ FAIL_IF(push_load_imm_inst(compiler, tmp1, -1)); @@ -2014,7 +2109,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile case SLJIT_NOT32: /* emulate ~x with x^-1 */ if (have_eimm()) - FAIL_IF(push_inst(compiler, xilf(dst_r, -1))); + FAIL_IF(push_inst(compiler, xilf(dst_r, 0xffffffff))); else { FAIL_IF(push_load_imm_inst(compiler, tmp1, -1)); if (src_r != dst_r) @@ -2023,14 +2118,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile FAIL_IF(push_inst(compiler, xr(dst_r, tmp1))); } break; - case SLJIT_NEG: - compiler->status_flags_state |= SLJIT_CURRENT_FLAGS_ADD_SUB; - FAIL_IF(push_inst(compiler, lcgr(dst_r, src_r))); - break; - case SLJIT_NEG32: - compiler->status_flags_state |= SLJIT_CURRENT_FLAGS_ADD_SUB; - FAIL_IF(push_inst(compiler, lcr(dst_r, src_r))); - break; case SLJIT_CLZ: if (have_eimm()) { FAIL_IF(push_inst(compiler, flogr(tmp0, src_r))); /* clobbers tmp1 */ @@ -2059,8 +2146,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile FAIL_IF(update_zero_overflow(compiler, op, dst_r)); /* TODO(carenas): doesn't need FAIL_IF */ - if ((dst != SLJIT_UNUSED) && (dst & SLJIT_MEM)) - FAIL_IF(store_word(compiler, dst_r, dst, dstw, op & SLJIT_I32_OP)); + if (dst & SLJIT_MEM) + FAIL_IF(store_word(compiler, dst_r, dst, dstw, op & SLJIT_32)); return SLJIT_SUCCESS; } @@ -2084,20 +2171,6 @@ static SLJIT_INLINE int is_shift(sljit_s32 op) { return (v == SLJIT_SHL || v == SLJIT_ASHR || v == SLJIT_LSHR) ? 1 : 0; } -static SLJIT_INLINE int sets_signed_flag(sljit_s32 op) -{ - switch (GET_FLAG_TYPE(op)) { - case SLJIT_OVERFLOW: - case SLJIT_NOT_OVERFLOW: - case SLJIT_SIG_LESS: - case SLJIT_SIG_LESS_EQUAL: - case SLJIT_SIG_GREATER: - case SLJIT_SIG_GREATER_EQUAL: - return 1; - } - return 0; -} - static const struct ins_forms add_forms = { 0x1a00, /* ar */ 0xb9080000, /* agr */ @@ -2131,24 +2204,24 @@ static sljit_s32 sljit_emit_add(struct sljit_compiler *compiler, sljit_s32 op, if (src2 & SLJIT_IMM) { if (!sets_zero_overflow && is_s8(src2w) && (src1 & SLJIT_MEM) && (dst == src1 && dstw == src1w)) { if (sets_overflow) - ins = (op & SLJIT_I32_OP) ? 0xeb000000006a /* asi */ : 0xeb000000007a /* agsi */; + ins = (op & SLJIT_32) ? 0xeb000000006a /* asi */ : 0xeb000000007a /* agsi */; else - ins = (op & SLJIT_I32_OP) ? 0xeb000000006e /* alsi */ : 0xeb000000007e /* algsi */; + ins = (op & SLJIT_32) ? 0xeb000000006e /* alsi */ : 0xeb000000007e /* algsi */; return emit_siy(compiler, ins, dst, dstw, src2w); } if (is_s16(src2w)) { if (sets_overflow) - ins = (op & SLJIT_I32_OP) ? 0xec00000000d8 /* ahik */ : 0xec00000000d9 /* aghik */; + ins = (op & SLJIT_32) ? 0xec00000000d8 /* ahik */ : 0xec00000000d9 /* aghik */; else - ins = (op & SLJIT_I32_OP) ? 0xec00000000da /* alhsik */ : 0xec00000000db /* alghsik */; + ins = (op & SLJIT_32) ? 0xec00000000da /* alhsik */ : 0xec00000000db /* alghsik */; FAIL_IF(emit_rie_d(compiler, ins, dst, src1, src1w, src2w)); goto done; } if (!sets_overflow) { - if ((op & SLJIT_I32_OP) || is_u32(src2w)) { - ins = (op & SLJIT_I32_OP) ? 0xc20b00000000 /* alfi */ : 0xc20a00000000 /* algfi */; + if ((op & SLJIT_32) || is_u32(src2w)) { + ins = (op & SLJIT_32) ? 0xc20b00000000 /* alfi */ : 0xc20a00000000 /* algfi */; FAIL_IF(emit_ri(compiler, ins, dst, src1, src1w, src2w, RIL_A)); goto done; } @@ -2157,22 +2230,22 @@ static sljit_s32 sljit_emit_add(struct sljit_compiler *compiler, sljit_s32 op, goto done; } } - else if ((op & SLJIT_I32_OP) || is_s32(src2w)) { - ins = (op & SLJIT_I32_OP) ? 0xc20900000000 /* afi */ : 0xc20800000000 /* agfi */; + else if ((op & SLJIT_32) || is_s32(src2w)) { + ins = (op & SLJIT_32) ? 0xc20900000000 /* afi */ : 0xc20800000000 /* agfi */; FAIL_IF(emit_ri(compiler, ins, dst, src1, src1w, src2w, RIL_A)); goto done; } } forms = sets_overflow ? &add_forms : &logical_add_forms; - FAIL_IF(emit_commutative(compiler, forms, dst, dstw, src1, src1w, src2, src2w)); + FAIL_IF(emit_commutative(compiler, forms, dst, src1, src1w, src2, src2w)); done: if (sets_zero_overflow) - FAIL_IF(update_zero_overflow(compiler, op, SLOW_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0)); + FAIL_IF(update_zero_overflow(compiler, op, FAST_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0)); if (dst & SLJIT_MEM) - return store_word(compiler, tmp0, dst, dstw, op & SLJIT_I32_OP); + return store_word(compiler, tmp0, dst, dstw, op & SLJIT_32); return SLJIT_SUCCESS; } @@ -2202,78 +2275,85 @@ static sljit_s32 sljit_emit_sub(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src1, sljit_sw src1w, sljit_s32 src2, sljit_sw src2w) { - int sets_signed = sets_signed_flag(op); + sljit_s32 flag_type = GET_FLAG_TYPE(op); + int sets_signed = (flag_type >= SLJIT_SIG_LESS && flag_type <= SLJIT_NOT_OVERFLOW); int sets_zero_overflow = (op & (SLJIT_SET_Z | VARIABLE_FLAG_MASK)) == (SLJIT_SET_Z | SLJIT_SET_OVERFLOW); const struct ins_forms *forms; sljit_ins ins; - if (dst == SLJIT_UNUSED && GET_FLAG_TYPE(op) <= SLJIT_SIG_LESS_EQUAL) { - int compare_signed = GET_FLAG_TYPE(op) >= SLJIT_SIG_LESS; + if (dst == (sljit_s32)tmp0 && flag_type <= SLJIT_SIG_LESS_EQUAL) { + int compare_signed = flag_type >= SLJIT_SIG_LESS; compiler->status_flags_state |= SLJIT_CURRENT_FLAGS_COMPARE; if (src2 & SLJIT_IMM) { if (compare_signed || ((op & VARIABLE_FLAG_MASK) == 0 && is_s32(src2w))) { - if ((op & SLJIT_I32_OP) || is_s32(src2w)) { - ins = (op & SLJIT_I32_OP) ? 0xc20d00000000 /* cfi */ : 0xc20c00000000 /* cgfi */; + if ((op & SLJIT_32) || is_s32(src2w)) { + ins = (op & SLJIT_32) ? 0xc20d00000000 /* cfi */ : 0xc20c00000000 /* cgfi */; return emit_ri(compiler, ins, src1, src1, src1w, src2w, RIL_A); } } else { - if ((op & SLJIT_I32_OP) || is_u32(src2w)) { - ins = (op & SLJIT_I32_OP) ? 0xc20f00000000 /* clfi */ : 0xc20e00000000 /* clgfi */; + if ((op & SLJIT_32) || is_u32(src2w)) { + ins = (op & SLJIT_32) ? 0xc20f00000000 /* clfi */ : 0xc20e00000000 /* clgfi */; return emit_ri(compiler, ins, src1, src1, src1w, src2w, RIL_A); } if (is_s16(src2w)) - return emit_rie_d(compiler, 0xec00000000db /* alghsik */, SLJIT_UNUSED, src1, src1w, src2w); + return emit_rie_d(compiler, 0xec00000000db /* alghsik */, (sljit_s32)tmp0, src1, src1w, src2w); } } else if (src2 & SLJIT_MEM) { - if ((op & SLJIT_I32_OP) && ((src2 & OFFS_REG_MASK) || is_u12(src2w))) { + if ((op & SLJIT_32) && ((src2 & OFFS_REG_MASK) || is_u12(src2w))) { ins = compare_signed ? 0x59000000 /* c */ : 0x55000000 /* cl */; return emit_rx(compiler, ins, src1, src1, src1w, src2, src2w, RX_A); } if (compare_signed) - ins = (op & SLJIT_I32_OP) ? 0xe30000000059 /* cy */ : 0xe30000000020 /* cg */; + ins = (op & SLJIT_32) ? 0xe30000000059 /* cy */ : 0xe30000000020 /* cg */; else - ins = (op & SLJIT_I32_OP) ? 0xe30000000055 /* cly */ : 0xe30000000021 /* clg */; + ins = (op & SLJIT_32) ? 0xe30000000055 /* cly */ : 0xe30000000021 /* clg */; return emit_rx(compiler, ins, src1, src1, src1w, src2, src2w, RXY_A); } if (compare_signed) - ins = (op & SLJIT_I32_OP) ? 0x1900 /* cr */ : 0xb9200000 /* cgr */; + ins = (op & SLJIT_32) ? 0x1900 /* cr */ : 0xb9200000 /* cgr */; else - ins = (op & SLJIT_I32_OP) ? 0x1500 /* clr */ : 0xb9210000 /* clgr */; + ins = (op & SLJIT_32) ? 0x1500 /* clr */ : 0xb9210000 /* clgr */; return emit_rr(compiler, ins, src1, src1, src1w, src2, src2w); } + if (src1 == SLJIT_IMM && src1w == 0 && (flag_type == 0 || sets_signed)) { + ins = (op & SLJIT_32) ? 0x1300 /* lcr */ : 0xb9030000 /* lcgr */; + FAIL_IF(emit_rr1(compiler, ins, dst, src2, src2w)); + goto done; + } + if (src2 & SLJIT_IMM) { sljit_sw neg_src2w = -src2w; if (sets_signed || neg_src2w != 0 || (op & (SLJIT_SET_Z | VARIABLE_FLAG_MASK)) == 0) { if (!sets_zero_overflow && is_s8(neg_src2w) && (src1 & SLJIT_MEM) && (dst == src1 && dstw == src1w)) { if (sets_signed) - ins = (op & SLJIT_I32_OP) ? 0xeb000000006a /* asi */ : 0xeb000000007a /* agsi */; + ins = (op & SLJIT_32) ? 0xeb000000006a /* asi */ : 0xeb000000007a /* agsi */; else - ins = (op & SLJIT_I32_OP) ? 0xeb000000006e /* alsi */ : 0xeb000000007e /* algsi */; + ins = (op & SLJIT_32) ? 0xeb000000006e /* alsi */ : 0xeb000000007e /* algsi */; return emit_siy(compiler, ins, dst, dstw, neg_src2w); } if (is_s16(neg_src2w)) { if (sets_signed) - ins = (op & SLJIT_I32_OP) ? 0xec00000000d8 /* ahik */ : 0xec00000000d9 /* aghik */; + ins = (op & SLJIT_32) ? 0xec00000000d8 /* ahik */ : 0xec00000000d9 /* aghik */; else - ins = (op & SLJIT_I32_OP) ? 0xec00000000da /* alhsik */ : 0xec00000000db /* alghsik */; + ins = (op & SLJIT_32) ? 0xec00000000da /* alhsik */ : 0xec00000000db /* alghsik */; FAIL_IF(emit_rie_d(compiler, ins, dst, src1, src1w, neg_src2w)); goto done; } } if (!sets_signed) { - if ((op & SLJIT_I32_OP) || is_u32(src2w)) { - ins = (op & SLJIT_I32_OP) ? 0xc20500000000 /* slfi */ : 0xc20400000000 /* slgfi */; + if ((op & SLJIT_32) || is_u32(src2w)) { + ins = (op & SLJIT_32) ? 0xc20500000000 /* slfi */ : 0xc20400000000 /* slgfi */; FAIL_IF(emit_ri(compiler, ins, dst, src1, src1w, src2w, RIL_A)); goto done; } @@ -2282,19 +2362,19 @@ static sljit_s32 sljit_emit_sub(struct sljit_compiler *compiler, sljit_s32 op, goto done; } } - else if ((op & SLJIT_I32_OP) || is_s32(neg_src2w)) { - ins = (op & SLJIT_I32_OP) ? 0xc20900000000 /* afi */ : 0xc20800000000 /* agfi */; + else if ((op & SLJIT_32) || is_s32(neg_src2w)) { + ins = (op & SLJIT_32) ? 0xc20900000000 /* afi */ : 0xc20800000000 /* agfi */; FAIL_IF(emit_ri(compiler, ins, dst, src1, src1w, neg_src2w, RIL_A)); goto done; } } forms = sets_signed ? &sub_forms : &logical_sub_forms; - FAIL_IF(emit_non_commutative(compiler, forms, dst, dstw, src1, src1w, src2, src2w)); + FAIL_IF(emit_non_commutative(compiler, forms, dst, src1, src1w, src2, src2w)); done: if (sets_signed) { - sljit_gpr dst_r = SLOW_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0; + sljit_gpr dst_r = FAST_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0; if ((op & VARIABLE_FLAG_MASK) != SLJIT_SET_OVERFLOW) { /* In case of overflow, the sign bit of the two source operands must be different, and @@ -2303,14 +2383,14 @@ done: The -result operation sets the corrent sign, because the result cannot be zero. The overflow is considered greater, since the result must be equal to INT_MIN so its sign bit is set. */ FAIL_IF(push_inst(compiler, brc(0xe, 2 + 2))); - FAIL_IF(push_inst(compiler, (op & SLJIT_I32_OP) ? lcr(tmp1, dst_r) : lcgr(tmp1, dst_r))); + FAIL_IF(push_inst(compiler, (op & SLJIT_32) ? lcr(tmp1, dst_r) : lcgr(tmp1, dst_r))); } else if (op & SLJIT_SET_Z) FAIL_IF(update_zero_overflow(compiler, op, dst_r)); } if (dst & SLJIT_MEM) - return store_word(compiler, tmp0, dst, dstw, op & SLJIT_I32_OP); + return store_word(compiler, tmp0, dst, dstw, op & SLJIT_32); return SLJIT_SUCCESS; } @@ -2336,7 +2416,7 @@ static const struct ins_forms multiply_overflow_forms = { }; static sljit_s32 sljit_emit_multiply(struct sljit_compiler *compiler, sljit_s32 op, - sljit_s32 dst, sljit_sw dstw, + sljit_s32 dst, sljit_s32 src1, sljit_sw src1w, sljit_s32 src2, sljit_sw src2w) { @@ -2351,29 +2431,29 @@ static sljit_s32 sljit_emit_multiply(struct sljit_compiler *compiler, sljit_s32 } FAIL_IF(push_inst(compiler, aih(tmp0, 1))); FAIL_IF(push_inst(compiler, nihf(tmp0, ~1U))); - FAIL_IF(push_inst(compiler, ipm(flag_r))); - FAIL_IF(push_inst(compiler, oilh(flag_r, 0x2000))); */ + FAIL_IF(push_inst(compiler, ipm(tmp1))); + FAIL_IF(push_inst(compiler, oilh(tmp1, 0x2000))); */ - return emit_commutative(compiler, &multiply_overflow_forms, dst, dstw, src1, src1w, src2, src2w); + return emit_commutative(compiler, &multiply_overflow_forms, dst, src1, src1w, src2, src2w); } if (src2 & SLJIT_IMM) { if (is_s16(src2w)) { - ins = (op & SLJIT_I32_OP) ? 0xa70c0000 /* mhi */ : 0xa70d0000 /* mghi */; + ins = (op & SLJIT_32) ? 0xa70c0000 /* mhi */ : 0xa70d0000 /* mghi */; return emit_ri(compiler, ins, dst, src1, src1w, src2w, RI_A); } if (is_s32(src2w)) { - ins = (op & SLJIT_I32_OP) ? 0xc20100000000 /* msfi */ : 0xc20000000000 /* msgfi */; + ins = (op & SLJIT_32) ? 0xc20100000000 /* msfi */ : 0xc20000000000 /* msgfi */; return emit_ri(compiler, ins, dst, src1, src1w, src2w, RIL_A); } } - return emit_commutative(compiler, &multiply_forms, dst, dstw, src1, src1w, src2, src2w); + return emit_commutative(compiler, &multiply_forms, dst, src1, src1w, src2, src2w); } static sljit_s32 sljit_emit_bitwise_imm(struct sljit_compiler *compiler, sljit_s32 type, - sljit_s32 dst, sljit_sw dstw, + sljit_s32 dst, sljit_s32 src1, sljit_sw src1w, sljit_uw imm, sljit_s32 count16) { @@ -2381,7 +2461,7 @@ static sljit_s32 sljit_emit_bitwise_imm(struct sljit_compiler *compiler, sljit_s sljit_gpr dst_r = tmp0; sljit_s32 needs_move = 1; - if (SLOW_IS_REG(dst)) { + if (IS_GPR_REG(dst)) { dst_r = gpr(dst & REG_MASK); if (dst == src1) needs_move = 0; @@ -2391,38 +2471,38 @@ static sljit_s32 sljit_emit_bitwise_imm(struct sljit_compiler *compiler, sljit_s FAIL_IF(emit_move(compiler, dst_r, src1, src1w)); if (type == SLJIT_AND) { - if (!(mode & SLJIT_I32_OP)) - FAIL_IF(push_inst(compiler, 0xc00a00000000 /* nihf */ | (dst_r << 36) | (imm >> 32))); - return push_inst(compiler, 0xc00b00000000 /* nilf */ | (dst_r << 36) | (imm & 0xffffffff)); + if (!(mode & SLJIT_32)) + FAIL_IF(push_inst(compiler, 0xc00a00000000 /* nihf */ | R36A(dst_r) | (imm >> 32))); + return push_inst(compiler, 0xc00b00000000 /* nilf */ | R36A(dst_r) | (imm & 0xffffffff)); } else if (type == SLJIT_OR) { if (count16 >= 3) { - FAIL_IF(push_inst(compiler, 0xc00c00000000 /* oihf */ | (dst_r << 36) | (imm >> 32))); - return push_inst(compiler, 0xc00d00000000 /* oilf */ | (dst_r << 36) | (imm & 0xffffffff)); + FAIL_IF(push_inst(compiler, 0xc00c00000000 /* oihf */ | R36A(dst_r) | (imm >> 32))); + return push_inst(compiler, 0xc00d00000000 /* oilf */ | R36A(dst_r) | (imm & 0xffffffff)); } if (count16 >= 2) { if ((imm & 0x00000000ffffffffull) == 0) - return push_inst(compiler, 0xc00c00000000 /* oihf */ | (dst_r << 36) | (imm >> 32)); + return push_inst(compiler, 0xc00c00000000 /* oihf */ | R36A(dst_r) | (imm >> 32)); if ((imm & 0xffffffff00000000ull) == 0) - return push_inst(compiler, 0xc00d00000000 /* oilf */ | (dst_r << 36) | (imm & 0xffffffff)); + return push_inst(compiler, 0xc00d00000000 /* oilf */ | R36A(dst_r) | (imm & 0xffffffff)); } if ((imm & 0xffff000000000000ull) != 0) - FAIL_IF(push_inst(compiler, 0xa5080000 /* oihh */ | (dst_r << 20) | (imm >> 48))); + FAIL_IF(push_inst(compiler, 0xa5080000 /* oihh */ | R20A(dst_r) | (imm >> 48))); if ((imm & 0x0000ffff00000000ull) != 0) - FAIL_IF(push_inst(compiler, 0xa5090000 /* oihl */ | (dst_r << 20) | ((imm >> 32) & 0xffff))); + FAIL_IF(push_inst(compiler, 0xa5090000 /* oihl */ | R20A(dst_r) | ((imm >> 32) & 0xffff))); if ((imm & 0x00000000ffff0000ull) != 0) - FAIL_IF(push_inst(compiler, 0xa50a0000 /* oilh */ | (dst_r << 20) | ((imm >> 16) & 0xffff))); + FAIL_IF(push_inst(compiler, 0xa50a0000 /* oilh */ | R20A(dst_r) | ((imm >> 16) & 0xffff))); if ((imm & 0x000000000000ffffull) != 0 || imm == 0) - return push_inst(compiler, 0xa50b0000 /* oill */ | (dst_r << 20) | (imm & 0xffff)); + return push_inst(compiler, 0xa50b0000 /* oill */ | R20A(dst_r) | (imm & 0xffff)); return SLJIT_SUCCESS; } if ((imm & 0xffffffff00000000ull) != 0) - FAIL_IF(push_inst(compiler, 0xc00600000000 /* xihf */ | (dst_r << 36) | (imm >> 32))); + FAIL_IF(push_inst(compiler, 0xc00600000000 /* xihf */ | R36A(dst_r) | (imm >> 32))); if ((imm & 0x00000000ffffffffull) != 0 || imm == 0) - return push_inst(compiler, 0xc00700000000 /* xilf */ | (dst_r << 36) | (imm & 0xffffffff)); + return push_inst(compiler, 0xc00700000000 /* xilf */ | R36A(dst_r) | (imm & 0xffffffff)); return SLJIT_SUCCESS; } @@ -2457,18 +2537,18 @@ static const struct ins_forms bitwise_xor_forms = { }; static sljit_s32 sljit_emit_bitwise(struct sljit_compiler *compiler, sljit_s32 op, - sljit_s32 dst, sljit_sw dstw, + sljit_s32 dst, sljit_s32 src1, sljit_sw src1w, sljit_s32 src2, sljit_sw src2w) { sljit_s32 type = GET_OPCODE(op); const struct ins_forms *forms; - if ((src2 & SLJIT_IMM) && (!(op & SLJIT_SET_Z) || (type == SLJIT_AND && dst == SLJIT_UNUSED))) { + if ((src2 & SLJIT_IMM) && (!(op & SLJIT_SET_Z) || (type == SLJIT_AND && dst == (sljit_s32)tmp0))) { sljit_s32 count16 = 0; sljit_uw imm = (sljit_uw)src2w; - if (op & SLJIT_I32_OP) + if (op & SLJIT_32) imm &= 0xffffffffull; if ((imm & 0x000000000000ffffull) != 0 || imm == 0) @@ -2480,7 +2560,7 @@ static sljit_s32 sljit_emit_bitwise(struct sljit_compiler *compiler, sljit_s32 o if ((imm & 0xffff000000000000ull) != 0) count16++; - if (type == SLJIT_AND && dst == SLJIT_UNUSED && count16 == 1) { + if (type == SLJIT_AND && dst == (sljit_s32)tmp0 && count16 == 1) { sljit_gpr src_r = tmp0; if (FAST_IS_REG(src1)) @@ -2489,16 +2569,16 @@ static sljit_s32 sljit_emit_bitwise(struct sljit_compiler *compiler, sljit_s32 o FAIL_IF(emit_move(compiler, tmp0, src1, src1w)); if ((imm & 0x000000000000ffffull) != 0 || imm == 0) - return push_inst(compiler, 0xa7010000 | (src_r << 20) | imm); + return push_inst(compiler, 0xa7010000 | R20A(src_r) | imm); if ((imm & 0x00000000ffff0000ull) != 0) - return push_inst(compiler, 0xa7000000 | (src_r << 20) | (imm >> 16)); + return push_inst(compiler, 0xa7000000 | R20A(src_r) | (imm >> 16)); if ((imm & 0x0000ffff00000000ull) != 0) - return push_inst(compiler, 0xa7030000 | (src_r << 20) | (imm >> 32)); - return push_inst(compiler, 0xa7020000 | (src_r << 20) | (imm >> 48)); + return push_inst(compiler, 0xa7030000 | R20A(src_r) | (imm >> 32)); + return push_inst(compiler, 0xa7020000 | R20A(src_r) | (imm >> 48)); } if (!(op & SLJIT_SET_Z)) - return sljit_emit_bitwise_imm(compiler, type, dst, dstw, src1, src1w, imm, count16); + return sljit_emit_bitwise_imm(compiler, type, dst, src1, src1w, imm, count16); } if (type == SLJIT_AND) @@ -2508,16 +2588,16 @@ static sljit_s32 sljit_emit_bitwise(struct sljit_compiler *compiler, sljit_s32 o else forms = &bitwise_xor_forms; - return emit_commutative(compiler, forms, dst, dstw, src1, src1w, src2, src2w); + return emit_commutative(compiler, forms, dst, src1, src1w, src2, src2w); } static sljit_s32 sljit_emit_shift(struct sljit_compiler *compiler, sljit_s32 op, - sljit_s32 dst, sljit_sw dstw, + sljit_s32 dst, sljit_s32 src1, sljit_sw src1w, sljit_s32 src2, sljit_sw src2w) { sljit_s32 type = GET_OPCODE(op); - sljit_gpr dst_r = SLOW_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0; + sljit_gpr dst_r = FAST_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0; sljit_gpr src_r = tmp0; sljit_gpr base_r = tmp0; sljit_ins imm = 0; @@ -2529,7 +2609,7 @@ static sljit_s32 sljit_emit_shift(struct sljit_compiler *compiler, sljit_s32 op, FAIL_IF(emit_move(compiler, tmp0, src1, src1w)); if (src2 & SLJIT_IMM) - imm = src2w & ((op & SLJIT_I32_OP) ? 0x1f : 0x3f); + imm = (sljit_ins)(src2w & ((op & SLJIT_32) ? 0x1f : 0x3f)); else if (FAST_IS_REG(src2)) base_r = gpr(src2 & REG_MASK); else { @@ -2537,7 +2617,7 @@ static sljit_s32 sljit_emit_shift(struct sljit_compiler *compiler, sljit_s32 op, base_r = tmp1; } - if ((op & SLJIT_I32_OP) && dst_r == src_r) { + if ((op & SLJIT_32) && dst_r == src_r) { if (type == SLJIT_SHL) ins = 0x89000000 /* sll */; else if (type == SLJIT_LSHR) @@ -2545,21 +2625,21 @@ static sljit_s32 sljit_emit_shift(struct sljit_compiler *compiler, sljit_s32 op, else ins = 0x8a000000 /* sra */; - FAIL_IF(push_inst(compiler, ins | (dst_r << 20) | (base_r << 12) | imm)); + FAIL_IF(push_inst(compiler, ins | R20A(dst_r) | R12A(base_r) | imm)); } else { if (type == SLJIT_SHL) - ins = (op & SLJIT_I32_OP) ? 0xeb00000000df /* sllk */ : 0xeb000000000d /* sllg */; + ins = (op & SLJIT_32) ? 0xeb00000000df /* sllk */ : 0xeb000000000d /* sllg */; else if (type == SLJIT_LSHR) - ins = (op & SLJIT_I32_OP) ? 0xeb00000000de /* srlk */ : 0xeb000000000c /* srlg */; + ins = (op & SLJIT_32) ? 0xeb00000000de /* srlk */ : 0xeb000000000c /* srlg */; else - ins = (op & SLJIT_I32_OP) ? 0xeb00000000dc /* srak */ : 0xeb000000000a /* srag */; + ins = (op & SLJIT_32) ? 0xeb00000000dc /* srak */ : 0xeb000000000a /* srag */; - FAIL_IF(push_inst(compiler, ins | (dst_r << 36) | (src_r << 32) | (base_r << 28) | (imm << 16))); + FAIL_IF(push_inst(compiler, ins | R36A(dst_r) | R32A(src_r) | R28A(base_r) | (imm << 16))); } if ((op & SLJIT_SET_Z) && type != SLJIT_ASHR) - return push_inst(compiler, (op & SLJIT_I32_OP) ? or(dst_r, dst_r) : ogr(dst_r, dst_r)); + return push_inst(compiler, (op & SLJIT_32) ? or(dst_r, dst_r) : ogr(dst_r, dst_r)); return SLJIT_SUCCESS; } @@ -2590,20 +2670,14 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile sljit_s32 src2, sljit_sw src2w) { CHECK_ERROR(); - CHECK(check_sljit_emit_op2(compiler, op, dst, dstw, src1, src1w, src2, src2w)); + CHECK(check_sljit_emit_op2(compiler, op, 0, dst, dstw, src1, src1w, src2, src2w)); ADJUST_LOCAL_OFFSET(dst, dstw); ADJUST_LOCAL_OFFSET(src1, src1w); ADJUST_LOCAL_OFFSET(src2, src2w); - if (dst == SLJIT_UNUSED && !HAS_FLAGS(op)) - return SLJIT_SUCCESS; - - compiler->mode = op & SLJIT_I32_OP; + compiler->mode = op & SLJIT_32; compiler->status_flags_state = op & (VARIABLE_FLAG_MASK | SLJIT_SET_Z); - if (GET_OPCODE(op) >= SLJIT_ADD || GET_OPCODE(op) <= SLJIT_SUBC) - compiler->status_flags_state |= SLJIT_CURRENT_FLAGS_ADD_SUB; - if (is_commutative(op) && (src1 & SLJIT_IMM) && !(src2 & SLJIT_IMM)) { src1 ^= src2; src2 ^= src1; @@ -2616,39 +2690,57 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile switch (GET_OPCODE(op)) { case SLJIT_ADD: + compiler->status_flags_state |= SLJIT_CURRENT_FLAGS_ADD; return sljit_emit_add(compiler, op, dst, dstw, src1, src1w, src2, src2w); case SLJIT_ADDC: - FAIL_IF(emit_commutative(compiler, &addc_forms, dst, dstw, src1, src1w, src2, src2w)); + compiler->status_flags_state |= SLJIT_CURRENT_FLAGS_ADD; + FAIL_IF(emit_commutative(compiler, &addc_forms, dst, src1, src1w, src2, src2w)); if (dst & SLJIT_MEM) - return store_word(compiler, tmp0, dst, dstw, op & SLJIT_I32_OP); + return store_word(compiler, tmp0, dst, dstw, op & SLJIT_32); return SLJIT_SUCCESS; case SLJIT_SUB: + compiler->status_flags_state |= SLJIT_CURRENT_FLAGS_SUB; return sljit_emit_sub(compiler, op, dst, dstw, src1, src1w, src2, src2w); case SLJIT_SUBC: - FAIL_IF(emit_non_commutative(compiler, &subc_forms, dst, dstw, src1, src1w, src2, src2w)); + compiler->status_flags_state |= SLJIT_CURRENT_FLAGS_SUB; + FAIL_IF(emit_non_commutative(compiler, &subc_forms, dst, src1, src1w, src2, src2w)); if (dst & SLJIT_MEM) - return store_word(compiler, tmp0, dst, dstw, op & SLJIT_I32_OP); + return store_word(compiler, tmp0, dst, dstw, op & SLJIT_32); return SLJIT_SUCCESS; case SLJIT_MUL: - FAIL_IF(sljit_emit_multiply(compiler, op, dst, dstw, src1, src1w, src2, src2w)); + FAIL_IF(sljit_emit_multiply(compiler, op, dst, src1, src1w, src2, src2w)); break; case SLJIT_AND: case SLJIT_OR: case SLJIT_XOR: - FAIL_IF(sljit_emit_bitwise(compiler, op, dst, dstw, src1, src1w, src2, src2w)); + FAIL_IF(sljit_emit_bitwise(compiler, op, dst, src1, src1w, src2, src2w)); break; case SLJIT_SHL: case SLJIT_LSHR: case SLJIT_ASHR: - FAIL_IF(sljit_emit_shift(compiler, op, dst, dstw, src1, src1w, src2, src2w)); + FAIL_IF(sljit_emit_shift(compiler, op, dst, src1, src1w, src2, src2w)); break; } if (dst & SLJIT_MEM) - return store_word(compiler, tmp0, dst, dstw, op & SLJIT_I32_OP); + return store_word(compiler, tmp0, dst, dstw, op & SLJIT_32); return SLJIT_SUCCESS; } +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2u(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2, sljit_sw src2w) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_op2(compiler, op, 1, 0, 0, src1, src1w, src2, src2w)); + +#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ + || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) + compiler->skip_checks = 1; +#endif + return sljit_emit_op2(compiler, op, (sljit_s32)tmp0, 0, src1, src1w, src2, src2w); +} + SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_src( struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src, sljit_sw srcw) @@ -2686,17 +2778,17 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_src( SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_register_index(sljit_s32 reg) { CHECK_REG_INDEX(check_sljit_get_register_index(reg)); - return gpr(reg); + return (sljit_s32)gpr(reg); } SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_float_register_index(sljit_s32 reg) { CHECK_REG_INDEX(check_sljit_get_float_register_index(reg)); - abort(); + return (sljit_s32)fgpr(reg); } SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_custom(struct sljit_compiler *compiler, - void *instruction, sljit_s32 size) + void *instruction, sljit_u32 size) { sljit_ins ins = 0; @@ -2711,21 +2803,254 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_custom(struct sljit_compiler *c /* Floating point operators */ /* --------------------------------------------------------------------- */ +#define FLOAT_LOAD 0 +#define FLOAT_STORE 1 + +static sljit_s32 float_mem(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 reg, + sljit_s32 mem, sljit_sw memw) +{ + struct addr addr; + sljit_ins ins; + + SLJIT_ASSERT(mem & SLJIT_MEM); + + if ((mem & OFFS_REG_MASK) || is_u12(memw) || !is_s20(memw)) { + FAIL_IF(make_addr_bx(compiler, &addr, mem, memw, tmp1)); + + if (op & FLOAT_STORE) + ins = (op & SLJIT_32) ? 0x70000000 /* ste */ : 0x60000000 /* std */; + else + ins = (op & SLJIT_32) ? 0x78000000 /* le */ : 0x68000000 /* ld */; + + return push_inst(compiler, ins | F20(reg) | R16A(addr.index) | R12A(addr.base) | (sljit_ins)addr.offset); + } + + FAIL_IF(make_addr_bxy(compiler, &addr, mem, memw, tmp1)); + + if (op & FLOAT_STORE) + ins = (op & SLJIT_32) ? 0xed0000000066 /* stey */ : 0xed0000000067 /* stdy */; + else + ins = (op & SLJIT_32) ? 0xed0000000064 /* ley */ : 0xed0000000065 /* ldy */; + + return push_inst(compiler, ins | F36(reg) | R32A(addr.index) | R28A(addr.base) | disp_s20(addr.offset)); +} + +static sljit_s32 emit_float(struct sljit_compiler *compiler, sljit_ins ins_r, sljit_ins ins, + sljit_s32 reg, + sljit_s32 src, sljit_sw srcw) +{ + struct addr addr; + + if (!(src & SLJIT_MEM)) + return push_inst(compiler, ins_r | F4(reg) | F0(src)); + + FAIL_IF(make_addr_bx(compiler, &addr, src, srcw, tmp1)); + return push_inst(compiler, ins | F36(reg) | R32A(addr.index) | R28A(addr.base) | ((sljit_ins)addr.offset << 16)); +} + +static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_sw_from_f64(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 dst, sljit_sw dstw, + sljit_s32 src, sljit_sw srcw) +{ + sljit_ins dst_r = FAST_IS_REG(dst) ? gpr(dst) : tmp0; + sljit_ins ins; + + if (src & SLJIT_MEM) { + FAIL_IF(float_mem(compiler, FLOAT_LOAD | (op & SLJIT_32), TMP_FREG1, src, srcw)); + src = TMP_FREG1; + } + + /* M3 is set to 5 */ + if (GET_OPCODE(op) == SLJIT_CONV_SW_FROM_F64) + ins = (op & SLJIT_32) ? 0xb3a85000 /* cgebr */ : 0xb3a95000 /* cgdbr */; + else + ins = (op & SLJIT_32) ? 0xb3985000 /* cfebr */ : 0xb3995000 /* cfdbr */; + + FAIL_IF(push_inst(compiler, ins | R4A(dst_r) | F0(src))); + + if (dst & SLJIT_MEM) + return store_word(compiler, dst_r, dst, dstw, GET_OPCODE(op) >= SLJIT_CONV_S32_FROM_F64); + + return SLJIT_SUCCESS; +} + +static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_f64_from_sw(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 dst, sljit_sw dstw, + sljit_s32 src, sljit_sw srcw) +{ + sljit_s32 dst_r = FAST_IS_REG(dst) ? dst : TMP_FREG1; + sljit_ins ins; + + if (src & SLJIT_IMM) { + FAIL_IF(push_load_imm_inst(compiler, tmp0, srcw)); + src = (sljit_s32)tmp0; + } + else if (src & SLJIT_MEM) { + FAIL_IF(load_word(compiler, tmp0, src, srcw, GET_OPCODE(op) >= SLJIT_CONV_F64_FROM_S32)); + src = (sljit_s32)tmp0; + } + + if (GET_OPCODE(op) == SLJIT_CONV_F64_FROM_SW) + ins = (op & SLJIT_32) ? 0xb3a40000 /* cegbr */ : 0xb3a50000 /* cdgbr */; + else + ins = (op & SLJIT_32) ? 0xb3940000 /* cefbr */ : 0xb3950000 /* cdfbr */; + + FAIL_IF(push_inst(compiler, ins | F4(dst_r) | R0(src))); + + if (dst & SLJIT_MEM) + return float_mem(compiler, FLOAT_STORE | (op & SLJIT_32), TMP_FREG1, dst, dstw); + + return SLJIT_SUCCESS; +} + +static SLJIT_INLINE sljit_s32 sljit_emit_fop1_cmp(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2, sljit_sw src2w) +{ + sljit_ins ins_r, ins; + + if (src1 & SLJIT_MEM) { + FAIL_IF(float_mem(compiler, FLOAT_LOAD | (op & SLJIT_32), TMP_FREG1, src1, src1w)); + src1 = TMP_FREG1; + } + + if (op & SLJIT_32) { + ins_r = 0xb3090000 /* cebr */; + ins = 0xed0000000009 /* ceb */; + } else { + ins_r = 0xb3190000 /* cdbr */; + ins = 0xed0000000019 /* cdb */; + } + + return emit_float(compiler, ins_r, ins, src1, src2, src2w); +} + SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 dst, sljit_sw dstw, sljit_s32 src, sljit_sw srcw) { + sljit_s32 dst_r; + sljit_ins ins; + CHECK_ERROR(); - abort(); + + SELECT_FOP1_OPERATION_WITH_CHECKS(compiler, op, dst, dstw, src, srcw); + + dst_r = FAST_IS_REG(dst) ? dst : TMP_FREG1; + + if (op == SLJIT_CONV_F64_FROM_F32) + FAIL_IF(emit_float(compiler, 0xb3040000 /* ldebr */, 0xed0000000004 /* ldeb */, dst_r, src, srcw)); + else { + if (src & SLJIT_MEM) { + FAIL_IF(float_mem(compiler, FLOAT_LOAD | (op == SLJIT_CONV_F32_FROM_F64 ? 0 : (op & SLJIT_32)), dst_r, src, srcw)); + src = dst_r; + } + + switch (GET_OPCODE(op)) { + case SLJIT_MOV_F64: + if (FAST_IS_REG(dst)) { + if (dst == src) + return SLJIT_SUCCESS; + + ins = (op & SLJIT_32) ? 0x3800 /* ler */ : 0x2800 /* ldr */; + break; + } + return float_mem(compiler, FLOAT_STORE | (op & SLJIT_32), src, dst, dstw); + case SLJIT_CONV_F64_FROM_F32: + /* Only SLJIT_CONV_F32_FROM_F64. */ + ins = 0xb3440000 /* ledbr */; + break; + case SLJIT_NEG_F64: + ins = (op & SLJIT_32) ? 0xb3030000 /* lcebr */ : 0xb3130000 /* lcdbr */; + break; + default: + SLJIT_ASSERT(GET_OPCODE(op) == SLJIT_ABS_F64); + ins = (op & SLJIT_32) ? 0xb3000000 /* lpebr */ : 0xb3100000 /* lpdbr */; + break; + } + + FAIL_IF(push_inst(compiler, ins | F4(dst_r) | F0(src))); + } + + if (!(dst & SLJIT_MEM)) + return SLJIT_SUCCESS; + + SLJIT_ASSERT(dst_r == TMP_FREG1); + + return float_mem(compiler, FLOAT_STORE | (op & SLJIT_32), TMP_FREG1, dst, dstw); } +#define FLOAT_MOV(op, dst_r, src_r) \ + (((op & SLJIT_32) ? 0x3800 /* ler */ : 0x2800 /* ldr */) | F4(dst_r) | F0(src_r)) + SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop2(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 dst, sljit_sw dstw, sljit_s32 src1, sljit_sw src1w, sljit_s32 src2, sljit_sw src2w) { + sljit_s32 dst_r = TMP_FREG1; + sljit_ins ins_r, ins; + CHECK_ERROR(); - abort(); + CHECK(check_sljit_emit_fop2(compiler, op, dst, dstw, src1, src1w, src2, src2w)); + ADJUST_LOCAL_OFFSET(dst, dstw); + ADJUST_LOCAL_OFFSET(src1, src1w); + ADJUST_LOCAL_OFFSET(src2, src2w); + + do { + if (FAST_IS_REG(dst)) { + dst_r = dst; + + if (dst == src1) + break; + + if (dst == src2) { + if (GET_OPCODE(op) == SLJIT_ADD_F64 || GET_OPCODE(op) == SLJIT_MUL_F64) { + src2 = src1; + src2w = src1w; + src1 = dst; + break; + } + + FAIL_IF(push_inst(compiler, FLOAT_MOV(op, TMP_FREG1, src2))); + src2 = TMP_FREG1; + } + } + + if (src1 & SLJIT_MEM) + FAIL_IF(float_mem(compiler, FLOAT_LOAD | (op & SLJIT_32), dst_r, src1, src1w)); + else + FAIL_IF(push_inst(compiler, FLOAT_MOV(op, dst_r, src1))); + } while (0); + + switch (GET_OPCODE(op)) { + case SLJIT_ADD_F64: + ins_r = (op & SLJIT_32) ? 0xb30a0000 /* aebr */ : 0xb31a0000 /* adbr */; + ins = (op & SLJIT_32) ? 0xed000000000a /* aeb */ : 0xed000000001a /* adb */; + break; + case SLJIT_SUB_F64: + ins_r = (op & SLJIT_32) ? 0xb30b0000 /* sebr */ : 0xb31b0000 /* sdbr */; + ins = (op & SLJIT_32) ? 0xed000000000b /* seb */ : 0xed000000001b /* sdb */; + break; + case SLJIT_MUL_F64: + ins_r = (op & SLJIT_32) ? 0xb3170000 /* meebr */ : 0xb31c0000 /* mdbr */; + ins = (op & SLJIT_32) ? 0xed0000000017 /* meeb */ : 0xed000000001c /* mdb */; + break; + default: + SLJIT_ASSERT(GET_OPCODE(op) == SLJIT_DIV_F64); + ins_r = (op & SLJIT_32) ? 0xb30d0000 /* debr */ : 0xb31d0000 /* ddbr */; + ins = (op & SLJIT_32) ? 0xed000000000d /* deb */ : 0xed000000001d /* ddb */; + break; + } + + FAIL_IF(emit_float(compiler, ins_r, ins, dst_r, src2, src2w)); + + if (dst & SLJIT_MEM) + return float_mem(compiler, FLOAT_STORE | (op & SLJIT_32), TMP_FREG1, dst, dstw); + + SLJIT_ASSERT(dst_r != TMP_FREG1); + return SLJIT_SUCCESS; } /* --------------------------------------------------------------------- */ @@ -2795,6 +3120,11 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_call(struct sljit_compile CHECK_ERROR_PTR(); CHECK_PTR(check_sljit_emit_call(compiler, type, arg_types)); + if (type & SLJIT_CALL_RETURN) { + PTR_FAIL_IF(emit_stack_frame_release(compiler)); + type = SLJIT_JUMP | (type & SLJIT_REWRITABLE_JUMP); + } + #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) compiler->skip_checks = 1; @@ -2809,14 +3139,15 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_ijump(struct sljit_compiler *compi CHECK_ERROR(); CHECK(check_sljit_emit_ijump(compiler, type, src, srcw)); - ADJUST_LOCAL_OFFSET(src, srcw); if (src & SLJIT_IMM) { SLJIT_ASSERT(!(srcw & 1)); /* target address must be even */ FAIL_IF(push_load_imm_inst(compiler, src_r, srcw)); } - else if (src & SLJIT_MEM) + else if (src & SLJIT_MEM) { + ADJUST_LOCAL_OFFSET(src, srcw); FAIL_IF(load_word(compiler, src_r, src, srcw, 0 /* 64-bit */)); + } /* emit jump instruction */ if (type >= SLJIT_FAST_CALL) @@ -2832,6 +3163,24 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_icall(struct sljit_compiler *compi CHECK_ERROR(); CHECK(check_sljit_emit_icall(compiler, type, arg_types, src, srcw)); + SLJIT_ASSERT(gpr(TMP_REG2) == tmp1); + + if (src & SLJIT_MEM) { + ADJUST_LOCAL_OFFSET(src, srcw); + FAIL_IF(load_word(compiler, tmp1, src, srcw, 0 /* 64-bit */)); + src = TMP_REG2; + } + + if (type & SLJIT_CALL_RETURN) { + if (src >= SLJIT_FIRST_SAVED_REG && src <= SLJIT_S0) { + FAIL_IF(push_inst(compiler, lgr(tmp1, gpr(src)))); + src = TMP_REG2; + } + + FAIL_IF(emit_stack_frame_release(compiler)); + type = SLJIT_JUMP; + } + #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) compiler->skip_checks = 1; @@ -2859,11 +3208,13 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co /* dst is also source operand */ if (dst & SLJIT_MEM) - FAIL_IF(load_word(compiler, dst_r, dst, dstw, op & SLJIT_I32_OP)); + FAIL_IF(load_word(compiler, dst_r, dst, dstw, op & SLJIT_32)); break; + case SLJIT_MOV32: + op |= SLJIT_32; + /* fallthrough */ case SLJIT_MOV: - case (SLJIT_MOV32 & ~SLJIT_I32_OP): /* can write straight into destination */ loc_r = dst_r; break; @@ -2876,7 +3227,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co if (have_lscond2()) { FAIL_IF(push_load_imm_inst(compiler, loc_r, 0)); FAIL_IF(push_inst(compiler, - WHEN2(op & SLJIT_I32_OP, lochi, locghi))); + WHEN2(op & SLJIT_32, lochi, locghi))); } else { /* TODO(mundaym): no load/store-on-condition 2 facility (ipm? branch-and-set?) */ abort(); @@ -2888,22 +3239,22 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co #define LEVAL(i) i(dst_r, loc_r) case SLJIT_AND: FAIL_IF(push_inst(compiler, - WHEN2(op & SLJIT_I32_OP, nr, ngr))); + WHEN2(op & SLJIT_32, nr, ngr))); break; case SLJIT_OR: FAIL_IF(push_inst(compiler, - WHEN2(op & SLJIT_I32_OP, or, ogr))); + WHEN2(op & SLJIT_32, or, ogr))); break; case SLJIT_XOR: FAIL_IF(push_inst(compiler, - WHEN2(op & SLJIT_I32_OP, xr, xgr))); + WHEN2(op & SLJIT_32, xr, xgr))); break; #undef LEVAL } /* store result to memory if required */ if (dst & SLJIT_MEM) - return store_word(compiler, dst_r, dst, dstw, op & SLJIT_I32_OP); + return store_word(compiler, dst_r, dst, dstw, (op & SLJIT_32)); return SLJIT_SUCCESS; } @@ -2913,7 +3264,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_cmov(struct sljit_compiler *compil sljit_s32 src, sljit_sw srcw) { sljit_u8 mask = get_cc(compiler, type & 0xff); - sljit_gpr dst_r = gpr(dst_reg & ~SLJIT_I32_OP); + sljit_gpr dst_r = gpr(dst_reg & ~SLJIT_32); sljit_gpr src_r = FAST_IS_REG(src) ? gpr(src) : tmp0; CHECK_ERROR(); @@ -2927,7 +3278,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_cmov(struct sljit_compiler *compil #define LEVAL(i) i(dst_r, src_r, mask) if (have_lscond1()) return push_inst(compiler, - WHEN2(dst_reg & SLJIT_I32_OP, locr, locgr)); + WHEN2(dst_reg & SLJIT_32, locr, locgr)); #undef LEVAL @@ -2991,7 +3342,7 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_set_jump_addr(sljit_uw addr, sljit_uw new_ta SLJIT_API_FUNC_ATTRIBUTE void sljit_set_const(sljit_uw addr, sljit_sw new_constant, sljit_sw executable_offset) { - sljit_set_jump_addr(addr, new_constant, executable_offset); + sljit_set_jump_addr(addr, (sljit_uw)new_constant, executable_offset); } SLJIT_API_FUNC_ATTRIBUTE struct sljit_put_label *sljit_emit_put_label( diff --git a/thirdparty/pcre2/src/sljit/sljitNativeSPARC_32.c b/thirdparty/pcre2/src/sljit/sljitNativeSPARC_32.c index 28886405af..218992b355 100644 --- a/thirdparty/pcre2/src/sljit/sljitNativeSPARC_32.c +++ b/thirdparty/pcre2/src/sljit/sljitNativeSPARC_32.c @@ -35,16 +35,13 @@ static sljit_s32 load_immediate(struct sljit_compiler *compiler, sljit_s32 dst, #define ARG2(flags, src2) ((flags & SRC2_IMM) ? IMM(src2) : S2(src2)) -static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 flags, +static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_u32 flags, sljit_s32 dst, sljit_s32 src1, sljit_sw src2) { SLJIT_COMPILE_ASSERT(ICC_IS_SET == SET_FLAGS, icc_is_set_and_set_flags_must_be_the_same); switch (op) { case SLJIT_MOV: - case SLJIT_MOV_U32: - case SLJIT_MOV_S32: - case SLJIT_MOV_P: SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM)); if (dst != src2) return push_inst(compiler, OR | D(dst) | S1(0) | S2(src2), DR(dst)); @@ -59,8 +56,7 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl FAIL_IF(push_inst(compiler, SLL | D(dst) | S1(src2) | IMM(24), DR(dst))); return push_inst(compiler, SRA | D(dst) | S1(dst) | IMM(24), DR(dst)); } - else if (dst != src2) - SLJIT_UNREACHABLE(); + SLJIT_ASSERT(dst == src2); return SLJIT_SUCCESS; case SLJIT_MOV_U16: @@ -70,13 +66,12 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl FAIL_IF(push_inst(compiler, SLL | D(dst) | S1(src2) | IMM(16), DR(dst))); return push_inst(compiler, (op == SLJIT_MOV_S16 ? SRA : SRL) | D(dst) | S1(dst) | IMM(16), DR(dst)); } - else if (dst != src2) - SLJIT_UNREACHABLE(); + SLJIT_ASSERT(dst == src2); return SLJIT_SUCCESS; case SLJIT_NOT: SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM)); - return push_inst(compiler, XNOR | (flags & SET_FLAGS) | D(dst) | S1(0) | S2(src2), DR(dst) | (flags & SET_FLAGS)); + return push_inst(compiler, XNOR | (flags & SET_FLAGS) | D(dst) | S1(0) | S2(src2), DRF(dst, flags)); case SLJIT_CLZ: SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM)); @@ -89,22 +84,24 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl /* Loop. */ FAIL_IF(push_inst(compiler, SUB | SET_FLAGS | D(0) | S1(TMP_REG1) | S2(0), SET_FLAGS)); FAIL_IF(push_inst(compiler, SLL | D(TMP_REG1) | S1(TMP_REG1) | IMM(1), DR(TMP_REG1))); - FAIL_IF(push_inst(compiler, BICC | DA(0xe) | (-2 & DISP_MASK), UNMOVABLE_INS)); + FAIL_IF(push_inst(compiler, BICC | DA(0xe) | ((sljit_ins)-2 & DISP_MASK), UNMOVABLE_INS)); return push_inst(compiler, ADD | D(dst) | S1(dst) | IMM(1), UNMOVABLE_INS); case SLJIT_ADD: - compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; - return push_inst(compiler, ADD | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DR(dst) | (flags & SET_FLAGS)); + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD; + return push_inst(compiler, ADD | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DRF(dst, flags)); case SLJIT_ADDC: - return push_inst(compiler, ADDC | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DR(dst) | (flags & SET_FLAGS)); + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD; + return push_inst(compiler, ADDC | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DRF(dst, flags)); case SLJIT_SUB: - compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; - return push_inst(compiler, SUB | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DR(dst) | (flags & SET_FLAGS)); + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_SUB; + return push_inst(compiler, SUB | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DRF(dst, flags)); case SLJIT_SUBC: - return push_inst(compiler, SUBC | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DR(dst) | (flags & SET_FLAGS)); + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_SUB; + return push_inst(compiler, SUBC | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DRF(dst, flags)); case SLJIT_MUL: compiler->status_flags_state = 0; @@ -116,13 +113,13 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl return push_inst(compiler, SUB | SET_FLAGS | D(0) | S1(TMP_REG1) | S2(TMP_LINK), MOVABLE_INS | SET_FLAGS); case SLJIT_AND: - return push_inst(compiler, AND | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DR(dst) | (flags & SET_FLAGS)); + return push_inst(compiler, AND | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DRF(dst, flags)); case SLJIT_OR: - return push_inst(compiler, OR | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DR(dst) | (flags & SET_FLAGS)); + return push_inst(compiler, OR | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DRF(dst, flags)); case SLJIT_XOR: - return push_inst(compiler, XOR | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DR(dst) | (flags & SET_FLAGS)); + return push_inst(compiler, XOR | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DRF(dst, flags)); case SLJIT_SHL: FAIL_IF(push_inst(compiler, SLL | D(dst) | S1(src1) | ARG2(flags, src2), DR(dst))); @@ -147,7 +144,7 @@ static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_t sljit_s32 word_reg_index = 8; sljit_s32 float_arg_index = 1; sljit_s32 double_arg_count = 0; - sljit_s32 float_offset = (16 + 6) * sizeof(sljit_sw); + sljit_u32 float_offset = (16 + 6) * sizeof(sljit_sw); sljit_s32 types = 0; sljit_s32 reg = 0; sljit_s32 move_to_tmp2 = 0; @@ -155,18 +152,12 @@ static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_t if (src) reg = reg_map[*src & REG_MASK]; - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; while (arg_types) { - types = (types << SLJIT_DEF_SHIFT) | (arg_types & SLJIT_DEF_MASK); + types = (types << SLJIT_ARG_SHIFT) | (arg_types & SLJIT_ARG_MASK); - switch (arg_types & SLJIT_DEF_MASK) { - case SLJIT_ARG_TYPE_F32: - float_arg_index++; - if (reg_index == reg) - move_to_tmp2 = 1; - reg_index++; - break; + switch (arg_types & SLJIT_ARG_MASK) { case SLJIT_ARG_TYPE_F64: float_arg_index++; double_arg_count++; @@ -174,36 +165,37 @@ static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_t move_to_tmp2 = 1; reg_index += 2; break; + case SLJIT_ARG_TYPE_F32: + float_arg_index++; + if (reg_index == reg) + move_to_tmp2 = 1; + reg_index++; + break; default: - if (reg_index != word_reg_index && reg_index < 14 && reg_index == reg) + if (reg_index != word_reg_index && reg_index == reg) move_to_tmp2 = 1; reg_index++; word_reg_index++; break; } - if (move_to_tmp2) { - move_to_tmp2 = 0; - if (reg < 14) - FAIL_IF(push_inst(compiler, OR | D(TMP_REG1) | S1(0) | S2A(reg), DR(TMP_REG1))); - *src = TMP_REG1; - } + arg_types >>= SLJIT_ARG_SHIFT; + } - arg_types >>= SLJIT_DEF_SHIFT; + if (move_to_tmp2) { + if (reg < 14) + FAIL_IF(push_inst(compiler, OR | D(TMP_REG1) | S1(0) | S2A(reg), DR(TMP_REG1))); + *src = TMP_REG1; } arg_types = types; while (arg_types) { - switch (arg_types & SLJIT_DEF_MASK) { - case SLJIT_ARG_TYPE_F32: - float_arg_index--; - FAIL_IF(push_inst(compiler, STF | FD(float_arg_index) | S1(SLJIT_SP) | IMM(float_offset), MOVABLE_INS)); - float_offset -= sizeof(sljit_f64); - break; + switch (arg_types & SLJIT_ARG_MASK) { case SLJIT_ARG_TYPE_F64: float_arg_index--; if (float_arg_index == 4 && double_arg_count == 4) { + /* The address is not doubleword aligned, so two instructions are required to store the double. */ FAIL_IF(push_inst(compiler, STF | FD(float_arg_index) | S1(SLJIT_SP) | IMM((16 + 7) * sizeof(sljit_sw)), MOVABLE_INS)); FAIL_IF(push_inst(compiler, STF | FD(float_arg_index) | (1 << 25) | S1(SLJIT_SP) | IMM((16 + 8) * sizeof(sljit_sw)), MOVABLE_INS)); } @@ -211,36 +203,41 @@ static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_t FAIL_IF(push_inst(compiler, STDF | FD(float_arg_index) | S1(SLJIT_SP) | IMM(float_offset), MOVABLE_INS)); float_offset -= sizeof(sljit_f64); break; + case SLJIT_ARG_TYPE_F32: + float_arg_index--; + FAIL_IF(push_inst(compiler, STF | FD(float_arg_index) | S1(SLJIT_SP) | IMM(float_offset), MOVABLE_INS)); + float_offset -= sizeof(sljit_f64); + break; default: break; } - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; } float_offset = (16 + 6) * sizeof(sljit_sw); while (types) { - switch (types & SLJIT_DEF_MASK) { - case SLJIT_ARG_TYPE_F32: - reg_index--; - if (reg_index < 14) - FAIL_IF(push_inst(compiler, LDUW | DA(reg_index) | S1(SLJIT_SP) | IMM(float_offset), reg_index)); - float_offset -= sizeof(sljit_f64); - break; + switch (types & SLJIT_ARG_MASK) { case SLJIT_ARG_TYPE_F64: reg_index -= 2; if (reg_index < 14) { if ((reg_index & 0x1) != 0) { FAIL_IF(push_inst(compiler, LDUW | DA(reg_index) | S1(SLJIT_SP) | IMM(float_offset), reg_index)); - if (reg_index < 13) + if (reg_index < 8 + 6 - 1) FAIL_IF(push_inst(compiler, LDUW | DA(reg_index + 1) | S1(SLJIT_SP) | IMM(float_offset + sizeof(sljit_sw)), reg_index + 1)); } - else + else FAIL_IF(push_inst(compiler, LDD | DA(reg_index) | S1(SLJIT_SP) | IMM(float_offset), reg_index)); } float_offset -= sizeof(sljit_f64); break; + case SLJIT_ARG_TYPE_F32: + reg_index--; + if (reg_index < 8 + 6) + FAIL_IF(push_inst(compiler, LDUW | DA(reg_index) | S1(SLJIT_SP) | IMM(float_offset), reg_index)); + float_offset -= sizeof(sljit_f64); + break; default: reg_index--; word_reg_index--; @@ -254,7 +251,7 @@ static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_t break; } - types >>= SLJIT_DEF_SHIFT; + types >>= SLJIT_ARG_SHIFT; } return SLJIT_SUCCESS; @@ -282,5 +279,5 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_set_jump_addr(sljit_uw addr, sljit_uw new_ta SLJIT_API_FUNC_ATTRIBUTE void sljit_set_const(sljit_uw addr, sljit_sw new_constant, sljit_sw executable_offset) { - sljit_set_jump_addr(addr, new_constant, executable_offset); + sljit_set_jump_addr(addr, (sljit_uw)new_constant, executable_offset); } diff --git a/thirdparty/pcre2/src/sljit/sljitNativeSPARC_common.c b/thirdparty/pcre2/src/sljit/sljitNativeSPARC_common.c index e833f09d7a..c8d19e16c6 100644 --- a/thirdparty/pcre2/src/sljit/sljitNativeSPARC_common.c +++ b/thirdparty/pcre2/src/sljit/sljitNativeSPARC_common.c @@ -98,36 +98,37 @@ static void sparc_cache_flush(sljit_ins *from, sljit_ins *to) #define TMP_FREG2 (SLJIT_NUMBER_OF_FLOAT_REGISTERS + 2) static const sljit_u8 reg_map[SLJIT_NUMBER_OF_REGISTERS + 6] = { - 0, 8, 9, 10, 11, 29, 28, 27, 23, 22, 21, 20, 19, 18, 17, 16, 26, 25, 24, 14, 1, 12, 13, 15 + 0, 8, 9, 10, 11, 23, 22, 21, 20, 19, 18, 17, 16, 29, 28, 27, 26, 25, 24, 14, 1, 12, 13, 15 }; static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { - 0, 0, 2, 4, 6, 8, 10, 12, 14 + 0, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30 }; /* --------------------------------------------------------------------- */ /* Instrucion forms */ /* --------------------------------------------------------------------- */ -#define D(d) (reg_map[d] << 25) -#define FD(d) (freg_map[d] << 25) -#define FDN(d) ((freg_map[d] | 0x1) << 25) -#define DA(d) ((d) << 25) -#define S1(s1) (reg_map[s1] << 14) -#define FS1(s1) (freg_map[s1] << 14) -#define S1A(s1) ((s1) << 14) -#define S2(s2) (reg_map[s2]) -#define FS2(s2) (freg_map[s2]) -#define FS2N(s2) (freg_map[s2] | 0x1) -#define S2A(s2) (s2) +#define D(d) ((sljit_ins)reg_map[d] << 25) +#define FD(d) ((sljit_ins)freg_map[d] << 25) +#define FDN(d) (((sljit_ins)freg_map[d] | 0x1) << 25) +#define DA(d) ((sljit_ins)(d) << 25) +#define S1(s1) ((sljit_ins)reg_map[s1] << 14) +#define FS1(s1) ((sljit_ins)freg_map[s1] << 14) +#define S1A(s1) ((sljit_ins)(s1) << 14) +#define S2(s2) ((sljit_ins)reg_map[s2]) +#define FS2(s2) ((sljit_ins)freg_map[s2]) +#define FS2N(s2) ((sljit_ins)freg_map[s2] | 0x1) +#define S2A(s2) ((sljit_ins)(s2)) #define IMM_ARG 0x2000 -#define DOP(op) ((op) << 5) -#define IMM(imm) (((imm) & 0x1fff) | IMM_ARG) +#define DOP(op) ((sljit_ins)(op) << 5) +#define IMM(imm) (((sljit_ins)(imm) & 0x1fff) | IMM_ARG) #define DR(dr) (reg_map[dr]) -#define OPC1(opcode) ((opcode) << 30) -#define OPC2(opcode) ((opcode) << 22) -#define OPC3(opcode) ((opcode) << 19) +#define DRF(dr, flags) ((sljit_s32)(reg_map[dr] | ((flags) & SET_FLAGS))) +#define OPC1(opcode) ((sljit_ins)(opcode) << 30) +#define OPC2(opcode) ((sljit_ins)(opcode) << 22) +#define OPC3(opcode) ((sljit_ins)(opcode) << 19) #define SET_FLAGS OPC3(0x10) #define ADD (OPC1(0x2) | OPC3(0x00)) @@ -156,6 +157,8 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { #define FSUBS (OPC1(0x2) | OPC3(0x34) | DOP(0x45)) #define JMPL (OPC1(0x2) | OPC3(0x38)) #define LDD (OPC1(0x3) | OPC3(0x03)) +#define LDDF (OPC1(0x3) | OPC3(0x23)) +#define LDF (OPC1(0x3) | OPC3(0x20)) #define LDUW (OPC1(0x3) | OPC3(0x00)) #define NOP (OPC1(0x0) | OPC2(0x04)) #define OR (OPC1(0x2) | OPC3(0x02)) @@ -170,6 +173,7 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { #define SRAX (OPC1(0x2) | OPC3(0x27) | (1 << 12)) #define SRL (OPC1(0x2) | OPC3(0x26)) #define SRLX (OPC1(0x2) | OPC3(0x26) | (1 << 12)) +#define STD (OPC1(0x3) | OPC3(0x07)) #define STDF (OPC1(0x3) | OPC3(0x27)) #define STF (OPC1(0x3) | OPC3(0x24)) #define STW (OPC1(0x3) | OPC3(0x04)) @@ -183,7 +187,7 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { #if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32) #define MAX_DISP (0x1fffff) #define MIN_DISP (-0x200000) -#define DISP_MASK (0x3fffff) +#define DISP_MASK ((sljit_ins)0x3fffff) #define BICC (OPC1(0x0) | OPC2(0x2)) #define FBFCC (OPC1(0x0) | OPC2(0x6)) @@ -274,7 +278,7 @@ static SLJIT_INLINE sljit_ins* detect_jump_type(struct sljit_jump *jump, sljit_i } } - diff += sizeof(sljit_ins); + diff += SSIZE_OF(ins); if (diff <= MAX_DISP && diff >= MIN_DISP) { jump->flags |= PATCH_B; @@ -300,7 +304,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil sljit_uw word_count; sljit_uw next_addr; sljit_sw executable_offset; - sljit_uw addr; + sljit_sw addr; struct sljit_label *label; struct sljit_jump *jump; @@ -340,7 +344,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil if (label && label->size == word_count) { /* Just recording the address. */ label->addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset); - label->size = code_ptr - code; + label->size = (sljit_uw)(code_ptr - code); label = label->next; } if (jump && jump->addr == word_count) { @@ -373,7 +377,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil if (label && label->size == word_count) { label->addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset); - label->size = code_ptr - code; + label->size = (sljit_uw)(code_ptr - code); label = label->next; } @@ -386,27 +390,27 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil jump = compiler->jumps; while (jump) { do { - addr = (jump->flags & JUMP_LABEL) ? jump->u.label->addr : jump->u.target; + addr = (sljit_sw)((jump->flags & JUMP_LABEL) ? jump->u.label->addr : jump->u.target); buf_ptr = (sljit_ins *)jump->addr; if (jump->flags & PATCH_CALL) { - addr = (sljit_sw)(addr - (sljit_uw)SLJIT_ADD_EXEC_OFFSET(buf_ptr, executable_offset)) >> 2; - SLJIT_ASSERT((sljit_sw)addr <= 0x1fffffff && (sljit_sw)addr >= -0x20000000); - buf_ptr[0] = CALL | (addr & 0x3fffffff); + addr = (addr - (sljit_sw)SLJIT_ADD_EXEC_OFFSET(buf_ptr, executable_offset)) >> 2; + SLJIT_ASSERT(addr <= 0x1fffffff && addr >= -0x20000000); + buf_ptr[0] = CALL | ((sljit_ins)addr & 0x3fffffff); break; } if (jump->flags & PATCH_B) { - addr = (sljit_sw)(addr - (sljit_uw)SLJIT_ADD_EXEC_OFFSET(buf_ptr, executable_offset)) >> 2; - SLJIT_ASSERT((sljit_sw)addr <= MAX_DISP && (sljit_sw)addr >= MIN_DISP); - buf_ptr[0] = (buf_ptr[0] & ~DISP_MASK) | (addr & DISP_MASK); + addr = (addr - (sljit_sw)SLJIT_ADD_EXEC_OFFSET(buf_ptr, executable_offset)) >> 2; + SLJIT_ASSERT(addr <= MAX_DISP && addr >= MIN_DISP); + buf_ptr[0] = (buf_ptr[0] & ~DISP_MASK) | ((sljit_ins)addr & DISP_MASK); break; } /* Set the fields of immediate loads. */ #if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32) SLJIT_ASSERT(((buf_ptr[0] & 0xc1cfffff) == 0x01000000) && ((buf_ptr[1] & 0xc1f83fff) == 0x80102000)); - buf_ptr[0] |= (addr >> 10) & 0x3fffff; - buf_ptr[1] |= addr & 0x3ff; + buf_ptr[0] |= (sljit_ins)(addr >> 10) & 0x3fffff; + buf_ptr[1] |= (sljit_ins)addr & 0x3ff; #else #error "Implementation required" #endif @@ -416,7 +420,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil put_label = compiler->put_labels; while (put_label) { - addr = put_label->label->addr; + addr = (sljit_sw)put_label->label->addr; buf_ptr = (sljit_ins *)put_label->addr; #if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32) @@ -431,7 +435,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil compiler->error = SLJIT_ERR_COMPILED; compiler->executable_offset = executable_offset; - compiler->executable_size = (code_ptr - code) * sizeof(sljit_ins); + compiler->executable_size = (sljit_uw)(code_ptr - code) * sizeof(sljit_ins); code = (sljit_ins *)SLJIT_ADD_EXEC_OFFSET(code, executable_offset); code_ptr = (sljit_ins *)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset); @@ -487,13 +491,14 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_has_cpu_feature(sljit_s32 feature_type) #define ALT_KEEP_CACHE 0x00040 #define CUMULATIVE_OP 0x00080 #define IMM_OP 0x00100 -#define SRC2_IMM 0x00200 +#define MOVE_OP 0x00200 +#define SRC2_IMM 0x00400 -#define REG_DEST 0x00400 -#define REG2_SOURCE 0x00800 -#define SLOW_SRC1 0x01000 -#define SLOW_SRC2 0x02000 -#define SLOW_DEST 0x04000 +#define REG_DEST 0x00800 +#define REG2_SOURCE 0x01000 +#define SLOW_SRC1 0x02000 +#define SLOW_SRC2 0x04000 +#define SLOW_DEST 0x08000 /* SET_FLAGS (0x10 << 19) also belong here! */ @@ -507,6 +512,10 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_enter(struct sljit_compiler *compi sljit_s32 options, sljit_s32 arg_types, sljit_s32 scratches, sljit_s32 saveds, sljit_s32 fscratches, sljit_s32 fsaveds, sljit_s32 local_size) { + sljit_s32 reg_index, types, tmp; + sljit_u32 float_offset, args_offset; + sljit_s32 saved_arg_index, scratch_arg_index, float_arg_index; + CHECK_ERROR(); CHECK(check_sljit_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size)); set_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size); @@ -514,7 +523,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_enter(struct sljit_compiler *compi local_size = (local_size + SLJIT_LOCALS_OFFSET + 7) & ~0x7; compiler->local_size = local_size; - if (local_size <= SIMM_MAX) { + if (local_size <= -SIMM_MIN) { FAIL_IF(push_inst(compiler, SAVE | D(SLJIT_SP) | S1(SLJIT_SP) | IMM(-local_size), UNMOVABLE_INS)); } else { @@ -522,7 +531,88 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_enter(struct sljit_compiler *compi FAIL_IF(push_inst(compiler, SAVE | D(SLJIT_SP) | S1(SLJIT_SP) | S2(TMP_REG1), UNMOVABLE_INS)); } - /* Arguments are in their appropriate registers. */ + arg_types >>= SLJIT_ARG_SHIFT; + + types = arg_types; + float_offset = 16 * sizeof(sljit_sw); + reg_index = 24; + + while (types && reg_index < 24 + 6) { + switch (types & SLJIT_ARG_MASK) { + case SLJIT_ARG_TYPE_F64: + if (reg_index & 0x1) { + FAIL_IF(push_inst(compiler, STW | DA(reg_index) | S1(SLJIT_SP) | IMM(float_offset), MOVABLE_INS)); + if (reg_index >= 24 + 6 - 1) + break; + FAIL_IF(push_inst(compiler, STW | DA(reg_index + 1) | S1(SLJIT_SP) | IMM(float_offset + sizeof(sljit_sw)), MOVABLE_INS)); + } else + FAIL_IF(push_inst(compiler, STD | DA(reg_index) | S1(SLJIT_SP) | IMM(float_offset), MOVABLE_INS)); + + float_offset += sizeof(sljit_f64); + reg_index++; + break; + case SLJIT_ARG_TYPE_F32: + FAIL_IF(push_inst(compiler, STW | DA(reg_index) | S1(SLJIT_SP) | IMM(float_offset), MOVABLE_INS)); + float_offset += sizeof(sljit_f64); + break; + } + + reg_index++; + types >>= SLJIT_ARG_SHIFT; + } + + args_offset = (16 + 1 + 6) * sizeof(sljit_sw); + float_offset = 16 * sizeof(sljit_sw); + reg_index = 24; + saved_arg_index = 24; + scratch_arg_index = 8 - 1; + float_arg_index = 1; + + while (arg_types) { + switch (arg_types & SLJIT_ARG_MASK) { + case SLJIT_ARG_TYPE_F64: + if (reg_index < 24 + 6 - 1) { + FAIL_IF(push_inst(compiler, LDDF | FD(float_arg_index) | S1(SLJIT_SP) | IMM(float_offset), MOVABLE_INS)); + } else if (reg_index < 24 + 6) { + FAIL_IF(push_inst(compiler, LDF | FD(float_arg_index) | S1(SLJIT_SP) | IMM(float_offset), MOVABLE_INS)); + FAIL_IF(push_inst(compiler, LDF | FD(float_arg_index) | (1 << 25) | S1A(30) | IMM(args_offset), MOVABLE_INS)); + } else { + FAIL_IF(push_inst(compiler, LDF | FD(float_arg_index) | S1A(30) | IMM(args_offset), MOVABLE_INS)); + FAIL_IF(push_inst(compiler, LDF | FD(float_arg_index) | (1 << 25) | S1A(30) | IMM(args_offset + sizeof(sljit_sw)), MOVABLE_INS)); + } + + float_arg_index++; + float_offset += sizeof(sljit_f64); + reg_index++; + break; + case SLJIT_ARG_TYPE_F32: + if (reg_index < 24 + 6) + FAIL_IF(push_inst(compiler, LDF | FD(float_arg_index) | S1(SLJIT_SP) | IMM(float_offset), MOVABLE_INS)); + else + FAIL_IF(push_inst(compiler, LDF | FD(float_arg_index) | S1A(30) | IMM(args_offset), MOVABLE_INS)); + float_arg_index++; + float_offset += sizeof(sljit_f64); + break; + default: + scratch_arg_index++; + + if (!(arg_types & SLJIT_ARG_TYPE_SCRATCH_REG)) { + tmp = saved_arg_index++; + if (tmp == reg_index) + break; + } else + tmp = scratch_arg_index; + + if (reg_index < 24 + 6) + FAIL_IF(push_inst(compiler, OR | DA(tmp) | S1(0) | S2A(reg_index), tmp)); + else + FAIL_IF(push_inst(compiler, LDUW | DA(tmp) | S1A(30) | IMM(args_offset), tmp)); + break; + } + + reg_index++; + arg_types >>= SLJIT_ARG_SHIFT; + } return SLJIT_SUCCESS; } @@ -539,12 +629,21 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_set_context(struct sljit_compiler *comp return SLJIT_SUCCESS; } +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return_void(struct sljit_compiler *compiler) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_return_void(compiler)); + + FAIL_IF(push_inst(compiler, JMPL | D(0) | S1A(31) | IMM(8), UNMOVABLE_INS)); + return push_inst(compiler, RESTORE | D(SLJIT_R0) | S1(SLJIT_R0) | S2(0), UNMOVABLE_INS); +} + SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src, sljit_sw srcw) { CHECK_ERROR(); CHECK(check_sljit_emit_return(compiler, op, src, srcw)); - if (op != SLJIT_MOV || !FAST_IS_REG(src)) { + if (TYPE_CAST_NEEDED(op) || !FAST_IS_REG(src)) { FAIL_IF(emit_mov_before_return(compiler, op, src, srcw)); src = SLJIT_R0; } @@ -591,7 +690,7 @@ static const sljit_ins data_transfer_insts[16 + 4] = { #undef ARCH_32_64 /* Can perform an operation using at most 1 instruction. */ -static sljit_s32 getput_arg_fast(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg, sljit_s32 arg, sljit_sw argw) +static sljit_s32 getput_arg_fast(struct sljit_compiler *compiler, sljit_u32 flags, sljit_s32 reg, sljit_s32 arg, sljit_sw argw) { SLJIT_ASSERT(arg & SLJIT_MEM); @@ -632,7 +731,7 @@ static sljit_s32 can_cache(sljit_s32 arg, sljit_sw argw, sljit_s32 next_arg, slj } /* Emit the necessary instructions. See can_cache above. */ -static sljit_s32 getput_arg(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg, sljit_s32 arg, sljit_sw argw, sljit_s32 next_arg, sljit_sw next_argw) +static sljit_s32 getput_arg(struct sljit_compiler *compiler, sljit_u32 flags, sljit_s32 reg, sljit_s32 arg, sljit_sw argw, sljit_s32 next_arg, sljit_sw next_argw) { sljit_s32 base, arg2, delay_slot; sljit_ins dest; @@ -660,7 +759,7 @@ static sljit_s32 getput_arg(struct sljit_compiler *compiler, sljit_s32 flags, sl arg2 = reg; else /* It must be a mov operation, so tmp1 must be free to use. */ arg2 = TMP_REG1; - FAIL_IF(push_inst(compiler, SLL_W | D(arg2) | S1(OFFS_REG(arg)) | IMM_ARG | argw, DR(arg2))); + FAIL_IF(push_inst(compiler, SLL_W | D(arg2) | S1(OFFS_REG(arg)) | IMM_ARG | (sljit_ins)argw, DR(arg2))); } } else { @@ -692,7 +791,7 @@ static sljit_s32 getput_arg(struct sljit_compiler *compiler, sljit_s32 flags, sl return push_inst(compiler, data_transfer_insts[flags & MEM_MASK] | dest | S1(base) | S2(arg2), delay_slot); } -static SLJIT_INLINE sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg, sljit_s32 arg, sljit_sw argw) +static SLJIT_INLINE sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit_u32 flags, sljit_s32 reg, sljit_s32 arg, sljit_sw argw) { if (getput_arg_fast(compiler, flags, reg, arg, argw)) return compiler->error; @@ -701,14 +800,14 @@ static SLJIT_INLINE sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit return getput_arg(compiler, flags, reg, arg, argw, 0, 0); } -static SLJIT_INLINE sljit_s32 emit_op_mem2(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg, sljit_s32 arg1, sljit_sw arg1w, sljit_s32 arg2, sljit_sw arg2w) +static SLJIT_INLINE sljit_s32 emit_op_mem2(struct sljit_compiler *compiler, sljit_u32 flags, sljit_s32 reg, sljit_s32 arg1, sljit_sw arg1w, sljit_s32 arg2, sljit_sw arg2w) { if (getput_arg_fast(compiler, flags, reg, arg1, arg1w)) return compiler->error; return getput_arg(compiler, flags, reg, arg1, arg1w, arg2, arg2w); } -static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 flags, +static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_u32 flags, sljit_s32 dst, sljit_sw dstw, sljit_s32 src1, sljit_sw src1w, sljit_s32 src2, sljit_sw src2w) @@ -727,11 +826,11 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3 compiler->cache_argw = 0; } - if (dst != SLJIT_UNUSED) { + if (dst != TMP_REG2) { if (FAST_IS_REG(dst)) { dst_r = dst; flags |= REG_DEST; - if (op >= SLJIT_MOV && op <= SLJIT_MOV_P) + if (flags & MOVE_OP) sugg_src2_r = dst_r; } else if ((dst & SLJIT_MEM) && !getput_arg_fast(compiler, flags | ARG_TEST, TMP_REG1, dst, dstw)) @@ -782,7 +881,7 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3 if (FAST_IS_REG(src2)) { src2_r = src2; flags |= REG2_SOURCE; - if (!(flags & REG_DEST) && op >= SLJIT_MOV && op <= SLJIT_MOV_P) + if ((flags & (REG_DEST | MOVE_OP)) == MOVE_OP) dst_r = src2_r; } else if (src2 & SLJIT_IMM) { @@ -793,8 +892,12 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3 } else { src2_r = 0; - if ((op >= SLJIT_MOV && op <= SLJIT_MOV_P) && (dst & SLJIT_MEM)) - dst_r = 0; + if (flags & MOVE_OP) { + if (dst & SLJIT_MEM) + dst_r = 0; + else + op = SLJIT_MOV; + } } } } @@ -888,7 +991,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile sljit_s32 dst, sljit_sw dstw, sljit_s32 src, sljit_sw srcw) { - sljit_s32 flags = HAS_FLAGS(op) ? SET_FLAGS : 0; + sljit_u32 flags = HAS_FLAGS(op) ? SET_FLAGS : 0; CHECK_ERROR(); CHECK(check_sljit_emit_op1(compiler, op, dst, dstw, src, srcw)); @@ -898,33 +1001,29 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile op = GET_OPCODE(op); switch (op) { case SLJIT_MOV: - case SLJIT_MOV_P: - return emit_op(compiler, SLJIT_MOV, flags | WORD_DATA, dst, dstw, TMP_REG1, 0, src, srcw); - +#if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32) case SLJIT_MOV_U32: - return emit_op(compiler, SLJIT_MOV_U32, flags | INT_DATA, dst, dstw, TMP_REG1, 0, src, srcw); - case SLJIT_MOV_S32: - return emit_op(compiler, SLJIT_MOV_S32, flags | INT_DATA | SIGNED_DATA, dst, dstw, TMP_REG1, 0, src, srcw); + case SLJIT_MOV32: +#endif + case SLJIT_MOV_P: + return emit_op(compiler, SLJIT_MOV, flags | WORD_DATA | MOVE_OP, dst, dstw, TMP_REG1, 0, src, srcw); case SLJIT_MOV_U8: - return emit_op(compiler, SLJIT_MOV_U8, flags | BYTE_DATA, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_u8)srcw : srcw); + return emit_op(compiler, SLJIT_MOV_U8, flags | BYTE_DATA | MOVE_OP, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_u8)srcw : srcw); case SLJIT_MOV_S8: - return emit_op(compiler, SLJIT_MOV_S8, flags | BYTE_DATA | SIGNED_DATA, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_s8)srcw : srcw); + return emit_op(compiler, SLJIT_MOV_S8, flags | BYTE_DATA | SIGNED_DATA | MOVE_OP, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_s8)srcw : srcw); case SLJIT_MOV_U16: - return emit_op(compiler, SLJIT_MOV_U16, flags | HALF_DATA, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_u16)srcw : srcw); + return emit_op(compiler, SLJIT_MOV_U16, flags | HALF_DATA | MOVE_OP, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_u16)srcw : srcw); case SLJIT_MOV_S16: - return emit_op(compiler, SLJIT_MOV_S16, flags | HALF_DATA | SIGNED_DATA, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_s16)srcw : srcw); + return emit_op(compiler, SLJIT_MOV_S16, flags | HALF_DATA | SIGNED_DATA | MOVE_OP, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_s16)srcw : srcw); case SLJIT_NOT: case SLJIT_CLZ: return emit_op(compiler, op, flags, dst, dstw, TMP_REG1, 0, src, srcw); - - case SLJIT_NEG: - return emit_op(compiler, SLJIT_SUB, flags | IMM_OP, dst, dstw, SLJIT_IMM, 0, src, srcw); } return SLJIT_SUCCESS; @@ -935,17 +1034,14 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile sljit_s32 src1, sljit_sw src1w, sljit_s32 src2, sljit_sw src2w) { - sljit_s32 flags = HAS_FLAGS(op) ? SET_FLAGS : 0; + sljit_u32 flags = HAS_FLAGS(op) ? SET_FLAGS : 0; CHECK_ERROR(); - CHECK(check_sljit_emit_op2(compiler, op, dst, dstw, src1, src1w, src2, src2w)); + CHECK(check_sljit_emit_op2(compiler, op, 0, dst, dstw, src1, src1w, src2, src2w)); ADJUST_LOCAL_OFFSET(dst, dstw); ADJUST_LOCAL_OFFSET(src1, src1w); ADJUST_LOCAL_OFFSET(src2, src2w); - if (dst == SLJIT_UNUSED && !HAS_FLAGS(op)) - return SLJIT_SUCCESS; - op = GET_OPCODE(op); switch (op) { case SLJIT_ADD: @@ -975,6 +1071,20 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile return SLJIT_SUCCESS; } +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2u(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2, sljit_sw src2w) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_op2(compiler, op, 1, 0, 0, src1, src1w, src2, src2w)); + +#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ + || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) + compiler->skip_checks = 1; +#endif + return sljit_emit_op2(compiler, op, TMP_REG2, 0, src1, src1w, src2, src2w); +} + SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_src(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src, sljit_sw srcw) { @@ -1015,7 +1125,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_float_register_index(sljit_s32 reg) } SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_custom(struct sljit_compiler *compiler, - void *instruction, sljit_s32 size) + void *instruction, sljit_u32 size) { CHECK_ERROR(); CHECK(check_sljit_emit_op_custom(compiler, instruction, size)); @@ -1027,8 +1137,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_custom(struct sljit_compiler *c /* Floating point operators */ /* --------------------------------------------------------------------- */ -#define FLOAT_DATA(op) (DOUBLE_DATA | ((op & SLJIT_F32_OP) >> 7)) -#define SELECT_FOP(op, single, double) ((op & SLJIT_F32_OP) ? single : double) +#define FLOAT_DATA(op) ((sljit_ins)DOUBLE_DATA | (((sljit_ins)(op) & SLJIT_32) >> 7)) +#define SELECT_FOP(op, single, double) ((op & SLJIT_32) ? single : double) #define FLOAT_TMP_MEM_OFFSET (22 * sizeof(sljit_sw)) static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_sw_from_f64(struct sljit_compiler *compiler, sljit_s32 op, @@ -1108,11 +1218,11 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compil compiler->cache_arg = 0; compiler->cache_argw = 0; - SLJIT_COMPILE_ASSERT((SLJIT_F32_OP == 0x100) && !(DOUBLE_DATA & 0x2), float_transfer_bit_error); + SLJIT_COMPILE_ASSERT((SLJIT_32 == 0x100) && !(DOUBLE_DATA & 0x2), float_transfer_bit_error); SELECT_FOP1_OPERATION_WITH_CHECKS(compiler, op, dst, dstw, src, srcw); if (GET_OPCODE(op) == SLJIT_CONV_F64_FROM_F32) - op ^= SLJIT_F32_OP; + op ^= SLJIT_32; dst_r = FAST_IS_REG(dst) ? dst : TMP_FREG1; @@ -1126,7 +1236,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compil if (src != dst_r) { if (dst_r != TMP_FREG1) { FAIL_IF(push_inst(compiler, FMOVS | FD(dst_r) | FS2(src), MOVABLE_INS)); - if (!(op & SLJIT_F32_OP)) + if (!(op & SLJIT_32)) FAIL_IF(push_inst(compiler, FMOVS | FDN(dst_r) | FS2N(src), MOVABLE_INS)); } else @@ -1135,17 +1245,17 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compil break; case SLJIT_NEG_F64: FAIL_IF(push_inst(compiler, FNEGS | FD(dst_r) | FS2(src), MOVABLE_INS)); - if (dst_r != src && !(op & SLJIT_F32_OP)) + if (dst_r != src && !(op & SLJIT_32)) FAIL_IF(push_inst(compiler, FMOVS | FDN(dst_r) | FS2N(src), MOVABLE_INS)); break; case SLJIT_ABS_F64: FAIL_IF(push_inst(compiler, FABSS | FD(dst_r) | FS2(src), MOVABLE_INS)); - if (dst_r != src && !(op & SLJIT_F32_OP)) + if (dst_r != src && !(op & SLJIT_32)) FAIL_IF(push_inst(compiler, FMOVS | FDN(dst_r) | FS2N(src), MOVABLE_INS)); break; case SLJIT_CONV_F64_FROM_F32: FAIL_IF(push_inst(compiler, SELECT_FOP(op, FSTOD, FDTOS) | FD(dst_r) | FS2(src), MOVABLE_INS)); - op ^= SLJIT_F32_OP; + op ^= SLJIT_32; break; } @@ -1288,10 +1398,12 @@ static sljit_ins get_cc(struct sljit_compiler *compiler, sljit_s32 type) case SLJIT_LESS: case SLJIT_GREATER_F64: /* Unordered. */ + case SLJIT_CARRY: return DA(0x5); case SLJIT_GREATER_EQUAL: case SLJIT_LESS_EQUAL_F64: + case SLJIT_NOT_CARRY: return DA(0xd); case SLJIT_GREATER: @@ -1315,15 +1427,17 @@ static sljit_ins get_cc(struct sljit_compiler *compiler, sljit_s32 type) return DA(0x2); case SLJIT_OVERFLOW: - if (!(compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB)) + if (!(compiler->status_flags_state & (SLJIT_CURRENT_FLAGS_ADD | SLJIT_CURRENT_FLAGS_SUB))) return DA(0x9); + /* fallthrough */ case SLJIT_UNORDERED_F64: return DA(0x7); case SLJIT_NOT_OVERFLOW: - if (!(compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB)) + if (!(compiler->status_flags_state & (SLJIT_CURRENT_FLAGS_ADD | SLJIT_CURRENT_FLAGS_SUB))) return DA(0x1); + /* fallthrough */ case SLJIT_ORDERED_F64: return DA(0xf); @@ -1412,7 +1526,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_ijump(struct sljit_compiler *compi jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump)); FAIL_IF(!jump); set_jump(jump, compiler, JUMP_ADDR); - jump->u.target = srcw; + jump->u.target = (sljit_uw)srcw; if ((compiler->delay_slot & DST_INS_MASK) != UNMOVABLE_INS) jump->flags |= IS_MOVABLE; @@ -1460,7 +1574,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co sljit_s32 dst, sljit_sw dstw, sljit_s32 type) { - sljit_s32 reg, flags = HAS_FLAGS(op) ? SET_FLAGS : 0; + sljit_s32 reg; + sljit_u32 flags = HAS_FLAGS(op) ? SET_FLAGS : 0; CHECK_ERROR(); CHECK(check_sljit_emit_op_flags(compiler, op, dst, dstw, type)); diff --git a/thirdparty/pcre2/src/sljit/sljitNativeX86_32.c b/thirdparty/pcre2/src/sljit/sljitNativeX86_32.c index 79a7e8bba5..b9a7b39789 100644 --- a/thirdparty/pcre2/src/sljit/sljitNativeX86_32.c +++ b/thirdparty/pcre2/src/sljit/sljitNativeX86_32.c @@ -26,6 +26,10 @@ /* x86 32-bit arch dependent functions. */ +/* --------------------------------------------------------------------- */ +/* Operators */ +/* --------------------------------------------------------------------- */ + static sljit_s32 emit_do_imm(struct sljit_compiler *compiler, sljit_u8 opcode, sljit_sw imm) { sljit_u8 *inst; @@ -38,314 +42,8 @@ static sljit_s32 emit_do_imm(struct sljit_compiler *compiler, sljit_u8 opcode, s return SLJIT_SUCCESS; } -static sljit_u8* generate_far_jump_code(struct sljit_jump *jump, sljit_u8 *code_ptr, sljit_sw executable_offset) -{ - sljit_s32 type = jump->flags >> TYPE_SHIFT; - - if (type == SLJIT_JUMP) { - *code_ptr++ = JMP_i32; - jump->addr++; - } - else if (type >= SLJIT_FAST_CALL) { - *code_ptr++ = CALL_i32; - jump->addr++; - } - else { - *code_ptr++ = GROUP_0F; - *code_ptr++ = get_jump_code(type); - jump->addr += 2; - } - - if (jump->flags & JUMP_LABEL) - jump->flags |= PATCH_MW; - else - sljit_unaligned_store_sw(code_ptr, jump->u.target - (jump->addr + 4) - (sljit_uw)executable_offset); - code_ptr += 4; - - return code_ptr; -} - -SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_enter(struct sljit_compiler *compiler, - sljit_s32 options, sljit_s32 arg_types, sljit_s32 scratches, sljit_s32 saveds, - sljit_s32 fscratches, sljit_s32 fsaveds, sljit_s32 local_size) -{ - sljit_s32 args, size; - sljit_u8 *inst; - - CHECK_ERROR(); - CHECK(check_sljit_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size)); - set_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size); - - /* Emit ENDBR32 at function entry if needed. */ - FAIL_IF(emit_endbranch(compiler)); - - args = get_arg_count(arg_types); - compiler->args = args; - - /* [esp+0] for saving temporaries and function calls. */ - compiler->stack_tmp_size = 2 * sizeof(sljit_sw); - -#if !(defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) - if (scratches > 3) - compiler->stack_tmp_size = 3 * sizeof(sljit_sw); -#endif - - compiler->saveds_offset = compiler->stack_tmp_size; - if (scratches > 3) - compiler->saveds_offset += ((scratches > (3 + 6)) ? 6 : (scratches - 3)) * sizeof(sljit_sw); - - compiler->locals_offset = compiler->saveds_offset; - - if (saveds > 3) - compiler->locals_offset += (saveds - 3) * sizeof(sljit_sw); - - if (options & SLJIT_F64_ALIGNMENT) - compiler->locals_offset = (compiler->locals_offset + sizeof(sljit_f64) - 1) & ~(sizeof(sljit_f64) - 1); - - size = 1 + (scratches > 9 ? (scratches - 9) : 0) + (saveds <= 3 ? saveds : 3); -#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) - size += (args > 0 ? (args * 2) : 0) + (args > 2 ? 2 : 0); -#else - size += (args > 0 ? (2 + args * 3) : 0); -#endif - inst = (sljit_u8*)ensure_buf(compiler, 1 + size); - FAIL_IF(!inst); - - INC_SIZE(size); - PUSH_REG(reg_map[TMP_REG1]); -#if !(defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) - if (args > 0) { - *inst++ = MOV_r_rm; - *inst++ = MOD_REG | (reg_map[TMP_REG1] << 3) | 0x4 /* esp */; - } -#endif - if (saveds > 2 || scratches > 9) - PUSH_REG(reg_map[SLJIT_S2]); - if (saveds > 1 || scratches > 10) - PUSH_REG(reg_map[SLJIT_S1]); - if (saveds > 0 || scratches > 11) - PUSH_REG(reg_map[SLJIT_S0]); - -#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) - if (args > 0) { - inst[0] = MOV_r_rm; - inst[1] = MOD_REG | (reg_map[SLJIT_S0] << 3) | reg_map[SLJIT_R2]; - inst += 2; - } - if (args > 1) { - inst[0] = MOV_r_rm; - inst[1] = MOD_REG | (reg_map[SLJIT_S1] << 3) | reg_map[SLJIT_R1]; - inst += 2; - } - if (args > 2) { - inst[0] = MOV_r_rm; - inst[1] = MOD_DISP8 | (reg_map[SLJIT_S2] << 3) | 0x4 /* esp */; - inst[2] = 0x24; - inst[3] = sizeof(sljit_sw) * (3 + 2); /* saveds >= 3 as well. */ - } -#else - if (args > 0) { - inst[0] = MOV_r_rm; - inst[1] = MOD_DISP8 | (reg_map[SLJIT_S0] << 3) | reg_map[TMP_REG1]; - inst[2] = sizeof(sljit_sw) * 2; - inst += 3; - } - if (args > 1) { - inst[0] = MOV_r_rm; - inst[1] = MOD_DISP8 | (reg_map[SLJIT_S1] << 3) | reg_map[TMP_REG1]; - inst[2] = sizeof(sljit_sw) * 3; - inst += 3; - } - if (args > 2) { - inst[0] = MOV_r_rm; - inst[1] = MOD_DISP8 | (reg_map[SLJIT_S2] << 3) | reg_map[TMP_REG1]; - inst[2] = sizeof(sljit_sw) * 4; - } -#endif - - SLJIT_ASSERT(SLJIT_LOCALS_OFFSET > 0); - -#if defined(__APPLE__) - /* Ignore pushed registers and SLJIT_LOCALS_OFFSET when computing the aligned local size. */ - saveds = (2 + (scratches > 9 ? (scratches - 9) : 0) + (saveds <= 3 ? saveds : 3)) * sizeof(sljit_uw); - local_size = ((SLJIT_LOCALS_OFFSET + saveds + local_size + 15) & ~15) - saveds; -#else - if (options & SLJIT_F64_ALIGNMENT) - local_size = SLJIT_LOCALS_OFFSET + ((local_size + sizeof(sljit_f64) - 1) & ~(sizeof(sljit_f64) - 1)); - else - local_size = SLJIT_LOCALS_OFFSET + ((local_size + sizeof(sljit_sw) - 1) & ~(sizeof(sljit_sw) - 1)); -#endif - - compiler->local_size = local_size; - -#ifdef _WIN32 - if (local_size > 0) { - if (local_size <= 4 * 4096) { - if (local_size > 4096) - EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_MEM1(SLJIT_SP), -4096); - if (local_size > 2 * 4096) - EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_MEM1(SLJIT_SP), -4096 * 2); - if (local_size > 3 * 4096) - EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_MEM1(SLJIT_SP), -4096 * 3); - } - else { - EMIT_MOV(compiler, SLJIT_R0, 0, SLJIT_SP, 0); - EMIT_MOV(compiler, SLJIT_R1, 0, SLJIT_IMM, (local_size - 1) >> 12); - - SLJIT_ASSERT (reg_map[SLJIT_R0] == 0); - - EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_MEM1(SLJIT_R0), -4096); - FAIL_IF(emit_non_cum_binary(compiler, BINARY_OPCODE(SUB), - SLJIT_R0, 0, SLJIT_R0, 0, SLJIT_IMM, 4096)); - FAIL_IF(emit_non_cum_binary(compiler, BINARY_OPCODE(SUB), - SLJIT_R1, 0, SLJIT_R1, 0, SLJIT_IMM, 1)); - - inst = (sljit_u8*)ensure_buf(compiler, 1 + 2); - FAIL_IF(!inst); - - INC_SIZE(2); - inst[0] = JNE_i8; - inst[1] = (sljit_s8) -16; - } - - EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_MEM1(SLJIT_SP), -local_size); - } -#endif - - SLJIT_ASSERT(local_size > 0); - -#if !defined(__APPLE__) - if (options & SLJIT_F64_ALIGNMENT) { - EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_SP, 0); - - /* Some space might allocated during sljit_grow_stack() above on WIN32. */ - FAIL_IF(emit_non_cum_binary(compiler, BINARY_OPCODE(SUB), - SLJIT_SP, 0, SLJIT_SP, 0, SLJIT_IMM, local_size + sizeof(sljit_sw))); - -#if defined _WIN32 && !(defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) - if (compiler->local_size > 1024) - FAIL_IF(emit_cum_binary(compiler, BINARY_OPCODE(ADD), - TMP_REG1, 0, TMP_REG1, 0, SLJIT_IMM, sizeof(sljit_sw))); -#endif - - inst = (sljit_u8*)ensure_buf(compiler, 1 + 6); - FAIL_IF(!inst); - - INC_SIZE(6); - inst[0] = GROUP_BINARY_81; - inst[1] = MOD_REG | AND | reg_map[SLJIT_SP]; - sljit_unaligned_store_sw(inst + 2, ~(sizeof(sljit_f64) - 1)); - - /* The real local size must be used. */ - return emit_mov(compiler, SLJIT_MEM1(SLJIT_SP), compiler->local_size, TMP_REG1, 0); - } -#endif - return emit_non_cum_binary(compiler, BINARY_OPCODE(SUB), - SLJIT_SP, 0, SLJIT_SP, 0, SLJIT_IMM, local_size); -} - -SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_set_context(struct sljit_compiler *compiler, - sljit_s32 options, sljit_s32 arg_types, sljit_s32 scratches, sljit_s32 saveds, - sljit_s32 fscratches, sljit_s32 fsaveds, sljit_s32 local_size) -{ - CHECK_ERROR(); - CHECK(check_sljit_set_context(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size)); - set_set_context(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size); - - compiler->args = get_arg_count(arg_types); - - /* [esp+0] for saving temporaries and function calls. */ - compiler->stack_tmp_size = 2 * sizeof(sljit_sw); - -#if !(defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) - if (scratches > 3) - compiler->stack_tmp_size = 3 * sizeof(sljit_sw); -#endif - - compiler->saveds_offset = compiler->stack_tmp_size; - if (scratches > 3) - compiler->saveds_offset += ((scratches > (3 + 6)) ? 6 : (scratches - 3)) * sizeof(sljit_sw); - - compiler->locals_offset = compiler->saveds_offset; - - if (saveds > 3) - compiler->locals_offset += (saveds - 3) * sizeof(sljit_sw); - - if (options & SLJIT_F64_ALIGNMENT) - compiler->locals_offset = (compiler->locals_offset + sizeof(sljit_f64) - 1) & ~(sizeof(sljit_f64) - 1); - -#if defined(__APPLE__) - saveds = (2 + (scratches > 9 ? (scratches - 9) : 0) + (saveds <= 3 ? saveds : 3)) * sizeof(sljit_uw); - compiler->local_size = ((SLJIT_LOCALS_OFFSET + saveds + local_size + 15) & ~15) - saveds; -#else - if (options & SLJIT_F64_ALIGNMENT) - compiler->local_size = SLJIT_LOCALS_OFFSET + ((local_size + sizeof(sljit_f64) - 1) & ~(sizeof(sljit_f64) - 1)); - else - compiler->local_size = SLJIT_LOCALS_OFFSET + ((local_size + sizeof(sljit_sw) - 1) & ~(sizeof(sljit_sw) - 1)); -#endif - return SLJIT_SUCCESS; -} - -SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src, sljit_sw srcw) -{ - sljit_s32 size; - sljit_u8 *inst; - - CHECK_ERROR(); - CHECK(check_sljit_emit_return(compiler, op, src, srcw)); - SLJIT_ASSERT(compiler->args >= 0); - - FAIL_IF(emit_mov_before_return(compiler, op, src, srcw)); - - SLJIT_ASSERT(compiler->local_size > 0); - -#if !defined(__APPLE__) - if (compiler->options & SLJIT_F64_ALIGNMENT) - EMIT_MOV(compiler, SLJIT_SP, 0, SLJIT_MEM1(SLJIT_SP), compiler->local_size) - else - FAIL_IF(emit_cum_binary(compiler, BINARY_OPCODE(ADD), - SLJIT_SP, 0, SLJIT_SP, 0, SLJIT_IMM, compiler->local_size)); -#else - FAIL_IF(emit_cum_binary(compiler, BINARY_OPCODE(ADD), - SLJIT_SP, 0, SLJIT_SP, 0, SLJIT_IMM, compiler->local_size)); -#endif - - size = 2 + (compiler->scratches > 9 ? (compiler->scratches - 9) : 0) + - (compiler->saveds <= 3 ? compiler->saveds : 3); -#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) - if (compiler->args > 2) - size += 2; -#endif - inst = (sljit_u8*)ensure_buf(compiler, 1 + size); - FAIL_IF(!inst); - - INC_SIZE(size); - - if (compiler->saveds > 0 || compiler->scratches > 11) - POP_REG(reg_map[SLJIT_S0]); - if (compiler->saveds > 1 || compiler->scratches > 10) - POP_REG(reg_map[SLJIT_S1]); - if (compiler->saveds > 2 || compiler->scratches > 9) - POP_REG(reg_map[SLJIT_S2]); - POP_REG(reg_map[TMP_REG1]); -#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) - if (compiler->args > 2) - RET_I16(sizeof(sljit_sw)); - else - RET(); -#else - RET(); -#endif - - return SLJIT_SUCCESS; -} - -/* --------------------------------------------------------------------- */ -/* Operators */ -/* --------------------------------------------------------------------- */ - /* Size contains the flags as well. */ -static sljit_u8* emit_x86_instruction(struct sljit_compiler *compiler, sljit_s32 size, +static sljit_u8* emit_x86_instruction(struct sljit_compiler *compiler, sljit_uw size, /* The register or immediate operand. */ sljit_s32 a, sljit_sw imma, /* The general operand (not immediate). */ @@ -353,8 +51,9 @@ static sljit_u8* emit_x86_instruction(struct sljit_compiler *compiler, sljit_s32 { sljit_u8 *inst; sljit_u8 *buf_ptr; - sljit_s32 flags = size & ~0xf; - sljit_s32 inst_size; + sljit_u8 reg_map_b; + sljit_uw flags = size; + sljit_uw inst_size; /* Both cannot be switched on. */ SLJIT_ASSERT((flags & (EX86_BIN_INS | EX86_SHIFT_INS)) != (EX86_BIN_INS | EX86_SHIFT_INS)); @@ -367,8 +66,6 @@ static sljit_u8* emit_x86_instruction(struct sljit_compiler *compiler, sljit_s32 SLJIT_ASSERT((flags & (EX86_PREF_F2 | EX86_PREF_F3)) != (EX86_PREF_F2 | EX86_PREF_F3) && (flags & (EX86_PREF_F2 | EX86_PREF_66)) != (EX86_PREF_F2 | EX86_PREF_66) && (flags & (EX86_PREF_F3 | EX86_PREF_66)) != (EX86_PREF_F3 | EX86_PREF_66)); - /* We don't support (%ebp). */ - SLJIT_ASSERT(!(b & SLJIT_MEM) || immb || reg_map[b & REG_MASK] != 5); size &= 0xf; inst_size = size; @@ -381,7 +78,7 @@ static sljit_u8* emit_x86_instruction(struct sljit_compiler *compiler, sljit_s32 /* Calculate size of b. */ inst_size += 1; /* mod r/m byte. */ if (b & SLJIT_MEM) { - if ((b & REG_MASK) == SLJIT_UNUSED) + if (!(b & REG_MASK)) inst_size += sizeof(sljit_sw); else if (immb != 0 && !(b & OFFS_REG_MASK)) { /* Immediate operand. */ @@ -390,11 +87,13 @@ static sljit_u8* emit_x86_instruction(struct sljit_compiler *compiler, sljit_s32 else inst_size += sizeof(sljit_sw); } + else if (reg_map[b & REG_MASK] == 5) + inst_size += sizeof(sljit_s8); if ((b & REG_MASK) == SLJIT_SP && !(b & OFFS_REG_MASK)) b |= TO_OFFS_REG(SLJIT_SP); - if ((b & OFFS_REG_MASK) != SLJIT_UNUSED) + if (b & OFFS_REG_MASK) inst_size += 1; /* SIB byte. */ } @@ -445,9 +144,9 @@ static sljit_u8* emit_x86_instruction(struct sljit_compiler *compiler, sljit_s32 if (a & SLJIT_IMM) *buf_ptr = 0; else if (!(flags & EX86_SSE2_OP1)) - *buf_ptr = reg_map[a] << 3; + *buf_ptr = U8(reg_map[a] << 3); else - *buf_ptr = a << 3; + *buf_ptr = U8(a << 3); } else { if (a & SLJIT_IMM) { @@ -460,27 +159,30 @@ static sljit_u8* emit_x86_instruction(struct sljit_compiler *compiler, sljit_s32 *buf_ptr = 0; } - if (!(b & SLJIT_MEM)) - *buf_ptr++ |= MOD_REG + ((!(flags & EX86_SSE2_OP2)) ? reg_map[b] : b); - else if ((b & REG_MASK) != SLJIT_UNUSED) { - if ((b & OFFS_REG_MASK) == SLJIT_UNUSED || (b & OFFS_REG_MASK) == TO_OFFS_REG(SLJIT_SP)) { - if (immb != 0) { + if (!(b & SLJIT_MEM)) { + *buf_ptr = U8(*buf_ptr | MOD_REG | (!(flags & EX86_SSE2_OP2) ? reg_map[b] : b)); + buf_ptr++; + } else if (b & REG_MASK) { + reg_map_b = reg_map[b & REG_MASK]; + + if (!(b & OFFS_REG_MASK) || (b & OFFS_REG_MASK) == TO_OFFS_REG(SLJIT_SP) || reg_map_b == 5) { + if (immb != 0 || reg_map_b == 5) { if (immb <= 127 && immb >= -128) *buf_ptr |= 0x40; else *buf_ptr |= 0x80; } - if ((b & OFFS_REG_MASK) == SLJIT_UNUSED) - *buf_ptr++ |= reg_map[b & REG_MASK]; + if (!(b & OFFS_REG_MASK)) + *buf_ptr++ |= reg_map_b; else { *buf_ptr++ |= 0x04; - *buf_ptr++ = reg_map[b & REG_MASK] | (reg_map[OFFS_REG(b)] << 3); + *buf_ptr++ = U8(reg_map_b | (reg_map[OFFS_REG(b)] << 3)); } - if (immb != 0) { + if (immb != 0 || reg_map_b == 5) { if (immb <= 127 && immb >= -128) - *buf_ptr++ = immb; /* 8 bit displacement. */ + *buf_ptr++ = U8(immb); /* 8 bit displacement. */ else { sljit_unaligned_store_sw(buf_ptr, immb); /* 32 bit displacement. */ buf_ptr += sizeof(sljit_sw); @@ -489,7 +191,7 @@ static sljit_u8* emit_x86_instruction(struct sljit_compiler *compiler, sljit_s32 } else { *buf_ptr++ |= 0x04; - *buf_ptr++ = reg_map[b & REG_MASK] | (reg_map[OFFS_REG(b)] << 3) | (immb << 6); + *buf_ptr++ = U8(reg_map_b | (reg_map[OFFS_REG(b)] << 3) | (immb << 6)); } } else { @@ -500,9 +202,9 @@ static sljit_u8* emit_x86_instruction(struct sljit_compiler *compiler, sljit_s32 if (a & SLJIT_IMM) { if (flags & EX86_BYTE_ARG) - *buf_ptr = imma; + *buf_ptr = U8(imma); else if (flags & EX86_HALF_ARG) - sljit_unaligned_store_s16(buf_ptr, imma); + sljit_unaligned_store_s16(buf_ptr, (sljit_s16)imma); else if (!(flags & EX86_SHIFT_INS)) sljit_unaligned_store_sw(buf_ptr, imma); } @@ -511,34 +213,449 @@ static sljit_u8* emit_x86_instruction(struct sljit_compiler *compiler, sljit_s32 } /* --------------------------------------------------------------------- */ -/* Call / return instructions */ +/* Enter / return */ /* --------------------------------------------------------------------- */ +static sljit_u8* generate_far_jump_code(struct sljit_jump *jump, sljit_u8 *code_ptr, sljit_sw executable_offset) +{ + sljit_uw type = jump->flags >> TYPE_SHIFT; + + if (type == SLJIT_JUMP) { + *code_ptr++ = JMP_i32; + jump->addr++; + } + else if (type >= SLJIT_FAST_CALL) { + *code_ptr++ = CALL_i32; + jump->addr++; + } + else { + *code_ptr++ = GROUP_0F; + *code_ptr++ = get_jump_code(type); + jump->addr += 2; + } + + if (jump->flags & JUMP_LABEL) + jump->flags |= PATCH_MW; + else + sljit_unaligned_store_sw(code_ptr, (sljit_sw)(jump->u.target - (jump->addr + 4) - (sljit_uw)executable_offset)); + code_ptr += 4; + + return code_ptr; +} + +#define ENTER_R2_USED 0x00001 +#define ENTER_R2_TO_S 0x00002 +#define ENTER_R2_TO_R0 0x00004 +#define ENTER_R1_TO_S 0x00008 +#define ENTER_TMP_TO_R4 0x00010 +#define ENTER_TMP_TO_S 0x00020 + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_enter(struct sljit_compiler *compiler, + sljit_s32 options, sljit_s32 arg_types, sljit_s32 scratches, sljit_s32 saveds, + sljit_s32 fscratches, sljit_s32 fsaveds, sljit_s32 local_size) +{ + sljit_s32 word_arg_count, saved_arg_count, float_arg_count; + sljit_s32 size, locals_offset, args_size, types, status; + sljit_u8 *inst; +#ifdef _WIN32 + sljit_s32 r2_offset = -1; +#endif + + CHECK_ERROR(); + CHECK(check_sljit_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size)); + set_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size); + + /* Emit ENDBR32 at function entry if needed. */ + FAIL_IF(emit_endbranch(compiler)); + + SLJIT_COMPILE_ASSERT(SLJIT_FR0 == 1, float_register_index_start); + + arg_types >>= SLJIT_ARG_SHIFT; + types = arg_types; + word_arg_count = 0; + saved_arg_count = 0; + float_arg_count = 0; + args_size = SSIZE_OF(sw); + status = 0; + while (types) { + switch (types & SLJIT_ARG_MASK) { + case SLJIT_ARG_TYPE_F64: + float_arg_count++; + FAIL_IF(emit_sse2_load(compiler, 0, float_arg_count, SLJIT_MEM1(SLJIT_SP), args_size)); + args_size += SSIZE_OF(f64); + break; + case SLJIT_ARG_TYPE_F32: + float_arg_count++; + FAIL_IF(emit_sse2_load(compiler, 1, float_arg_count, SLJIT_MEM1(SLJIT_SP), args_size)); + args_size += SSIZE_OF(f32); + break; + default: + word_arg_count++; + + if (!(types & SLJIT_ARG_TYPE_SCRATCH_REG)) { + saved_arg_count++; + if (saved_arg_count == 4) + status |= ENTER_TMP_TO_S; + } else { + if (word_arg_count == 4) + status |= ENTER_TMP_TO_R4; #if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + if (word_arg_count == 3) + status |= ENTER_R2_USED; +#endif + } + +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + if (word_arg_count <= 2 && !(options & SLJIT_ENTER_CDECL)) + break; +#endif + + args_size += SSIZE_OF(sw); + break; + } + types >>= SLJIT_ARG_SHIFT; + } + + args_size -= SSIZE_OF(sw); + compiler->args_size = args_size; + + /* [esp+0] for saving temporaries and function calls. */ + locals_offset = 2 * SSIZE_OF(sw); + +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + if ((options & SLJIT_ENTER_CDECL) && scratches >= 3) + locals_offset = 4 * SSIZE_OF(sw); +#else + if (scratches >= 3) + locals_offset = 4 * SSIZE_OF(sw); +#endif + + compiler->scratches_offset = locals_offset; + + if (scratches > 3) + locals_offset += ((scratches > (3 + 6)) ? 6 : (scratches - 3)) * SSIZE_OF(sw); + + if (saveds > 3) + locals_offset += (saveds - 3) * SSIZE_OF(sw); + + compiler->locals_offset = locals_offset; + + size = 1 + (scratches > 9 ? (scratches - 9) : 0) + (saveds <= 3 ? saveds : 3); + inst = (sljit_u8*)ensure_buf(compiler, (sljit_uw)(size + 1)); + FAIL_IF(!inst); + + INC_SIZE((sljit_uw)size); + PUSH_REG(reg_map[TMP_REG1]); + if (saveds > 2 || scratches > 9) + PUSH_REG(reg_map[SLJIT_S2]); + if (saveds > 1 || scratches > 10) + PUSH_REG(reg_map[SLJIT_S1]); + if (saveds > 0 || scratches > 11) + PUSH_REG(reg_map[SLJIT_S0]); + + size *= SSIZE_OF(sw); + + if (status & (ENTER_TMP_TO_R4 | ENTER_TMP_TO_S)) + EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_MEM1(SLJIT_SP), args_size + size); -static sljit_s32 c_fast_call_get_stack_size(sljit_s32 arg_types, sljit_s32 *word_arg_count_ptr) + size += SSIZE_OF(sw); + +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + if (!(options & SLJIT_ENTER_CDECL)) + size += args_size; +#endif + + local_size = ((locals_offset + local_size + size + 0xf) & ~0xf) - size; + compiler->local_size = local_size; + +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + if (!(options & SLJIT_ENTER_CDECL)) + size -= args_size; +#endif + + word_arg_count = 0; + saved_arg_count = 0; + args_size = size; + while (arg_types) { + switch (arg_types & SLJIT_ARG_MASK) { + case SLJIT_ARG_TYPE_F64: + args_size += SSIZE_OF(f64); + break; + case SLJIT_ARG_TYPE_F32: + args_size += SSIZE_OF(f32); + break; + default: + word_arg_count++; + +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + if (!(options & SLJIT_ENTER_CDECL) && word_arg_count <= 2) { + if (word_arg_count == 1) { + if (status & ENTER_R2_USED) { + EMIT_MOV(compiler, (arg_types & SLJIT_ARG_TYPE_SCRATCH_REG) ? SLJIT_R0 : SLJIT_S0, 0, SLJIT_R2, 0); + } else if (!(arg_types & SLJIT_ARG_TYPE_SCRATCH_REG)) { + status |= ENTER_R2_TO_S; + saved_arg_count++; + } else + status |= ENTER_R2_TO_R0; + } else if (!(arg_types & SLJIT_ARG_TYPE_SCRATCH_REG)) { + status |= ENTER_R1_TO_S; + saved_arg_count++; + } + break; + } +#endif + if (arg_types & SLJIT_ARG_TYPE_SCRATCH_REG) { + SLJIT_ASSERT(word_arg_count <= 3 || (status & ENTER_TMP_TO_R4)); + + if (word_arg_count <= 3) { +#ifdef _WIN32 + if (word_arg_count == 3 && local_size > 4 * 4096) + r2_offset = local_size + args_size; + else +#endif + EMIT_MOV(compiler, word_arg_count, 0, SLJIT_MEM1(SLJIT_SP), args_size); + } + } else { + SLJIT_ASSERT(saved_arg_count <= 3 || (status & ENTER_TMP_TO_S)); + + if (saved_arg_count <= 3) + EMIT_MOV(compiler, SLJIT_S0 - saved_arg_count, 0, SLJIT_MEM1(SLJIT_SP), args_size); + saved_arg_count++; + } + args_size += SSIZE_OF(sw); + break; + } + arg_types >>= SLJIT_ARG_SHIFT; + } + +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + if (!(options & SLJIT_ENTER_CDECL)) { + if (status & ENTER_R2_TO_R0) + EMIT_MOV(compiler, SLJIT_R0, 0, SLJIT_R2, 0); + + saved_arg_count = 0; + if (status & ENTER_R2_TO_S) { + EMIT_MOV(compiler, SLJIT_S0, 0, SLJIT_R2, 0); + saved_arg_count++; + } + + if (status & ENTER_R1_TO_S) + EMIT_MOV(compiler, SLJIT_S0 - saved_arg_count, 0, SLJIT_R1, 0); + } +#endif + + SLJIT_ASSERT(SLJIT_LOCALS_OFFSET > 0); + +#ifdef _WIN32 + SLJIT_ASSERT(r2_offset == -1 || local_size > 4 * 4096); + + if (local_size > 4096) { + if (local_size <= 4 * 4096) { + BINARY_IMM32(OR, 0, SLJIT_MEM1(SLJIT_SP), -4096); + + if (local_size > 2 * 4096) + BINARY_IMM32(OR, 0, SLJIT_MEM1(SLJIT_SP), -4096 * 2); + if (local_size > 3 * 4096) + BINARY_IMM32(OR, 0, SLJIT_MEM1(SLJIT_SP), -4096 * 3); + } + else { + EMIT_MOV(compiler, SLJIT_R2, 0, SLJIT_IMM, local_size >> 12); + + BINARY_IMM32(OR, 0, SLJIT_MEM1(SLJIT_SP), -4096); + BINARY_IMM32(SUB, 4096, SLJIT_SP, 0); + + inst = (sljit_u8*)ensure_buf(compiler, 1 + 2); + FAIL_IF(!inst); + + INC_SIZE(2); + inst[0] = LOOP_i8; + inst[1] = (sljit_u8)-16; + local_size &= 0xfff; + } + } + + if (local_size > 0) { + BINARY_IMM32(OR, 0, SLJIT_MEM1(SLJIT_SP), -local_size); + BINARY_IMM32(SUB, local_size, SLJIT_SP, 0); + } + + if (r2_offset != -1) + EMIT_MOV(compiler, SLJIT_R2, 0, SLJIT_MEM1(SLJIT_SP), r2_offset); + +#else /* !_WIN32 */ + + SLJIT_ASSERT(local_size > 0); + + BINARY_IMM32(SUB, local_size, SLJIT_SP, 0); + +#endif /* _WIN32 */ + + if (status & (ENTER_TMP_TO_R4 | ENTER_TMP_TO_S)) { + size = (status & ENTER_TMP_TO_R4) ? compiler->scratches_offset : compiler->locals_offset - SSIZE_OF(sw); + EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_SP), size, TMP_REG1, 0); + } + + return SLJIT_SUCCESS; +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_set_context(struct sljit_compiler *compiler, + sljit_s32 options, sljit_s32 arg_types, sljit_s32 scratches, sljit_s32 saveds, + sljit_s32 fscratches, sljit_s32 fsaveds, sljit_s32 local_size) { - sljit_s32 stack_size = 0; + sljit_s32 args_size, locals_offset; +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) sljit_s32 word_arg_count = 0; +#endif - arg_types >>= SLJIT_DEF_SHIFT; + CHECK_ERROR(); + CHECK(check_sljit_set_context(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size)); + set_set_context(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size); + arg_types >>= SLJIT_ARG_SHIFT; + args_size = 0; while (arg_types) { - switch (arg_types & SLJIT_DEF_MASK) { + switch (arg_types & SLJIT_ARG_MASK) { + case SLJIT_ARG_TYPE_F64: + args_size += SSIZE_OF(f64); + break; case SLJIT_ARG_TYPE_F32: - stack_size += sizeof(sljit_f32); + args_size += SSIZE_OF(f32); + break; + default: +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + if (word_arg_count >= 2) + args_size += SSIZE_OF(sw); + word_arg_count++; +#else + args_size += SSIZE_OF(sw); +#endif break; + } + arg_types >>= SLJIT_ARG_SHIFT; + } + + compiler->args_size = args_size; + + /* [esp+0] for saving temporaries and function calls. */ + locals_offset = 2 * SSIZE_OF(sw); + +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + if ((options & SLJIT_ENTER_CDECL) && scratches >= 3) + locals_offset = 4 * SSIZE_OF(sw); +#else + if (scratches >= 3) + locals_offset = 4 * SSIZE_OF(sw); +#endif + + compiler->scratches_offset = locals_offset; + + if (scratches > 3) + locals_offset += ((scratches > (3 + 6)) ? 6 : (scratches - 3)) * SSIZE_OF(sw); + + if (saveds > 3) + locals_offset += (saveds - 3) * SSIZE_OF(sw); + + compiler->locals_offset = locals_offset; + + saveds = (2 + (scratches > 9 ? (scratches - 9) : 0) + (saveds <= 3 ? saveds : 3)) * SSIZE_OF(sw); + +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + if (!(options & SLJIT_ENTER_CDECL)) + saveds += args_size; +#endif + + compiler->local_size = ((locals_offset + local_size + saveds + 0xf) & ~0xf) - saveds; + return SLJIT_SUCCESS; +} + +static sljit_s32 emit_stack_frame_release(struct sljit_compiler *compiler) +{ + sljit_uw size; + sljit_u8 *inst; + + size = (sljit_uw)(1 + (compiler->scratches > 9 ? (compiler->scratches - 9) : 0) + + (compiler->saveds <= 3 ? compiler->saveds : 3)); + inst = (sljit_u8*)ensure_buf(compiler, 1 + size); + FAIL_IF(!inst); + + INC_SIZE(size); + + if (compiler->saveds > 0 || compiler->scratches > 11) + POP_REG(reg_map[SLJIT_S0]); + if (compiler->saveds > 1 || compiler->scratches > 10) + POP_REG(reg_map[SLJIT_S1]); + if (compiler->saveds > 2 || compiler->scratches > 9) + POP_REG(reg_map[SLJIT_S2]); + POP_REG(reg_map[TMP_REG1]); + + return SLJIT_SUCCESS; +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return_void(struct sljit_compiler *compiler) +{ + sljit_uw size; + sljit_u8 *inst; + + CHECK_ERROR(); + CHECK(check_sljit_emit_return_void(compiler)); + + SLJIT_ASSERT(compiler->args_size >= 0); + SLJIT_ASSERT(compiler->local_size > 0); + + BINARY_IMM32(ADD, compiler->local_size, SLJIT_SP, 0); + + FAIL_IF(emit_stack_frame_release(compiler)); + + size = 1; +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + if (compiler->args_size > 0 && !(compiler->options & SLJIT_ENTER_CDECL)) + size = 3; +#endif + inst = (sljit_u8*)ensure_buf(compiler, 1 + size); + FAIL_IF(!inst); + + INC_SIZE(size); + +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + if (compiler->args_size > 0 && !(compiler->options & SLJIT_ENTER_CDECL)) { + RET_I16(U8(compiler->args_size)); + return SLJIT_SUCCESS; + } +#endif + + RET(); + return SLJIT_SUCCESS; +} + +/* --------------------------------------------------------------------- */ +/* Call / return instructions */ +/* --------------------------------------------------------------------- */ + +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + +static sljit_sw c_fast_call_get_stack_size(sljit_s32 arg_types, sljit_s32 *word_arg_count_ptr) +{ + sljit_sw stack_size = 0; + sljit_s32 word_arg_count = 0; + + arg_types >>= SLJIT_ARG_SHIFT; + + while (arg_types) { + switch (arg_types & SLJIT_ARG_MASK) { case SLJIT_ARG_TYPE_F64: - stack_size += sizeof(sljit_f64); + stack_size += SSIZE_OF(f64); + break; + case SLJIT_ARG_TYPE_F32: + stack_size += SSIZE_OF(f32); break; default: word_arg_count++; if (word_arg_count > 2) - stack_size += sizeof(sljit_sw); + stack_size += SSIZE_OF(sw); break; } - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; } if (word_arg_count_ptr) @@ -548,12 +665,12 @@ static sljit_s32 c_fast_call_get_stack_size(sljit_s32 arg_types, sljit_s32 *word } static sljit_s32 c_fast_call_with_args(struct sljit_compiler *compiler, - sljit_s32 arg_types, sljit_s32 stack_size, sljit_s32 word_arg_count, sljit_s32 swap_args) + sljit_s32 arg_types, sljit_sw stack_size, sljit_s32 word_arg_count, sljit_s32 swap_args) { sljit_u8 *inst; sljit_s32 float_arg_count; - if (stack_size == sizeof(sljit_sw) && word_arg_count == 3) { + if (stack_size == SSIZE_OF(sw) && word_arg_count == 3) { inst = (sljit_u8*)ensure_buf(compiler, 1 + 1); FAIL_IF(!inst); INC_SIZE(1); @@ -561,41 +678,40 @@ static sljit_s32 c_fast_call_with_args(struct sljit_compiler *compiler, } else if (stack_size > 0) { if (word_arg_count >= 4) - EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_MEM1(SLJIT_SP), compiler->saveds_offset - sizeof(sljit_sw)); + EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_MEM1(SLJIT_SP), compiler->scratches_offset); - FAIL_IF(emit_non_cum_binary(compiler, BINARY_OPCODE(SUB), - SLJIT_SP, 0, SLJIT_SP, 0, SLJIT_IMM, stack_size)); + BINARY_IMM32(SUB, stack_size, SLJIT_SP, 0); stack_size = 0; - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; word_arg_count = 0; float_arg_count = 0; while (arg_types) { - switch (arg_types & SLJIT_DEF_MASK) { - case SLJIT_ARG_TYPE_F32: - float_arg_count++; - FAIL_IF(emit_sse2_store(compiler, 1, SLJIT_MEM1(SLJIT_SP), stack_size, float_arg_count)); - stack_size += sizeof(sljit_f32); - break; + switch (arg_types & SLJIT_ARG_MASK) { case SLJIT_ARG_TYPE_F64: float_arg_count++; FAIL_IF(emit_sse2_store(compiler, 0, SLJIT_MEM1(SLJIT_SP), stack_size, float_arg_count)); - stack_size += sizeof(sljit_f64); + stack_size += SSIZE_OF(f64); + break; + case SLJIT_ARG_TYPE_F32: + float_arg_count++; + FAIL_IF(emit_sse2_store(compiler, 1, SLJIT_MEM1(SLJIT_SP), stack_size, float_arg_count)); + stack_size += SSIZE_OF(f32); break; default: word_arg_count++; if (word_arg_count == 3) { EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_SP), stack_size, SLJIT_R2, 0); - stack_size += sizeof(sljit_sw); + stack_size += SSIZE_OF(sw); } else if (word_arg_count == 4) { EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_SP), stack_size, TMP_REG1, 0); - stack_size += sizeof(sljit_sw); + stack_size += SSIZE_OF(sw); } break; } - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; } } @@ -605,7 +721,7 @@ static sljit_s32 c_fast_call_with_args(struct sljit_compiler *compiler, FAIL_IF(!inst); INC_SIZE(1); - *inst++ = XCHG_EAX_r | reg_map[SLJIT_R2]; + *inst++ = U8(XCHG_EAX_r | reg_map[SLJIT_R2]); } else { inst = (sljit_u8*)ensure_buf(compiler, 1 + 2); @@ -613,7 +729,7 @@ static sljit_s32 c_fast_call_with_args(struct sljit_compiler *compiler, INC_SIZE(2); *inst++ = MOV_r_rm; - *inst++ = MOD_REG | (reg_map[SLJIT_R2] << 3) | reg_map[SLJIT_R0]; + *inst++ = U8(MOD_REG | (reg_map[SLJIT_R2] << 3) | reg_map[SLJIT_R0]); } } @@ -624,77 +740,73 @@ static sljit_s32 c_fast_call_with_args(struct sljit_compiler *compiler, static sljit_s32 cdecl_call_get_stack_size(struct sljit_compiler *compiler, sljit_s32 arg_types, sljit_s32 *word_arg_count_ptr) { - sljit_s32 stack_size = 0; + sljit_sw stack_size = 0; sljit_s32 word_arg_count = 0; - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; while (arg_types) { - switch (arg_types & SLJIT_DEF_MASK) { - case SLJIT_ARG_TYPE_F32: - stack_size += sizeof(sljit_f32); - break; + switch (arg_types & SLJIT_ARG_MASK) { case SLJIT_ARG_TYPE_F64: - stack_size += sizeof(sljit_f64); + stack_size += SSIZE_OF(f64); + break; + case SLJIT_ARG_TYPE_F32: + stack_size += SSIZE_OF(f32); break; default: word_arg_count++; - stack_size += sizeof(sljit_sw); + stack_size += SSIZE_OF(sw); break; } - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; } if (word_arg_count_ptr) *word_arg_count_ptr = word_arg_count; - if (stack_size <= compiler->stack_tmp_size) + if (stack_size <= compiler->scratches_offset) return 0; -#if defined(__APPLE__) - return ((stack_size - compiler->stack_tmp_size + 15) & ~15); -#else - return stack_size - compiler->stack_tmp_size; -#endif + return ((stack_size - compiler->scratches_offset + 0xf) & ~0xf); } static sljit_s32 cdecl_call_with_args(struct sljit_compiler *compiler, - sljit_s32 arg_types, sljit_s32 stack_size, sljit_s32 word_arg_count) + sljit_s32 arg_types, sljit_sw stack_size, sljit_s32 word_arg_count) { sljit_s32 float_arg_count = 0; + sljit_u8 *inst; if (word_arg_count >= 4) - EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_MEM1(SLJIT_SP), compiler->saveds_offset - sizeof(sljit_sw)); + EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_MEM1(SLJIT_SP), compiler->scratches_offset); if (stack_size > 0) - FAIL_IF(emit_non_cum_binary(compiler, BINARY_OPCODE(SUB), - SLJIT_SP, 0, SLJIT_SP, 0, SLJIT_IMM, stack_size)); + BINARY_IMM32(SUB, stack_size, SLJIT_SP, 0); stack_size = 0; word_arg_count = 0; - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; while (arg_types) { - switch (arg_types & SLJIT_DEF_MASK) { - case SLJIT_ARG_TYPE_F32: - float_arg_count++; - FAIL_IF(emit_sse2_store(compiler, 1, SLJIT_MEM1(SLJIT_SP), stack_size, float_arg_count)); - stack_size += sizeof(sljit_f32); - break; + switch (arg_types & SLJIT_ARG_MASK) { case SLJIT_ARG_TYPE_F64: float_arg_count++; FAIL_IF(emit_sse2_store(compiler, 0, SLJIT_MEM1(SLJIT_SP), stack_size, float_arg_count)); - stack_size += sizeof(sljit_f64); + stack_size += SSIZE_OF(f64); + break; + case SLJIT_ARG_TYPE_F32: + float_arg_count++; + FAIL_IF(emit_sse2_store(compiler, 1, SLJIT_MEM1(SLJIT_SP), stack_size, float_arg_count)); + stack_size += SSIZE_OF(f32); break; default: word_arg_count++; EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_SP), stack_size, (word_arg_count >= 4) ? TMP_REG1 : word_arg_count, 0); - stack_size += sizeof(sljit_sw); + stack_size += SSIZE_OF(sw); break; } - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; } return SLJIT_SUCCESS; @@ -707,13 +819,12 @@ static sljit_s32 post_call_with_args(struct sljit_compiler *compiler, sljit_s32 single; if (stack_size > 0) - FAIL_IF(emit_cum_binary(compiler, BINARY_OPCODE(ADD), - SLJIT_SP, 0, SLJIT_SP, 0, SLJIT_IMM, stack_size)); + BINARY_IMM32(ADD, stack_size, SLJIT_SP, 0); - if ((arg_types & SLJIT_DEF_MASK) < SLJIT_ARG_TYPE_F32) + if ((arg_types & SLJIT_ARG_MASK) < SLJIT_ARG_TYPE_F64) return SLJIT_SUCCESS; - single = ((arg_types & SLJIT_DEF_MASK) == SLJIT_ARG_TYPE_F32); + single = ((arg_types & SLJIT_ARG_MASK) == SLJIT_ARG_TYPE_F32); inst = (sljit_u8*)ensure_buf(compiler, 1 + 3); FAIL_IF(!inst); @@ -725,16 +836,399 @@ static sljit_s32 post_call_with_args(struct sljit_compiler *compiler, return emit_sse2_load(compiler, single, SLJIT_FR0, SLJIT_MEM1(SLJIT_SP), 0); } +static sljit_s32 tail_call_with_args(struct sljit_compiler *compiler, + sljit_s32 *extra_space, sljit_s32 arg_types, + sljit_s32 src, sljit_sw srcw) +{ + sljit_sw args_size, prev_args_size, saved_regs_size; + sljit_sw types, word_arg_count, float_arg_count; + sljit_sw stack_size, prev_stack_size, min_size, offset; + sljit_sw word_arg4_offset; + sljit_u8 r2_offset = 0; +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + sljit_u8 fast_call = (*extra_space & 0xff) == SLJIT_CALL; +#endif + sljit_u8* inst; + + ADJUST_LOCAL_OFFSET(src, srcw); + CHECK_EXTRA_REGS(src, srcw, (void)0); + + saved_regs_size = (1 + (compiler->scratches > 9 ? (compiler->scratches - 9) : 0) + + (compiler->saveds <= 3 ? compiler->saveds : 3)) * SSIZE_OF(sw); + + word_arg_count = 0; + float_arg_count = 0; + arg_types >>= SLJIT_ARG_SHIFT; + types = 0; + args_size = 0; + + while (arg_types != 0) { + types = (types << SLJIT_ARG_SHIFT) | (arg_types & SLJIT_ARG_MASK); + + switch (arg_types & SLJIT_ARG_MASK) { + case SLJIT_ARG_TYPE_F64: + args_size += SSIZE_OF(f64); + float_arg_count++; + break; + case SLJIT_ARG_TYPE_F32: + args_size += SSIZE_OF(f32); + float_arg_count++; + break; + default: + word_arg_count++; +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + if (!fast_call || word_arg_count > 2) + args_size += SSIZE_OF(sw); +#else + args_size += SSIZE_OF(sw); +#endif + break; + } + arg_types >>= SLJIT_ARG_SHIFT; + } + + if (args_size <= compiler->args_size +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + && (!(compiler->options & SLJIT_ENTER_CDECL) || args_size == 0 || !fast_call) +#endif /* SLJIT_X86_32_FASTCALL */ + && 1) { +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + *extra_space = fast_call ? 0 : args_size; + prev_args_size = compiler->args_size; + stack_size = prev_args_size + SSIZE_OF(sw) + saved_regs_size; +#else /* !SLJIT_X86_32_FASTCALL */ + *extra_space = 0; + stack_size = args_size + SSIZE_OF(sw) + saved_regs_size; +#endif /* SLJIT_X86_32_FASTCALL */ + + offset = stack_size + compiler->local_size; + + if (!(src & SLJIT_IMM) && src != SLJIT_R0) { + if (word_arg_count >= 1) { + EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_SP), 0, SLJIT_R0, 0); + r2_offset = sizeof(sljit_sw); + } + EMIT_MOV(compiler, SLJIT_R0, 0, src, srcw); + } + +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + if (!(compiler->options & SLJIT_ENTER_CDECL)) { + if (!fast_call) + offset -= SSIZE_OF(sw); + + if (word_arg_count >= 3) { + word_arg4_offset = SSIZE_OF(sw); + + if (word_arg_count + float_arg_count >= 4) { + word_arg4_offset = SSIZE_OF(sw) + SSIZE_OF(sw); + if ((types & SLJIT_ARG_MASK) == SLJIT_ARG_TYPE_F64) + word_arg4_offset = SSIZE_OF(sw) + SSIZE_OF(f64); + } + + /* In cdecl mode, at least one more word value must + * be present on the stack before the return address. */ + EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_SP), offset - word_arg4_offset, SLJIT_R2, 0); + } + + if (fast_call) { + if (args_size < prev_args_size) { + EMIT_MOV(compiler, SLJIT_R2, 0, SLJIT_MEM1(SLJIT_SP), offset - prev_args_size - SSIZE_OF(sw)); + EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_SP), offset - args_size - SSIZE_OF(sw), SLJIT_R2, 0); + } + } else if (prev_args_size > 0) { + EMIT_MOV(compiler, SLJIT_R2, 0, SLJIT_MEM1(SLJIT_SP), offset - prev_args_size); + EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_SP), offset, SLJIT_R2, 0); + } + } +#endif /* SLJIT_X86_32_FASTCALL */ + + while (types != 0) { + switch (types & SLJIT_ARG_MASK) { + case SLJIT_ARG_TYPE_F64: + offset -= SSIZE_OF(f64); + FAIL_IF(emit_sse2_store(compiler, 0, SLJIT_MEM1(SLJIT_SP), offset, float_arg_count)); + float_arg_count--; + break; + case SLJIT_ARG_TYPE_F32: + offset -= SSIZE_OF(f32); + FAIL_IF(emit_sse2_store(compiler, 0, SLJIT_MEM1(SLJIT_SP), offset, float_arg_count)); + float_arg_count--; + break; + default: + switch (word_arg_count) { + case 1: +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + if (fast_call) { + EMIT_MOV(compiler, SLJIT_R2, 0, r2_offset != 0 ? SLJIT_MEM1(SLJIT_SP) : SLJIT_R0, 0); + break; + } +#endif + offset -= SSIZE_OF(sw); + if (r2_offset != 0) { + EMIT_MOV(compiler, SLJIT_R2, 0, SLJIT_MEM1(SLJIT_SP), 0); + EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_SP), offset, SLJIT_R2, 0); + } else + EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_SP), offset, SLJIT_R0, 0); + break; + case 2: +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + if (fast_call) + break; +#endif + offset -= SSIZE_OF(sw); + EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_SP), offset, SLJIT_R1, 0); + break; + case 3: + offset -= SSIZE_OF(sw); + break; + case 4: + offset -= SSIZE_OF(sw); + EMIT_MOV(compiler, SLJIT_R2, 0, SLJIT_MEM1(SLJIT_SP), compiler->scratches_offset); + EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_SP), offset, SLJIT_R2, 0); + break; + } + word_arg_count--; + break; + } + types >>= SLJIT_ARG_SHIFT; + } + + BINARY_IMM32(ADD, compiler->local_size, SLJIT_SP, 0); + FAIL_IF(emit_stack_frame_release(compiler)); + +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + if (args_size < prev_args_size) + BINARY_IMM32(ADD, prev_args_size - args_size, SLJIT_SP, 0); +#endif + + return SLJIT_SUCCESS; + } + + stack_size = args_size + SSIZE_OF(sw); + + if (word_arg_count >= 1 && !(src & SLJIT_IMM) && src != SLJIT_R0) { + r2_offset = SSIZE_OF(sw); + stack_size += SSIZE_OF(sw); + } + + if (word_arg_count >= 3) + stack_size += SSIZE_OF(sw); + + prev_args_size = 0; +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + if (!(compiler->options & SLJIT_ENTER_CDECL)) + prev_args_size = compiler->args_size; +#endif + + prev_stack_size = prev_args_size + SSIZE_OF(sw) + saved_regs_size; + min_size = prev_stack_size + compiler->local_size; + + word_arg4_offset = compiler->scratches_offset; + + if (stack_size > min_size) { + BINARY_IMM32(SUB, stack_size - min_size, SLJIT_SP, 0); + if (src == SLJIT_MEM1(SLJIT_SP)) + srcw += stack_size - min_size; + word_arg4_offset += stack_size - min_size; + } + else + stack_size = min_size; + + if (word_arg_count >= 3) { + EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_SP), r2_offset, SLJIT_R2, 0); + + if (word_arg_count >= 4) + EMIT_MOV(compiler, SLJIT_R2, 0, SLJIT_MEM1(SLJIT_SP), word_arg4_offset); + } + + if (!(src & SLJIT_IMM) && src != SLJIT_R0) { + if (word_arg_count >= 1) { + SLJIT_ASSERT(r2_offset == sizeof(sljit_sw)); + EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_SP), 0, SLJIT_R0, 0); + } + EMIT_MOV(compiler, SLJIT_R0, 0, src, srcw); + } + + /* Restore saved registers. */ + offset = stack_size - prev_args_size - 2 * SSIZE_OF(sw); + EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_MEM1(SLJIT_SP), offset); + + if (compiler->saveds > 2 || compiler->scratches > 9) { + offset -= SSIZE_OF(sw); + EMIT_MOV(compiler, SLJIT_S2, 0, SLJIT_MEM1(SLJIT_SP), offset); + } + if (compiler->saveds > 1 || compiler->scratches > 10) { + offset -= SSIZE_OF(sw); + EMIT_MOV(compiler, SLJIT_S1, 0, SLJIT_MEM1(SLJIT_SP), offset); + } + if (compiler->saveds > 0 || compiler->scratches > 11) { + offset -= SSIZE_OF(sw); + EMIT_MOV(compiler, SLJIT_S0, 0, SLJIT_MEM1(SLJIT_SP), offset); + } + + /* Copy fourth argument and return address. */ +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + if (fast_call) { + offset = stack_size; + *extra_space = 0; + + if (word_arg_count >= 4 && prev_args_size == 0) { + offset -= SSIZE_OF(sw); + inst = emit_x86_instruction(compiler, 1, SLJIT_R2, 0, SLJIT_MEM1(SLJIT_SP), offset); + FAIL_IF(!inst); + *inst = XCHG_r_rm; + + SLJIT_ASSERT(args_size != prev_args_size); + } else { + if (word_arg_count >= 4) { + offset -= SSIZE_OF(sw); + EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_SP), offset, SLJIT_R2, 0); + } + + if (args_size != prev_args_size) + EMIT_MOV(compiler, SLJIT_R2, 0, SLJIT_MEM1(SLJIT_SP), stack_size - prev_args_size - SSIZE_OF(sw)); + } + + if (args_size != prev_args_size) + EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_SP), stack_size - args_size - SSIZE_OF(sw), SLJIT_R2, 0); + } else { +#endif /* SLJIT_X86_32_FASTCALL */ + offset = stack_size - SSIZE_OF(sw); + *extra_space = args_size; + + if (word_arg_count >= 4 && prev_args_size == SSIZE_OF(sw)) { + offset -= SSIZE_OF(sw); + inst = emit_x86_instruction(compiler, 1, SLJIT_R2, 0, SLJIT_MEM1(SLJIT_SP), offset); + FAIL_IF(!inst); + *inst = XCHG_r_rm; + + SLJIT_ASSERT(prev_args_size > 0); + } else { + if (word_arg_count >= 4) { + offset -= SSIZE_OF(sw); + EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_SP), offset, SLJIT_R2, 0); + } + + if (prev_args_size > 0) + EMIT_MOV(compiler, SLJIT_R2, 0, SLJIT_MEM1(SLJIT_SP), stack_size - prev_args_size - SSIZE_OF(sw)); + } + + /* Copy return address. */ + if (prev_args_size > 0) + EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_SP), stack_size - SSIZE_OF(sw), SLJIT_R2, 0); +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + } +#endif /* SLJIT_X86_32_FASTCALL */ + + while (types != 0) { + switch (types & SLJIT_ARG_MASK) { + case SLJIT_ARG_TYPE_F64: + offset -= SSIZE_OF(f64); + FAIL_IF(emit_sse2_store(compiler, 0, SLJIT_MEM1(SLJIT_SP), offset, float_arg_count)); + float_arg_count--; + break; + case SLJIT_ARG_TYPE_F32: + offset -= SSIZE_OF(f32); + FAIL_IF(emit_sse2_store(compiler, 0, SLJIT_MEM1(SLJIT_SP), offset, float_arg_count)); + float_arg_count--; + break; + default: + switch (word_arg_count) { + case 1: +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + if (fast_call) { + EMIT_MOV(compiler, SLJIT_R2, 0, r2_offset != 0 ? SLJIT_MEM1(SLJIT_SP) : SLJIT_R0, 0); + break; + } +#endif + offset -= SSIZE_OF(sw); + if (r2_offset != 0) { + EMIT_MOV(compiler, SLJIT_R2, 0, SLJIT_MEM1(SLJIT_SP), 0); + EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_SP), offset, SLJIT_R2, 0); + } else + EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_SP), offset, SLJIT_R0, 0); + break; + case 2: +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + if (fast_call) + break; +#endif + offset -= SSIZE_OF(sw); + EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_SP), offset, SLJIT_R1, 0); + break; + case 3: + offset -= SSIZE_OF(sw); + EMIT_MOV(compiler, SLJIT_R2, 0, SLJIT_MEM1(SLJIT_SP), r2_offset); + EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_SP), offset, SLJIT_R2, 0); + break; + } + word_arg_count--; + break; + } + types >>= SLJIT_ARG_SHIFT; + } + +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + /* Skip return address. */ + if (fast_call) + offset -= SSIZE_OF(sw); +#endif + + SLJIT_ASSERT(offset >= 0); + + if (offset == 0) + return SLJIT_SUCCESS; + + BINARY_IMM32(ADD, offset, SLJIT_SP, 0); + return SLJIT_SUCCESS; +} + +static sljit_s32 emit_tail_call_end(struct sljit_compiler *compiler, sljit_s32 extra_space) +{ + /* Called when stack consumption cannot be reduced to 0. */ + sljit_u8 *inst; + + BINARY_IMM32(ADD, extra_space, SLJIT_SP, 0); + + inst = (sljit_u8*)ensure_buf(compiler, 1 + 1); + FAIL_IF(!inst); + INC_SIZE(1); + RET(); + + return SLJIT_SUCCESS; +} + SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_call(struct sljit_compiler *compiler, sljit_s32 type, sljit_s32 arg_types) { struct sljit_jump *jump; - sljit_s32 stack_size = 0; + sljit_sw stack_size = 0; sljit_s32 word_arg_count; CHECK_ERROR_PTR(); CHECK_PTR(check_sljit_emit_call(compiler, type, arg_types)); + if (type & SLJIT_CALL_RETURN) { + stack_size = type; + PTR_FAIL_IF(tail_call_with_args(compiler, &stack_size, arg_types, SLJIT_IMM, 0)); + +#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ + || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) + compiler->skip_checks = 1; +#endif + + if (stack_size == 0) { + type = SLJIT_JUMP | (type & SLJIT_REWRITABLE_JUMP); + return sljit_emit_jump(compiler, type); + } + + jump = sljit_emit_jump(compiler, type); + PTR_FAIL_IF(jump == NULL); + + PTR_FAIL_IF(emit_tail_call_end(compiler, stack_size)); + return jump; + } + #if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) if ((type & 0xff) == SLJIT_CALL) { stack_size = c_fast_call_get_stack_size(arg_types, &word_arg_count); @@ -772,7 +1266,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_icall(struct sljit_compiler *compi sljit_s32 arg_types, sljit_s32 src, sljit_sw srcw) { - sljit_s32 stack_size = 0; + sljit_sw stack_size = 0; sljit_s32 word_arg_count; #if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) sljit_s32 swap_args; @@ -781,6 +1275,27 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_icall(struct sljit_compiler *compi CHECK_ERROR(); CHECK(check_sljit_emit_icall(compiler, type, arg_types, src, srcw)); + if (type & SLJIT_CALL_RETURN) { + stack_size = type; + FAIL_IF(tail_call_with_args(compiler, &stack_size, arg_types, src, srcw)); + + if (!(src & SLJIT_IMM)) { + src = SLJIT_R0; + srcw = 0; + } + +#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ + || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) + compiler->skip_checks = 1; +#endif + + if (stack_size == 0) + return sljit_emit_ijump(compiler, SLJIT_JUMP, src, srcw); + + FAIL_IF(sljit_emit_ijump(compiler, type, src, srcw)); + return emit_tail_call_end(compiler, stack_size); + } + #if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) SLJIT_ASSERT(reg_map[SLJIT_R0] == 0 && reg_map[SLJIT_R2] == 1 && SLJIT_R0 == 1 && SLJIT_R2 == 3); @@ -800,7 +1315,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_icall(struct sljit_compiler *compi FAIL_IF(c_fast_call_with_args(compiler, arg_types, stack_size, word_arg_count, swap_args)); - compiler->saveds_offset += stack_size; + compiler->scratches_offset += stack_size; compiler->locals_offset += stack_size; #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ @@ -809,7 +1324,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_icall(struct sljit_compiler *compi #endif FAIL_IF(sljit_emit_ijump(compiler, type, src, srcw)); - compiler->saveds_offset -= stack_size; + compiler->scratches_offset -= stack_size; compiler->locals_offset -= stack_size; return post_call_with_args(compiler, arg_types, 0); @@ -819,7 +1334,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_icall(struct sljit_compiler *compi stack_size = cdecl_call_get_stack_size(compiler, arg_types, &word_arg_count); FAIL_IF(cdecl_call_with_args(compiler, arg_types, stack_size, word_arg_count)); - compiler->saveds_offset += stack_size; + compiler->scratches_offset += stack_size; compiler->locals_offset += stack_size; #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ @@ -828,7 +1343,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_icall(struct sljit_compiler *compi #endif FAIL_IF(sljit_emit_ijump(compiler, type, src, srcw)); - compiler->saveds_offset -= stack_size; + compiler->scratches_offset -= stack_size; compiler->locals_offset -= stack_size; return post_call_with_args(compiler, arg_types, stack_size); @@ -844,10 +1359,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_enter(struct sljit_compiler * CHECK_EXTRA_REGS(dst, dstw, (void)0); - /* For UNUSED dst. Uncommon, but possible. */ - if (dst == SLJIT_UNUSED) - dst = TMP_REG1; - if (FAST_IS_REG(dst)) { /* Unused dest is possible here. */ inst = (sljit_u8*)ensure_buf(compiler, 1 + 1); @@ -895,34 +1406,18 @@ static sljit_s32 emit_fast_return(struct sljit_compiler *compiler, sljit_s32 src static sljit_s32 skip_frames_before_return(struct sljit_compiler *compiler) { - sljit_s32 size, saved_size; - sljit_s32 has_f64_aligment; + sljit_sw size; /* Don't adjust shadow stack if it isn't enabled. */ - if (!cpu_has_shadow_stack ()) + if (!cpu_has_shadow_stack()) return SLJIT_SUCCESS; - SLJIT_ASSERT(compiler->args >= 0); + SLJIT_ASSERT(compiler->args_size >= 0); SLJIT_ASSERT(compiler->local_size > 0); -#if !defined(__APPLE__) - has_f64_aligment = compiler->options & SLJIT_F64_ALIGNMENT; -#else - has_f64_aligment = 0; -#endif - size = compiler->local_size; - saved_size = (1 + (compiler->scratches > 9 ? (compiler->scratches - 9) : 0) + (compiler->saveds <= 3 ? compiler->saveds : 3)) * sizeof(sljit_uw); - if (has_f64_aligment) { - /* mov TMP_REG1, [esp + local_size]. */ - EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_MEM1(SLJIT_SP), size); - /* mov TMP_REG1, [TMP_REG1+ saved_size]. */ - EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_MEM1(TMP_REG1), saved_size); - /* Move return address to [esp]. */ - EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_SP), 0, TMP_REG1, 0); - size = 0; - } else - size += saved_size; - - return adjust_shadow_stack(compiler, SLJIT_UNUSED, 0, SLJIT_SP, size); + size += (1 + (compiler->scratches > 9 ? (compiler->scratches - 9) : 0) + + (compiler->saveds <= 3 ? compiler->saveds : 3)) * SSIZE_OF(sw); + + return adjust_shadow_stack(compiler, SLJIT_MEM1(SLJIT_SP), size); } diff --git a/thirdparty/pcre2/src/sljit/sljitNativeX86_64.c b/thirdparty/pcre2/src/sljit/sljitNativeX86_64.c index e85b56a61a..f37df6e1bf 100644 --- a/thirdparty/pcre2/src/sljit/sljitNativeX86_64.c +++ b/thirdparty/pcre2/src/sljit/sljitNativeX86_64.c @@ -26,6 +26,10 @@ /* x86 64-bit arch dependent functions. */ +/* --------------------------------------------------------------------- */ +/* Operators */ +/* --------------------------------------------------------------------- */ + static sljit_s32 emit_load_imm64(struct sljit_compiler *compiler, sljit_s32 reg, sljit_sw imm) { sljit_u8 *inst; @@ -34,14 +38,246 @@ static sljit_s32 emit_load_imm64(struct sljit_compiler *compiler, sljit_s32 reg, FAIL_IF(!inst); INC_SIZE(2 + sizeof(sljit_sw)); *inst++ = REX_W | ((reg_map[reg] <= 7) ? 0 : REX_B); - *inst++ = MOV_r_i32 + (reg_map[reg] & 0x7); + *inst++ = U8(MOV_r_i32 | (reg_map[reg] & 0x7)); sljit_unaligned_store_sw(inst, imm); return SLJIT_SUCCESS; } +static sljit_s32 emit_do_imm32(struct sljit_compiler *compiler, sljit_u8 rex, sljit_u8 opcode, sljit_sw imm) +{ + sljit_u8 *inst; + sljit_uw length = (rex ? 2 : 1) + sizeof(sljit_s32); + + inst = (sljit_u8*)ensure_buf(compiler, 1 + length); + FAIL_IF(!inst); + INC_SIZE(length); + if (rex) + *inst++ = rex; + *inst++ = opcode; + sljit_unaligned_store_s32(inst, (sljit_s32)imm); + return SLJIT_SUCCESS; +} + +static sljit_u8* emit_x86_instruction(struct sljit_compiler *compiler, sljit_uw size, + /* The register or immediate operand. */ + sljit_s32 a, sljit_sw imma, + /* The general operand (not immediate). */ + sljit_s32 b, sljit_sw immb) +{ + sljit_u8 *inst; + sljit_u8 *buf_ptr; + sljit_u8 rex = 0; + sljit_u8 reg_lmap_b; + sljit_uw flags = size; + sljit_uw inst_size; + + /* The immediate operand must be 32 bit. */ + SLJIT_ASSERT(!(a & SLJIT_IMM) || compiler->mode32 || IS_HALFWORD(imma)); + /* Both cannot be switched on. */ + SLJIT_ASSERT((flags & (EX86_BIN_INS | EX86_SHIFT_INS)) != (EX86_BIN_INS | EX86_SHIFT_INS)); + /* Size flags not allowed for typed instructions. */ + SLJIT_ASSERT(!(flags & (EX86_BIN_INS | EX86_SHIFT_INS)) || (flags & (EX86_BYTE_ARG | EX86_HALF_ARG)) == 0); + /* Both size flags cannot be switched on. */ + SLJIT_ASSERT((flags & (EX86_BYTE_ARG | EX86_HALF_ARG)) != (EX86_BYTE_ARG | EX86_HALF_ARG)); + /* SSE2 and immediate is not possible. */ + SLJIT_ASSERT(!(a & SLJIT_IMM) || !(flags & EX86_SSE2)); + SLJIT_ASSERT((flags & (EX86_PREF_F2 | EX86_PREF_F3)) != (EX86_PREF_F2 | EX86_PREF_F3) + && (flags & (EX86_PREF_F2 | EX86_PREF_66)) != (EX86_PREF_F2 | EX86_PREF_66) + && (flags & (EX86_PREF_F3 | EX86_PREF_66)) != (EX86_PREF_F3 | EX86_PREF_66)); + + size &= 0xf; + inst_size = size; + + if (!compiler->mode32 && !(flags & EX86_NO_REXW)) + rex |= REX_W; + else if (flags & EX86_REX) + rex |= REX; + + if (flags & (EX86_PREF_F2 | EX86_PREF_F3)) + inst_size++; + if (flags & EX86_PREF_66) + inst_size++; + + /* Calculate size of b. */ + inst_size += 1; /* mod r/m byte. */ + if (b & SLJIT_MEM) { + if (!(b & OFFS_REG_MASK)) { + if (NOT_HALFWORD(immb)) { + PTR_FAIL_IF(emit_load_imm64(compiler, TMP_REG2, immb)); + immb = 0; + if (b & REG_MASK) + b |= TO_OFFS_REG(TMP_REG2); + else + b |= TMP_REG2; + } + else if (reg_lmap[b & REG_MASK] == 4) + b |= TO_OFFS_REG(SLJIT_SP); + } + + if (!(b & REG_MASK)) + inst_size += 1 + sizeof(sljit_s32); /* SIB byte required to avoid RIP based addressing. */ + else { + if (reg_map[b & REG_MASK] >= 8) + rex |= REX_B; + + if (immb != 0 && (!(b & OFFS_REG_MASK) || (b & OFFS_REG_MASK) == TO_OFFS_REG(SLJIT_SP))) { + /* Immediate operand. */ + if (immb <= 127 && immb >= -128) + inst_size += sizeof(sljit_s8); + else + inst_size += sizeof(sljit_s32); + } + else if (reg_lmap[b & REG_MASK] == 5) + inst_size += sizeof(sljit_s8); + + if (b & OFFS_REG_MASK) { + inst_size += 1; /* SIB byte. */ + if (reg_map[OFFS_REG(b)] >= 8) + rex |= REX_X; + } + } + } + else if (!(flags & EX86_SSE2_OP2)) { + if (reg_map[b] >= 8) + rex |= REX_B; + } + else if (freg_map[b] >= 8) + rex |= REX_B; + + if (a & SLJIT_IMM) { + if (flags & EX86_BIN_INS) { + if (imma <= 127 && imma >= -128) { + inst_size += 1; + flags |= EX86_BYTE_ARG; + } else + inst_size += 4; + } + else if (flags & EX86_SHIFT_INS) { + imma &= compiler->mode32 ? 0x1f : 0x3f; + if (imma != 1) { + inst_size ++; + flags |= EX86_BYTE_ARG; + } + } else if (flags & EX86_BYTE_ARG) + inst_size++; + else if (flags & EX86_HALF_ARG) + inst_size += sizeof(short); + else + inst_size += sizeof(sljit_s32); + } + else { + SLJIT_ASSERT(!(flags & EX86_SHIFT_INS) || a == SLJIT_PREF_SHIFT_REG); + /* reg_map[SLJIT_PREF_SHIFT_REG] is less than 8. */ + if (!(flags & EX86_SSE2_OP1)) { + if (reg_map[a] >= 8) + rex |= REX_R; + } + else if (freg_map[a] >= 8) + rex |= REX_R; + } + + if (rex) + inst_size++; + + inst = (sljit_u8*)ensure_buf(compiler, 1 + inst_size); + PTR_FAIL_IF(!inst); + + /* Encoding the byte. */ + INC_SIZE(inst_size); + if (flags & EX86_PREF_F2) + *inst++ = 0xf2; + if (flags & EX86_PREF_F3) + *inst++ = 0xf3; + if (flags & EX86_PREF_66) + *inst++ = 0x66; + if (rex) + *inst++ = rex; + buf_ptr = inst + size; + + /* Encode mod/rm byte. */ + if (!(flags & EX86_SHIFT_INS)) { + if ((flags & EX86_BIN_INS) && (a & SLJIT_IMM)) + *inst = (flags & EX86_BYTE_ARG) ? GROUP_BINARY_83 : GROUP_BINARY_81; + + if (a & SLJIT_IMM) + *buf_ptr = 0; + else if (!(flags & EX86_SSE2_OP1)) + *buf_ptr = U8(reg_lmap[a] << 3); + else + *buf_ptr = U8(freg_lmap[a] << 3); + } + else { + if (a & SLJIT_IMM) { + if (imma == 1) + *inst = GROUP_SHIFT_1; + else + *inst = GROUP_SHIFT_N; + } else + *inst = GROUP_SHIFT_CL; + *buf_ptr = 0; + } + + if (!(b & SLJIT_MEM)) { + *buf_ptr = U8(*buf_ptr | MOD_REG | (!(flags & EX86_SSE2_OP2) ? reg_lmap[b] : freg_lmap[b])); + buf_ptr++; + } else if (b & REG_MASK) { + reg_lmap_b = reg_lmap[b & REG_MASK]; + + if (!(b & OFFS_REG_MASK) || (b & OFFS_REG_MASK) == TO_OFFS_REG(SLJIT_SP) || reg_lmap_b == 5) { + if (immb != 0 || reg_lmap_b == 5) { + if (immb <= 127 && immb >= -128) + *buf_ptr |= 0x40; + else + *buf_ptr |= 0x80; + } + + if (!(b & OFFS_REG_MASK)) + *buf_ptr++ |= reg_lmap_b; + else { + *buf_ptr++ |= 0x04; + *buf_ptr++ = U8(reg_lmap_b | (reg_lmap[OFFS_REG(b)] << 3)); + } + + if (immb != 0 || reg_lmap_b == 5) { + if (immb <= 127 && immb >= -128) + *buf_ptr++ = U8(immb); /* 8 bit displacement. */ + else { + sljit_unaligned_store_s32(buf_ptr, (sljit_s32)immb); /* 32 bit displacement. */ + buf_ptr += sizeof(sljit_s32); + } + } + } + else { + *buf_ptr++ |= 0x04; + *buf_ptr++ = U8(reg_lmap_b | (reg_lmap[OFFS_REG(b)] << 3) | (immb << 6)); + } + } + else { + *buf_ptr++ |= 0x04; + *buf_ptr++ = 0x25; + sljit_unaligned_store_s32(buf_ptr, (sljit_s32)immb); /* 32 bit displacement. */ + buf_ptr += sizeof(sljit_s32); + } + + if (a & SLJIT_IMM) { + if (flags & EX86_BYTE_ARG) + *buf_ptr = U8(imma); + else if (flags & EX86_HALF_ARG) + sljit_unaligned_store_s16(buf_ptr, (sljit_s16)imma); + else if (!(flags & EX86_SHIFT_INS)) + sljit_unaligned_store_s32(buf_ptr, (sljit_s32)imma); + } + + return !(flags & EX86_SHIFT_INS) ? inst : (inst + 1); +} + +/* --------------------------------------------------------------------- */ +/* Enter / return */ +/* --------------------------------------------------------------------- */ + static sljit_u8* generate_far_jump_code(struct sljit_jump *jump, sljit_u8 *code_ptr) { - sljit_s32 type = jump->flags >> TYPE_SHIFT; + sljit_uw type = jump->flags >> TYPE_SHIFT; int short_addr = !(jump->flags & SLJIT_REWRITABLE_JUMP) && !(jump->flags & JUMP_LABEL) && (jump->u.target <= 0xffffffff); @@ -50,7 +286,7 @@ static sljit_u8* generate_far_jump_code(struct sljit_jump *jump, sljit_u8 *code_ if (type < SLJIT_JUMP) { /* Invert type. */ - *code_ptr++ = get_jump_code(type ^ 0x1) - 0x10; + *code_ptr++ = U8(get_jump_code(type ^ 0x1) - 0x10); *code_ptr++ = short_addr ? (6 + 3) : (10 + 3); } @@ -63,13 +299,13 @@ static sljit_u8* generate_far_jump_code(struct sljit_jump *jump, sljit_u8 *code_ else if (short_addr) sljit_unaligned_store_s32(code_ptr, (sljit_s32)jump->u.target); else - sljit_unaligned_store_sw(code_ptr, jump->u.target); + sljit_unaligned_store_sw(code_ptr, (sljit_sw)jump->u.target); code_ptr += short_addr ? sizeof(sljit_s32) : sizeof(sljit_sw); *code_ptr++ = REX_B; *code_ptr++ = GROUP_FF; - *code_ptr++ = MOD_REG | (type >= SLJIT_FAST_CALL ? CALL_rm : JMP_rm) | reg_lmap[TMP_REG2]; + *code_ptr++ = U8(MOD_REG | (type >= SLJIT_FAST_CALL ? CALL_rm : JMP_rm) | reg_lmap[TMP_REG2]); return code_ptr; } @@ -90,7 +326,7 @@ static sljit_u8* generate_put_label_code(struct sljit_put_label *put_label, slji SLJIT_ASSERT((code_ptr[1] & 0xf8) == MOV_r_i32); if ((code_ptr[0] & 0x07) != 0) { - code_ptr[0] = (sljit_u8)(code_ptr[0] & ~0x08); + code_ptr[0] = U8(code_ptr[0] & ~0x08); code_ptr += 2 + sizeof(sljit_s32); } else { @@ -114,9 +350,9 @@ static sljit_u8* generate_put_label_code(struct sljit_put_label *put_label, slji SLJIT_ASSERT(code_ptr[1] == MOV_rm_r); - code_ptr[0] = (sljit_u8)(code_ptr[0] & ~0x4); + code_ptr[0] = U8(code_ptr[0] & ~0x4); code_ptr[1] = MOV_rm_i32; - code_ptr[2] = (sljit_u8)(code_ptr[2] & ~(0x7 << 3)); + code_ptr[2] = U8(code_ptr[2] & ~(0x7 << 3)); code_ptr = (sljit_u8*)(put_label->addr - (2 + sizeof(sljit_uw)) + sizeof(sljit_s32)); put_label->addr = (sljit_uw)code_ptr; @@ -128,7 +364,15 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_enter(struct sljit_compiler *compi sljit_s32 options, sljit_s32 arg_types, sljit_s32 scratches, sljit_s32 saveds, sljit_s32 fscratches, sljit_s32 fsaveds, sljit_s32 local_size) { - sljit_s32 args, i, tmp, size, saved_register_size; + sljit_uw size; + sljit_s32 word_arg_count = 0; + sljit_s32 saved_arg_count = 0; + sljit_s32 saved_regs_size, tmp, i; +#ifdef _WIN64 + sljit_s32 saved_float_regs_size; + sljit_s32 saved_float_regs_offset = 0; + sljit_s32 float_arg_count = 0; +#endif /* _WIN64 */ sljit_u8 *inst; CHECK_ERROR(); @@ -140,19 +384,11 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_enter(struct sljit_compiler *compi compiler->mode32 = 0; -#ifdef _WIN64 - /* Two/four register slots for parameters plus space for xmm6 register if needed. */ - if (fscratches >= 6 || fsaveds >= 1) - compiler->locals_offset = 6 * sizeof(sljit_sw); - else - compiler->locals_offset = ((scratches > 2) ? 4 : 2) * sizeof(sljit_sw); -#endif - /* Including the return address saved by the call instruction. */ - saved_register_size = GET_SAVED_REGISTERS_SIZE(scratches, saveds, 1); + saved_regs_size = GET_SAVED_REGISTERS_SIZE(scratches, saveds, 1); - tmp = saveds < SLJIT_NUMBER_OF_SAVED_REGISTERS ? (SLJIT_S0 + 1 - saveds) : SLJIT_FIRST_SAVED_REG; - for (i = SLJIT_S0; i >= tmp; i--) { + tmp = SLJIT_S0 - saveds; + for (i = SLJIT_S0; i > tmp; i--) { size = reg_map[i] >= 8 ? 2 : 1; inst = (sljit_u8*)ensure_buf(compiler, 1 + size); FAIL_IF(!inst); @@ -172,55 +408,75 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_enter(struct sljit_compiler *compi PUSH_REG(reg_lmap[i]); } - args = get_arg_count(arg_types); +#ifdef _WIN64 + local_size += SLJIT_LOCALS_OFFSET; + saved_float_regs_size = GET_SAVED_FLOAT_REGISTERS_SIZE(fscratches, fsaveds, 16); - if (args > 0) { - size = args * 3; - inst = (sljit_u8*)ensure_buf(compiler, 1 + size); - FAIL_IF(!inst); + if (saved_float_regs_size > 0) { + saved_float_regs_offset = ((local_size + 0xf) & ~0xf); + local_size = saved_float_regs_offset + saved_float_regs_size; + } +#else /* !_WIN64 */ + SLJIT_ASSERT(SLJIT_LOCALS_OFFSET == 0); +#endif /* _WIN64 */ - INC_SIZE(size); + arg_types >>= SLJIT_ARG_SHIFT; + while (arg_types > 0) { + if ((arg_types & SLJIT_ARG_MASK) < SLJIT_ARG_TYPE_F64) { + tmp = 0; #ifndef _WIN64 - if (args > 0) { - inst[0] = REX_W; - inst[1] = MOV_r_rm; - inst[2] = MOD_REG | (reg_map[SLJIT_S0] << 3) | 0x7 /* rdi */; - inst += 3; - } - if (args > 1) { - inst[0] = REX_W | REX_R; - inst[1] = MOV_r_rm; - inst[2] = MOD_REG | (reg_lmap[SLJIT_S1] << 3) | 0x6 /* rsi */; - inst += 3; - } - if (args > 2) { - inst[0] = REX_W | REX_R; - inst[1] = MOV_r_rm; - inst[2] = MOD_REG | (reg_lmap[SLJIT_S2] << 3) | 0x2 /* rdx */; - } -#else - if (args > 0) { - inst[0] = REX_W; - inst[1] = MOV_r_rm; - inst[2] = MOD_REG | (reg_map[SLJIT_S0] << 3) | 0x1 /* rcx */; - inst += 3; - } - if (args > 1) { - inst[0] = REX_W; - inst[1] = MOV_r_rm; - inst[2] = MOD_REG | (reg_map[SLJIT_S1] << 3) | 0x2 /* rdx */; - inst += 3; - } - if (args > 2) { - inst[0] = REX_W | REX_B; - inst[1] = MOV_r_rm; - inst[2] = MOD_REG | (reg_map[SLJIT_S2] << 3) | 0x0 /* r8 */; + switch (word_arg_count) { + case 0: + tmp = SLJIT_R2; + break; + case 1: + tmp = SLJIT_R1; + break; + case 2: + tmp = TMP_REG1; + break; + default: + tmp = SLJIT_R3; + break; + } +#else /* !_WIN64 */ + switch (word_arg_count + float_arg_count) { + case 0: + tmp = SLJIT_R3; + break; + case 1: + tmp = SLJIT_R1; + break; + case 2: + tmp = SLJIT_R2; + break; + default: + tmp = TMP_REG1; + break; + } +#endif /* _WIN64 */ + if (arg_types & SLJIT_ARG_TYPE_SCRATCH_REG) { + if (tmp != SLJIT_R0 + word_arg_count) + EMIT_MOV(compiler, SLJIT_R0 + word_arg_count, 0, tmp, 0); + } else { + EMIT_MOV(compiler, SLJIT_S0 - saved_arg_count, 0, tmp, 0); + saved_arg_count++; + } + word_arg_count++; + } else { +#ifdef _WIN64 + SLJIT_COMPILE_ASSERT(SLJIT_FR0 == 1, float_register_index_start); + float_arg_count++; + if (float_arg_count != float_arg_count + word_arg_count) + FAIL_IF(emit_sse2_load(compiler, (arg_types & SLJIT_ARG_MASK) == SLJIT_ARG_TYPE_F32, + float_arg_count, float_arg_count + word_arg_count, 0)); +#endif /* _WIN64 */ } -#endif + arg_types >>= SLJIT_ARG_SHIFT; } - local_size = ((local_size + SLJIT_LOCALS_OFFSET + saved_register_size + 15) & ~15) - saved_register_size; + local_size = ((local_size + saved_regs_size + 0xf) & ~0xf) - saved_regs_size; compiler->local_size = local_size; #ifdef _WIN64 @@ -234,44 +490,49 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_enter(struct sljit_compiler *compi EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_MEM1(SLJIT_SP), -4096 * 3); } else { - EMIT_MOV(compiler, SLJIT_R0, 0, SLJIT_SP, 0); - EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_IMM, (local_size - 1) >> 12); + EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_IMM, local_size >> 12); - SLJIT_ASSERT (reg_map[SLJIT_R0] == 0); - - EMIT_MOV(compiler, TMP_REG2, 0, SLJIT_MEM1(SLJIT_R0), -4096); - FAIL_IF(emit_non_cum_binary(compiler, BINARY_OPCODE(SUB), - SLJIT_R0, 0, SLJIT_R0, 0, SLJIT_IMM, 4096)); - FAIL_IF(emit_non_cum_binary(compiler, BINARY_OPCODE(SUB), - TMP_REG1, 0, TMP_REG1, 0, SLJIT_IMM, 1)); + EMIT_MOV(compiler, TMP_REG2, 0, SLJIT_MEM1(SLJIT_SP), -4096); + BINARY_IMM32(SUB, 4096, SLJIT_SP, 0); + BINARY_IMM32(SUB, 1, TMP_REG1, 0); inst = (sljit_u8*)ensure_buf(compiler, 1 + 2); FAIL_IF(!inst); INC_SIZE(2); inst[0] = JNE_i8; - inst[1] = (sljit_s8) -19; + inst[1] = (sljit_u8)-21; + local_size &= 0xfff; } - EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_MEM1(SLJIT_SP), -local_size); + if (local_size > 0) + EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_MEM1(SLJIT_SP), -local_size); } -#endif +#endif /* _WIN64 */ - if (local_size > 0) { - FAIL_IF(emit_non_cum_binary(compiler, BINARY_OPCODE(SUB), - SLJIT_SP, 0, SLJIT_SP, 0, SLJIT_IMM, local_size)); - } + if (local_size > 0) + BINARY_IMM32(SUB, local_size, SLJIT_SP, 0); #ifdef _WIN64 - /* Save xmm6 register: movaps [rsp + 0x20], xmm6 */ - if (fscratches >= 6 || fsaveds >= 1) { - inst = (sljit_u8*)ensure_buf(compiler, 1 + 5); - FAIL_IF(!inst); - INC_SIZE(5); - *inst++ = GROUP_0F; - sljit_unaligned_store_s32(inst, 0x20247429); + if (saved_float_regs_size > 0) { + compiler->mode32 = 1; + + tmp = SLJIT_FS0 - fsaveds; + for (i = SLJIT_FS0; i > tmp; i--) { + inst = emit_x86_instruction(compiler, 2 | EX86_SSE2, i, 0, SLJIT_MEM1(SLJIT_SP), saved_float_regs_offset); + *inst++ = GROUP_0F; + *inst = MOVAPS_xm_x; + saved_float_regs_offset += 16; + } + + for (i = fscratches; i >= SLJIT_FIRST_SAVED_FLOAT_REG; i--) { + inst = emit_x86_instruction(compiler, 2 | EX86_SSE2, i, 0, SLJIT_MEM1(SLJIT_SP), saved_float_regs_offset); + *inst++ = GROUP_0F; + *inst = MOVAPS_xm_x; + saved_float_regs_offset += 16; + } } -#endif +#endif /* _WIN64 */ return SLJIT_SUCCESS; } @@ -280,46 +541,65 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_set_context(struct sljit_compiler *comp sljit_s32 options, sljit_s32 arg_types, sljit_s32 scratches, sljit_s32 saveds, sljit_s32 fscratches, sljit_s32 fsaveds, sljit_s32 local_size) { - sljit_s32 saved_register_size; + sljit_s32 saved_regs_size; +#ifdef _WIN64 + sljit_s32 saved_float_regs_size; +#endif /* _WIN64 */ CHECK_ERROR(); CHECK(check_sljit_set_context(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size)); set_set_context(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size); #ifdef _WIN64 - /* Two/four register slots for parameters plus space for xmm6 register if needed. */ - if (fscratches >= 6 || fsaveds >= 1) - compiler->locals_offset = 6 * sizeof(sljit_sw); - else - compiler->locals_offset = ((scratches > 2) ? 4 : 2) * sizeof(sljit_sw); -#endif + local_size += SLJIT_LOCALS_OFFSET; + saved_float_regs_size = GET_SAVED_FLOAT_REGISTERS_SIZE(fscratches, fsaveds, 16); + + if (saved_float_regs_size > 0) + local_size = ((local_size + 0xf) & ~0xf) + saved_float_regs_size; +#else /* !_WIN64 */ + SLJIT_ASSERT(SLJIT_LOCALS_OFFSET == 0); +#endif /* _WIN64 */ /* Including the return address saved by the call instruction. */ - saved_register_size = GET_SAVED_REGISTERS_SIZE(scratches, saveds, 1); - compiler->local_size = ((local_size + SLJIT_LOCALS_OFFSET + saved_register_size + 15) & ~15) - saved_register_size; + saved_regs_size = GET_SAVED_REGISTERS_SIZE(scratches, saveds, 1); + compiler->local_size = ((local_size + saved_regs_size + 0xf) & ~0xf) - saved_regs_size; return SLJIT_SUCCESS; } -SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src, sljit_sw srcw) +static sljit_s32 emit_stack_frame_release(struct sljit_compiler *compiler) { - sljit_s32 i, tmp, size; + sljit_uw size; + sljit_s32 i, tmp; sljit_u8 *inst; +#ifdef _WIN64 + sljit_s32 saved_float_regs_offset; + sljit_s32 fscratches = compiler->fscratches; + sljit_s32 fsaveds = compiler->fsaveds; +#endif /* _WIN64 */ - CHECK_ERROR(); - CHECK(check_sljit_emit_return(compiler, op, src, srcw)); +#ifdef _WIN64 + saved_float_regs_offset = GET_SAVED_FLOAT_REGISTERS_SIZE(fscratches, fsaveds, 16); - FAIL_IF(emit_mov_before_return(compiler, op, src, srcw)); + if (saved_float_regs_offset > 0) { + compiler->mode32 = 1; + saved_float_regs_offset = (compiler->local_size - saved_float_regs_offset) & ~0xf; + + tmp = SLJIT_FS0 - fsaveds; + for (i = SLJIT_FS0; i > tmp; i--) { + inst = emit_x86_instruction(compiler, 2 | EX86_SSE2, i, 0, SLJIT_MEM1(SLJIT_SP), saved_float_regs_offset); + *inst++ = GROUP_0F; + *inst = MOVAPS_x_xm; + saved_float_regs_offset += 16; + } -#ifdef _WIN64 - /* Restore xmm6 register: movaps xmm6, [rsp + 0x20] */ - if (compiler->fscratches >= 6 || compiler->fsaveds >= 1) { - inst = (sljit_u8*)ensure_buf(compiler, 1 + 5); - FAIL_IF(!inst); - INC_SIZE(5); - *inst++ = GROUP_0F; - sljit_unaligned_store_s32(inst, 0x20247428); + for (i = fscratches; i >= SLJIT_FIRST_SAVED_FLOAT_REG; i--) { + inst = emit_x86_instruction(compiler, 2 | EX86_SSE2, i, 0, SLJIT_MEM1(SLJIT_SP), saved_float_regs_offset); + *inst++ = GROUP_0F; + *inst = MOVAPS_x_xm; + saved_float_regs_offset += 16; + } } -#endif +#endif /* _WIN64 */ if (compiler->local_size > 0) { if (compiler->local_size <= 127) { @@ -329,7 +609,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return(struct sljit_compiler *comp *inst++ = REX_W; *inst++ = GROUP_BINARY_83; *inst++ = MOD_REG | ADD | 4; - *inst = compiler->local_size; + *inst = U8(compiler->local_size); } else { inst = (sljit_u8*)ensure_buf(compiler, 1 + 7); @@ -364,243 +644,23 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return(struct sljit_compiler *comp POP_REG(reg_lmap[i]); } - inst = (sljit_u8*)ensure_buf(compiler, 1 + 1); - FAIL_IF(!inst); - INC_SIZE(1); - RET(); - return SLJIT_SUCCESS; -} - -/* --------------------------------------------------------------------- */ -/* Operators */ -/* --------------------------------------------------------------------- */ - -static sljit_s32 emit_do_imm32(struct sljit_compiler *compiler, sljit_u8 rex, sljit_u8 opcode, sljit_sw imm) -{ - sljit_u8 *inst; - sljit_s32 length = 1 + (rex ? 1 : 0) + sizeof(sljit_s32); - - inst = (sljit_u8*)ensure_buf(compiler, 1 + length); - FAIL_IF(!inst); - INC_SIZE(length); - if (rex) - *inst++ = rex; - *inst++ = opcode; - sljit_unaligned_store_s32(inst, imm); return SLJIT_SUCCESS; } -static sljit_u8* emit_x86_instruction(struct sljit_compiler *compiler, sljit_s32 size, - /* The register or immediate operand. */ - sljit_s32 a, sljit_sw imma, - /* The general operand (not immediate). */ - sljit_s32 b, sljit_sw immb) +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return_void(struct sljit_compiler *compiler) { sljit_u8 *inst; - sljit_u8 *buf_ptr; - sljit_u8 rex = 0; - sljit_s32 flags = size & ~0xf; - sljit_s32 inst_size; - - /* The immediate operand must be 32 bit. */ - SLJIT_ASSERT(!(a & SLJIT_IMM) || compiler->mode32 || IS_HALFWORD(imma)); - /* Both cannot be switched on. */ - SLJIT_ASSERT((flags & (EX86_BIN_INS | EX86_SHIFT_INS)) != (EX86_BIN_INS | EX86_SHIFT_INS)); - /* Size flags not allowed for typed instructions. */ - SLJIT_ASSERT(!(flags & (EX86_BIN_INS | EX86_SHIFT_INS)) || (flags & (EX86_BYTE_ARG | EX86_HALF_ARG)) == 0); - /* Both size flags cannot be switched on. */ - SLJIT_ASSERT((flags & (EX86_BYTE_ARG | EX86_HALF_ARG)) != (EX86_BYTE_ARG | EX86_HALF_ARG)); - /* SSE2 and immediate is not possible. */ - SLJIT_ASSERT(!(a & SLJIT_IMM) || !(flags & EX86_SSE2)); - SLJIT_ASSERT((flags & (EX86_PREF_F2 | EX86_PREF_F3)) != (EX86_PREF_F2 | EX86_PREF_F3) - && (flags & (EX86_PREF_F2 | EX86_PREF_66)) != (EX86_PREF_F2 | EX86_PREF_66) - && (flags & (EX86_PREF_F3 | EX86_PREF_66)) != (EX86_PREF_F3 | EX86_PREF_66)); - - size &= 0xf; - inst_size = size; - - if (!compiler->mode32 && !(flags & EX86_NO_REXW)) - rex |= REX_W; - else if (flags & EX86_REX) - rex |= REX; - - if (flags & (EX86_PREF_F2 | EX86_PREF_F3)) - inst_size++; - if (flags & EX86_PREF_66) - inst_size++; - - /* Calculate size of b. */ - inst_size += 1; /* mod r/m byte. */ - if (b & SLJIT_MEM) { - if (!(b & OFFS_REG_MASK)) { - if (NOT_HALFWORD(immb)) { - PTR_FAIL_IF(emit_load_imm64(compiler, TMP_REG2, immb)); - immb = 0; - if (b & REG_MASK) - b |= TO_OFFS_REG(TMP_REG2); - else - b |= TMP_REG2; - } - else if (reg_lmap[b & REG_MASK] == 4) - b |= TO_OFFS_REG(SLJIT_SP); - } - - if ((b & REG_MASK) == SLJIT_UNUSED) - inst_size += 1 + sizeof(sljit_s32); /* SIB byte required to avoid RIP based addressing. */ - else { - if (reg_map[b & REG_MASK] >= 8) - rex |= REX_B; - - if (immb != 0 && (!(b & OFFS_REG_MASK) || (b & OFFS_REG_MASK) == TO_OFFS_REG(SLJIT_SP))) { - /* Immediate operand. */ - if (immb <= 127 && immb >= -128) - inst_size += sizeof(sljit_s8); - else - inst_size += sizeof(sljit_s32); - } - else if (reg_lmap[b & REG_MASK] == 5) - inst_size += sizeof(sljit_s8); - - if ((b & OFFS_REG_MASK) != SLJIT_UNUSED) { - inst_size += 1; /* SIB byte. */ - if (reg_map[OFFS_REG(b)] >= 8) - rex |= REX_X; - } - } - } - else if (!(flags & EX86_SSE2_OP2)) { - if (reg_map[b] >= 8) - rex |= REX_B; - } - else if (freg_map[b] >= 8) - rex |= REX_B; - - if (a & SLJIT_IMM) { - if (flags & EX86_BIN_INS) { - if (imma <= 127 && imma >= -128) { - inst_size += 1; - flags |= EX86_BYTE_ARG; - } else - inst_size += 4; - } - else if (flags & EX86_SHIFT_INS) { - imma &= compiler->mode32 ? 0x1f : 0x3f; - if (imma != 1) { - inst_size ++; - flags |= EX86_BYTE_ARG; - } - } else if (flags & EX86_BYTE_ARG) - inst_size++; - else if (flags & EX86_HALF_ARG) - inst_size += sizeof(short); - else - inst_size += sizeof(sljit_s32); - } - else { - SLJIT_ASSERT(!(flags & EX86_SHIFT_INS) || a == SLJIT_PREF_SHIFT_REG); - /* reg_map[SLJIT_PREF_SHIFT_REG] is less than 8. */ - if (!(flags & EX86_SSE2_OP1)) { - if (reg_map[a] >= 8) - rex |= REX_R; - } - else if (freg_map[a] >= 8) - rex |= REX_R; - } - - if (rex) - inst_size++; - - inst = (sljit_u8*)ensure_buf(compiler, 1 + inst_size); - PTR_FAIL_IF(!inst); - - /* Encoding the byte. */ - INC_SIZE(inst_size); - if (flags & EX86_PREF_F2) - *inst++ = 0xf2; - if (flags & EX86_PREF_F3) - *inst++ = 0xf3; - if (flags & EX86_PREF_66) - *inst++ = 0x66; - if (rex) - *inst++ = rex; - buf_ptr = inst + size; - - /* Encode mod/rm byte. */ - if (!(flags & EX86_SHIFT_INS)) { - if ((flags & EX86_BIN_INS) && (a & SLJIT_IMM)) - *inst = (flags & EX86_BYTE_ARG) ? GROUP_BINARY_83 : GROUP_BINARY_81; - if (a & SLJIT_IMM) - *buf_ptr = 0; - else if (!(flags & EX86_SSE2_OP1)) - *buf_ptr = reg_lmap[a] << 3; - else - *buf_ptr = freg_lmap[a] << 3; - } - else { - if (a & SLJIT_IMM) { - if (imma == 1) - *inst = GROUP_SHIFT_1; - else - *inst = GROUP_SHIFT_N; - } else - *inst = GROUP_SHIFT_CL; - *buf_ptr = 0; - } - - if (!(b & SLJIT_MEM)) - *buf_ptr++ |= MOD_REG + ((!(flags & EX86_SSE2_OP2)) ? reg_lmap[b] : freg_lmap[b]); - else if ((b & REG_MASK) != SLJIT_UNUSED) { - if ((b & OFFS_REG_MASK) == SLJIT_UNUSED || (b & OFFS_REG_MASK) == TO_OFFS_REG(SLJIT_SP)) { - if (immb != 0 || reg_lmap[b & REG_MASK] == 5) { - if (immb <= 127 && immb >= -128) - *buf_ptr |= 0x40; - else - *buf_ptr |= 0x80; - } - - if ((b & OFFS_REG_MASK) == SLJIT_UNUSED) - *buf_ptr++ |= reg_lmap[b & REG_MASK]; - else { - *buf_ptr++ |= 0x04; - *buf_ptr++ = reg_lmap[b & REG_MASK] | (reg_lmap[OFFS_REG(b)] << 3); - } - - if (immb != 0 || reg_lmap[b & REG_MASK] == 5) { - if (immb <= 127 && immb >= -128) - *buf_ptr++ = immb; /* 8 bit displacement. */ - else { - sljit_unaligned_store_s32(buf_ptr, immb); /* 32 bit displacement. */ - buf_ptr += sizeof(sljit_s32); - } - } - } - else { - if (reg_lmap[b & REG_MASK] == 5) - *buf_ptr |= 0x40; - *buf_ptr++ |= 0x04; - *buf_ptr++ = reg_lmap[b & REG_MASK] | (reg_lmap[OFFS_REG(b)] << 3) | (immb << 6); - if (reg_lmap[b & REG_MASK] == 5) - *buf_ptr++ = 0; - } - } - else { - *buf_ptr++ |= 0x04; - *buf_ptr++ = 0x25; - sljit_unaligned_store_s32(buf_ptr, immb); /* 32 bit displacement. */ - buf_ptr += sizeof(sljit_s32); - } + CHECK_ERROR(); + CHECK(check_sljit_emit_return_void(compiler)); - if (a & SLJIT_IMM) { - if (flags & EX86_BYTE_ARG) - *buf_ptr = imma; - else if (flags & EX86_HALF_ARG) - sljit_unaligned_store_s16(buf_ptr, imma); - else if (!(flags & EX86_SHIFT_INS)) - sljit_unaligned_store_s32(buf_ptr, imma); - } + FAIL_IF(emit_stack_frame_release(compiler)); - return !(flags & EX86_SHIFT_INS) ? inst : (inst + 1); + inst = (sljit_u8*)ensure_buf(compiler, 1 + 1); + FAIL_IF(!inst); + INC_SIZE(1); + RET(); + return SLJIT_SUCCESS; } /* --------------------------------------------------------------------- */ @@ -609,43 +669,38 @@ static sljit_u8* emit_x86_instruction(struct sljit_compiler *compiler, sljit_s32 #ifndef _WIN64 -static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_types, sljit_s32 *src_ptr, sljit_sw srcw) +static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_types, sljit_s32 *src_ptr) { sljit_s32 src = src_ptr ? (*src_ptr) : 0; sljit_s32 word_arg_count = 0; SLJIT_ASSERT(reg_map[SLJIT_R1] == 6 && reg_map[SLJIT_R3] == 1 && reg_map[TMP_REG1] == 2); - - compiler->mode32 = 0; + SLJIT_ASSERT(!(src & SLJIT_MEM)); /* Remove return value. */ - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; while (arg_types) { - if ((arg_types & SLJIT_DEF_MASK) < SLJIT_ARG_TYPE_F32) + if ((arg_types & SLJIT_ARG_MASK) < SLJIT_ARG_TYPE_F64) word_arg_count++; - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; } if (word_arg_count == 0) return SLJIT_SUCCESS; - if (src & SLJIT_MEM) { - ADJUST_LOCAL_OFFSET(src, srcw); - EMIT_MOV(compiler, TMP_REG2, 0, src, srcw); - *src_ptr = TMP_REG2; + if (word_arg_count >= 3) { + if (src == SLJIT_R2) + *src_ptr = TMP_REG1; + EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_R2, 0); } - else if (src == SLJIT_R2 && word_arg_count >= SLJIT_R2) - *src_ptr = TMP_REG1; - if (word_arg_count >= 3) - EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_R2, 0); return emit_mov(compiler, SLJIT_R2, 0, SLJIT_R0, 0); } #else -static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_types, sljit_s32 *src_ptr, sljit_sw srcw) +static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_types, sljit_s32 *src_ptr) { sljit_s32 src = src_ptr ? (*src_ptr) : 0; sljit_s32 arg_count = 0; @@ -656,16 +711,16 @@ static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_t static sljit_u8 word_arg_regs[5] = { 0, SLJIT_R3, SLJIT_R1, SLJIT_R2, TMP_REG1 }; SLJIT_ASSERT(reg_map[SLJIT_R3] == 1 && reg_map[SLJIT_R1] == 2 && reg_map[SLJIT_R2] == 8 && reg_map[TMP_REG1] == 9); + SLJIT_ASSERT(!(src & SLJIT_MEM)); - compiler->mode32 = 0; - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; while (arg_types) { - types = (types << SLJIT_DEF_SHIFT) | (arg_types & SLJIT_DEF_MASK); + types = (types << SLJIT_ARG_SHIFT) | (arg_types & SLJIT_ARG_MASK); - switch (arg_types & SLJIT_DEF_MASK) { - case SLJIT_ARG_TYPE_F32: + switch (arg_types & SLJIT_ARG_MASK) { case SLJIT_ARG_TYPE_F64: + case SLJIT_ARG_TYPE_F32: arg_count++; float_arg_count++; @@ -687,29 +742,23 @@ static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_t break; } - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; } if (!data_trandfer) return SLJIT_SUCCESS; - if (src & SLJIT_MEM) { - ADJUST_LOCAL_OFFSET(src, srcw); - EMIT_MOV(compiler, TMP_REG2, 0, src, srcw); - *src_ptr = TMP_REG2; - } - while (types) { - switch (types & SLJIT_DEF_MASK) { - case SLJIT_ARG_TYPE_F32: + switch (types & SLJIT_ARG_MASK) { + case SLJIT_ARG_TYPE_F64: if (arg_count != float_arg_count) - FAIL_IF(emit_sse2_load(compiler, 1, arg_count, float_arg_count, 0)); + FAIL_IF(emit_sse2_load(compiler, 0, arg_count, float_arg_count, 0)); arg_count--; float_arg_count--; break; - case SLJIT_ARG_TYPE_F64: + case SLJIT_ARG_TYPE_F32: if (arg_count != float_arg_count) - FAIL_IF(emit_sse2_load(compiler, 0, arg_count, float_arg_count, 0)); + FAIL_IF(emit_sse2_load(compiler, 1, arg_count, float_arg_count, 0)); arg_count--; float_arg_count--; break; @@ -721,7 +770,7 @@ static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_t break; } - types >>= SLJIT_DEF_SHIFT; + types >>= SLJIT_ARG_SHIFT; } return SLJIT_SUCCESS; @@ -735,13 +784,19 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_call(struct sljit_compile CHECK_ERROR_PTR(); CHECK_PTR(check_sljit_emit_call(compiler, type, arg_types)); - PTR_FAIL_IF(call_with_args(compiler, arg_types, NULL, 0)); + compiler->mode32 = 0; + + PTR_FAIL_IF(call_with_args(compiler, arg_types, NULL)); + + if (type & SLJIT_CALL_RETURN) { + PTR_FAIL_IF(emit_stack_frame_release(compiler)); + type = SLJIT_JUMP | (type & SLJIT_REWRITABLE_JUMP); + } #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) compiler->skip_checks = 1; #endif - return sljit_emit_jump(compiler, type); } @@ -752,7 +807,25 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_icall(struct sljit_compiler *compi CHECK_ERROR(); CHECK(check_sljit_emit_icall(compiler, type, arg_types, src, srcw)); - FAIL_IF(call_with_args(compiler, arg_types, &src, srcw)); + compiler->mode32 = 0; + + if (src & SLJIT_MEM) { + ADJUST_LOCAL_OFFSET(src, srcw); + EMIT_MOV(compiler, TMP_REG2, 0, src, srcw); + src = TMP_REG2; + } + + if (type & SLJIT_CALL_RETURN) { + if (src >= SLJIT_FIRST_SAVED_REG && src <= SLJIT_S0) { + EMIT_MOV(compiler, TMP_REG2, 0, src, srcw); + src = TMP_REG2; + } + + FAIL_IF(emit_stack_frame_release(compiler)); + type = SLJIT_JUMP; + } + + FAIL_IF(call_with_args(compiler, arg_types, &src)); #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) @@ -770,10 +843,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_enter(struct sljit_compiler * CHECK(check_sljit_emit_fast_enter(compiler, dst, dstw)); ADJUST_LOCAL_OFFSET(dst, dstw); - /* For UNUSED dst. Uncommon, but possible. */ - if (dst == SLJIT_UNUSED) - dst = TMP_REG1; - if (FAST_IS_REG(dst)) { if (reg_map[dst] < 8) { inst = (sljit_u8*)ensure_buf(compiler, 1 + 1); @@ -850,9 +919,6 @@ static sljit_s32 emit_mov_int(struct sljit_compiler *compiler, sljit_s32 sign, compiler->mode32 = 0; - if (dst == SLJIT_UNUSED && !(src & SLJIT_MEM)) - return SLJIT_SUCCESS; /* Empty instruction. */ - if (src & SLJIT_IMM) { if (FAST_IS_REG(dst)) { if (sign || ((sljit_uw)srcw <= 0x7fffffff)) { @@ -903,16 +969,16 @@ static sljit_s32 skip_frames_before_return(struct sljit_compiler *compiler) sljit_s32 tmp, size; /* Don't adjust shadow stack if it isn't enabled. */ - if (!cpu_has_shadow_stack ()) + if (!cpu_has_shadow_stack()) return SLJIT_SUCCESS; size = compiler->local_size; tmp = compiler->scratches; if (tmp >= SLJIT_FIRST_SAVED_REG) - size += (tmp - SLJIT_FIRST_SAVED_REG + 1) * sizeof(sljit_uw); + size += (tmp - SLJIT_FIRST_SAVED_REG + 1) * SSIZE_OF(sw); tmp = compiler->saveds < SLJIT_NUMBER_OF_SAVED_REGISTERS ? (SLJIT_S0 + 1 - compiler->saveds) : SLJIT_FIRST_SAVED_REG; if (SLJIT_S0 >= tmp) - size += (SLJIT_S0 - tmp + 1) * sizeof(sljit_uw); + size += (SLJIT_S0 - tmp + 1) * SSIZE_OF(sw); - return adjust_shadow_stack(compiler, SLJIT_UNUSED, 0, SLJIT_SP, size); + return adjust_shadow_stack(compiler, SLJIT_MEM1(SLJIT_SP), size); } diff --git a/thirdparty/pcre2/src/sljit/sljitNativeX86_common.c b/thirdparty/pcre2/src/sljit/sljitNativeX86_common.c index 515d98aefd..c7dd9be8fd 100644 --- a/thirdparty/pcre2/src/sljit/sljitNativeX86_common.c +++ b/thirdparty/pcre2/src/sljit/sljitNativeX86_common.c @@ -65,6 +65,8 @@ SLJIT_API_FUNC_ATTRIBUTE const char* sljit_get_platform_name(void) 15 - R15 */ +#define TMP_FREG (0) + #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32) /* Last register + 1. */ @@ -77,9 +79,9 @@ static const sljit_u8 reg_map[SLJIT_NUMBER_OF_REGISTERS + 3] = { #define CHECK_EXTRA_REGS(p, w, do) \ if (p >= SLJIT_R3 && p <= SLJIT_S3) { \ if (p <= compiler->scratches) \ - w = compiler->saveds_offset - ((p) - SLJIT_R2) * (sljit_sw)sizeof(sljit_sw); \ + w = compiler->scratches_offset + ((p) - SLJIT_R3) * SSIZE_OF(sw); \ else \ - w = compiler->locals_offset + ((p) - SLJIT_S2) * (sljit_sw)sizeof(sljit_sw); \ + w = compiler->locals_offset + ((p) - SLJIT_S2) * SSIZE_OF(sw); \ p = SLJIT_MEM1(SLJIT_SP); \ do; \ } @@ -115,11 +117,11 @@ static const sljit_u8 reg_lmap[SLJIT_NUMBER_OF_REGISTERS + 4] = { /* Args: xmm0-xmm3 */ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 1] = { - 4, 0, 1, 2, 3, 5, 6 + 4, 0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; /* low-map. freg_map & 0x7. */ static const sljit_u8 freg_lmap[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 1] = { - 4, 0, 1, 2, 3, 5, 6 + 4, 0, 1, 2, 3, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7 }; #define REX_W 0x48 @@ -143,7 +145,8 @@ static const sljit_u8 freg_lmap[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 1] = { #endif /* SLJIT_CONFIG_X86_32 */ -#define TMP_FREG (0) +#define U8(v) ((sljit_u8)(v)) + /* Size flags for emit_x86_instruction: */ #define EX86_BIN_INS 0x0010 @@ -205,12 +208,15 @@ static const sljit_u8 freg_lmap[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 1] = { #define JMP_i32 0xe9 #define JMP_rm (/* GROUP_FF */ 4 << 3) #define LEA_r_m 0x8d +#define LOOP_i8 0xe2 #define MOV_r_rm 0x8b #define MOV_r_i32 0xb8 #define MOV_rm_r 0x89 #define MOV_rm_i32 0xc7 #define MOV_rm8_i8 0xc6 #define MOV_rm8_r8 0x88 +#define MOVAPS_x_xm 0x28 +#define MOVAPS_xm_x 0x29 #define MOVSD_x_xm 0x10 #define MOVSD_xm_x 0x11 #define MOVSXD_r_rm 0x63 @@ -274,14 +280,12 @@ static const sljit_u8 freg_lmap[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 1] = { #define MOD_REG 0xc0 #define MOD_DISP8 0x40 -#define INC_SIZE(s) (*inst++ = (s), compiler->size += (s)) +#define INC_SIZE(s) (*inst++ = U8(s), compiler->size += (s)) -#define PUSH_REG(r) (*inst++ = (PUSH_r + (r))) -#define POP_REG(r) (*inst++ = (POP_r + (r))) -#define RET() (*inst++ = (RET_near)) -#define RET_I16(n) (*inst++ = (RET_i16), *inst++ = n, *inst++ = 0) -/* r32, r/m32 */ -#define MOV_RM(mod, reg, rm) (*inst++ = (MOV_r_rm), *inst++ = (mod) << 6 | (reg) << 3 | (rm)) +#define PUSH_REG(r) (*inst++ = U8(PUSH_r + (r))) +#define POP_REG(r) (*inst++ = U8(POP_r + (r))) +#define RET() (*inst++ = RET_near) +#define RET_I16(n) (*inst++ = RET_i16, *inst++ = U8(n), *inst++ = 0) /* Multithreading does not affect these static variables, since they store built-in CPU features. Therefore they can be overwritten by different threads @@ -371,7 +375,7 @@ static void get_cpu_features(void) cpu_has_cmov = (features >> 15) & 0x1; } -static sljit_u8 get_jump_code(sljit_s32 type) +static sljit_u8 get_jump_code(sljit_uw type) { switch (type) { case SLJIT_EQUAL: @@ -383,10 +387,12 @@ static sljit_u8 get_jump_code(sljit_s32 type) return 0x85 /* jne */; case SLJIT_LESS: + case SLJIT_CARRY: case SLJIT_LESS_F64: return 0x82 /* jc */; case SLJIT_GREATER_EQUAL: + case SLJIT_NOT_CARRY: case SLJIT_GREATER_EQUAL_F64: return 0x83 /* jae */; @@ -434,14 +440,14 @@ static sljit_u8* generate_put_label_code(struct sljit_put_label *put_label, slji static sljit_u8* generate_near_jump_code(struct sljit_jump *jump, sljit_u8 *code_ptr, sljit_u8 *code, sljit_sw executable_offset) { - sljit_s32 type = jump->flags >> TYPE_SHIFT; + sljit_uw type = jump->flags >> TYPE_SHIFT; sljit_s32 short_jump; sljit_uw label_addr; if (jump->flags & JUMP_LABEL) label_addr = (sljit_uw)(code + jump->u.label->size); else - label_addr = jump->u.target - executable_offset; + label_addr = jump->u.target - (sljit_uw)executable_offset; short_jump = (sljit_sw)(label_addr - (jump->addr + 2)) >= -128 && (sljit_sw)(label_addr - (jump->addr + 2)) <= 127; @@ -463,7 +469,7 @@ static sljit_u8* generate_near_jump_code(struct sljit_jump *jump, sljit_u8 *code jump->addr++; } else if (short_jump) { - *code_ptr++ = get_jump_code(type) - 0x10; + *code_ptr++ = U8(get_jump_code(type) - 0x10); jump->addr++; } else { @@ -492,7 +498,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil sljit_u8 *buf_end; sljit_u8 len; sljit_sw executable_offset; - sljit_sw jump_addr; + sljit_uw jump_addr; struct sljit_label *label; struct sljit_jump *jump; @@ -530,7 +536,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil switch (*buf_ptr) { case 0: label->addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset); - label->size = code_ptr - code; + label->size = (sljit_uw)(code_ptr - code); label = label->next; break; case 1: @@ -575,11 +581,11 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil jump = compiler->jumps; while (jump) { - jump_addr = jump->addr + executable_offset; + jump_addr = jump->addr + (sljit_uw)executable_offset; if (jump->flags & PATCH_MB) { SLJIT_ASSERT((sljit_sw)(jump->u.label->addr - (jump_addr + sizeof(sljit_s8))) >= -128 && (sljit_sw)(jump->u.label->addr - (jump_addr + sizeof(sljit_s8))) <= 127); - *(sljit_u8*)jump->addr = (sljit_u8)(jump->u.label->addr - (jump_addr + sizeof(sljit_s8))); + *(sljit_u8*)jump->addr = U8(jump->u.label->addr - (jump_addr + sizeof(sljit_s8))); } else if (jump->flags & PATCH_MW) { if (jump->flags & JUMP_LABEL) { #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32) @@ -600,7 +606,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil } #if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64) else if (jump->flags & PATCH_MD) - sljit_unaligned_store_sw((void*)jump->addr, jump->u.label->addr); + sljit_unaligned_store_sw((void*)jump->addr, (sljit_sw)jump->u.label->addr); #endif jump = jump->next; @@ -626,7 +632,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil compiler->error = SLJIT_ERR_COMPILED; compiler->executable_offset = executable_offset; - compiler->executable_size = code_ptr - code; + compiler->executable_size = (sljit_uw)(code_ptr - code); code = (sljit_u8*)SLJIT_ADD_EXEC_OFFSET(code, executable_offset); @@ -682,17 +688,40 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_has_cpu_feature(sljit_s32 feature_type) #define BINARY_OPCODE(opcode) (((opcode ## _EAX_i32) << 24) | ((opcode ## _r_rm) << 16) | ((opcode ## _rm_r) << 8) | (opcode)) -static sljit_s32 emit_cum_binary(struct sljit_compiler *compiler, - sljit_u32 op_types, - sljit_s32 dst, sljit_sw dstw, - sljit_s32 src1, sljit_sw src1w, - sljit_s32 src2, sljit_sw src2w); +#define BINARY_IMM32(op_imm, immw, arg, argw) \ + do { \ + inst = emit_x86_instruction(compiler, 1 | EX86_BIN_INS, SLJIT_IMM, immw, arg, argw); \ + FAIL_IF(!inst); \ + *(inst + 1) |= (op_imm); \ + } while (0) -static sljit_s32 emit_non_cum_binary(struct sljit_compiler *compiler, - sljit_u32 op_types, - sljit_s32 dst, sljit_sw dstw, - sljit_s32 src1, sljit_sw src1w, - sljit_s32 src2, sljit_sw src2w); +#if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64) + +#define BINARY_IMM(op_imm, op_mr, immw, arg, argw) \ + do { \ + if (IS_HALFWORD(immw) || compiler->mode32) { \ + BINARY_IMM32(op_imm, immw, arg, argw); \ + } \ + else { \ + FAIL_IF(emit_load_imm64(compiler, (arg == TMP_REG1) ? TMP_REG2 : TMP_REG1, immw)); \ + inst = emit_x86_instruction(compiler, 1, (arg == TMP_REG1) ? TMP_REG2 : TMP_REG1, 0, arg, argw); \ + FAIL_IF(!inst); \ + *inst = (op_mr); \ + } \ + } while (0) + +#define BINARY_EAX_IMM(op_eax_imm, immw) \ + FAIL_IF(emit_do_imm32(compiler, (!compiler->mode32) ? REX_W : 0, (op_eax_imm), immw)) + +#else /* !SLJIT_CONFIG_X86_64 */ + +#define BINARY_IMM(op_imm, op_mr, immw, arg, argw) \ + BINARY_IMM32(op_imm, immw, arg, argw) + +#define BINARY_EAX_IMM(op_eax_imm, immw) \ + FAIL_IF(emit_do_imm(compiler, (op_eax_imm), immw)) + +#endif /* SLJIT_CONFIG_X86_64 */ static sljit_s32 emit_mov(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw dstw, @@ -795,7 +824,7 @@ static SLJIT_INLINE sljit_s32 cpu_has_shadow_stack(void) } static SLJIT_INLINE sljit_s32 adjust_shadow_stack(struct sljit_compiler *compiler, - sljit_s32 src, sljit_sw srcw, sljit_s32 base, sljit_sw disp) + sljit_s32 src, sljit_sw srcw) { #if (defined SLJIT_CONFIG_X86_CET && SLJIT_CONFIG_X86_CET) && defined (__SHSTK__) sljit_u8 *inst, *jz_after_cmp_inst; @@ -821,12 +850,6 @@ static SLJIT_INLINE sljit_s32 adjust_shadow_stack(struct sljit_compiler *compile EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_MEM1(TMP_REG1), 0); #endif /* SLJIT_CONFIG_X86_32 */ - if (src == SLJIT_UNUSED) { - /* Return address is on stack. */ - src = SLJIT_MEM1(base); - srcw = disp; - } - /* Compare return address against TMP_REG1. */ FAIL_IF(emit_cmp_binary (compiler, TMP_REG1, 0, src, srcw)); @@ -861,8 +884,6 @@ static SLJIT_INLINE sljit_s32 adjust_shadow_stack(struct sljit_compiler *compile SLJIT_UNUSED_ARG(compiler); SLJIT_UNUSED_ARG(src); SLJIT_UNUSED_ARG(srcw); - SLJIT_UNUSED_ARG(base); - SLJIT_UNUSED_ARG(disp); #endif /* SLJIT_CONFIG_X86_CET && __SHSTK__ */ return SLJIT_SUCCESS; } @@ -879,8 +900,6 @@ static sljit_s32 emit_mov(struct sljit_compiler *compiler, { sljit_u8* inst; - SLJIT_ASSERT(dst != SLJIT_UNUSED); - if (FAST_IS_REG(src)) { inst = emit_x86_instruction(compiler, 1, src, 0, dst, dstw); FAIL_IF(!inst); @@ -890,14 +909,14 @@ static sljit_s32 emit_mov(struct sljit_compiler *compiler, if (src & SLJIT_IMM) { if (FAST_IS_REG(dst)) { #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32) - return emit_do_imm(compiler, MOV_r_i32 + reg_map[dst], srcw); + return emit_do_imm(compiler, MOV_r_i32 | reg_map[dst], srcw); #else if (!compiler->mode32) { if (NOT_HALFWORD(srcw)) return emit_load_imm64(compiler, dst, srcw); } else - return emit_do_imm32(compiler, (reg_map[dst] >= 8) ? REX_B : 0, MOV_r_i32 + reg_lmap[dst], srcw); + return emit_do_imm32(compiler, (reg_map[dst] >= 8) ? REX_B : 0, U8(MOV_r_i32 | reg_lmap[dst]), srcw); #endif } #if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64) @@ -938,7 +957,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compile { sljit_u8 *inst; #if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64) - sljit_s32 size; + sljit_uw size; #endif CHECK_ERROR(); @@ -975,7 +994,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compile && reg_map[SLJIT_R1] < 7 && reg_map[TMP_REG1] == 2); #endif - compiler->mode32 = op & SLJIT_I32_OP; + compiler->mode32 = op & SLJIT_32; #endif SLJIT_COMPILE_ASSERT((SLJIT_DIVMOD_UW & 0x2) == 0 && SLJIT_DIV_UW - 0x2 == SLJIT_DIVMOD_UW, bad_div_opcode_assignments); @@ -1084,7 +1103,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compile inst = (sljit_u8*)ensure_buf(compiler, 1 + 1); \ FAIL_IF(!inst); \ INC_SIZE(1); \ - *inst = (prefix); \ + *inst = U8(prefix); \ } while (0) static sljit_s32 emit_mov_byte(struct sljit_compiler *compiler, sljit_s32 sign, @@ -1104,7 +1123,7 @@ static sljit_s32 emit_mov_byte(struct sljit_compiler *compiler, sljit_s32 sign, if (src & SLJIT_IMM) { if (FAST_IS_REG(dst)) { #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32) - return emit_do_imm(compiler, MOV_r_i32 + reg_map[dst], srcw); + return emit_do_imm(compiler, MOV_r_i32 | reg_map[dst], srcw); #else inst = emit_x86_instruction(compiler, 1, SLJIT_IMM, srcw, dst, 0); FAIL_IF(!inst); @@ -1134,7 +1153,7 @@ static sljit_s32 emit_mov_byte(struct sljit_compiler *compiler, sljit_s32 sign, #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32) else if (FAST_IS_REG(src) && reg_map[src] >= 4) { /* src, dst are registers. */ - SLJIT_ASSERT(SLOW_IS_REG(dst)); + SLJIT_ASSERT(FAST_IS_REG(dst)); if (reg_map[dst] < 4) { if (dst != src) EMIT_MOV(compiler, dst, 0, src, 0); @@ -1193,7 +1212,7 @@ static sljit_s32 emit_mov_byte(struct sljit_compiler *compiler, sljit_s32 sign, } if (work_r == SLJIT_R0) { - ENCODE_PREFIX(XCHG_EAX_r + reg_map[TMP_REG1]); + ENCODE_PREFIX(XCHG_EAX_r | reg_map[TMP_REG1]); } else { inst = emit_x86_instruction(compiler, 1, work_r, 0, dst_r, 0); @@ -1206,7 +1225,7 @@ static sljit_s32 emit_mov_byte(struct sljit_compiler *compiler, sljit_s32 sign, *inst = MOV_rm8_r8; if (work_r == SLJIT_R0) { - ENCODE_PREFIX(XCHG_EAX_r + reg_map[TMP_REG1]); + ENCODE_PREFIX(XCHG_EAX_r | reg_map[TMP_REG1]); } else { inst = emit_x86_instruction(compiler, 1, work_r, 0, dst_r, 0); @@ -1267,7 +1286,7 @@ static sljit_s32 emit_mov_half(struct sljit_compiler *compiler, sljit_s32 sign, if (src & SLJIT_IMM) { if (FAST_IS_REG(dst)) { #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32) - return emit_do_imm(compiler, MOV_r_i32 + reg_map[dst], srcw); + return emit_do_imm(compiler, MOV_r_i32 | reg_map[dst], srcw); #else inst = emit_x86_instruction(compiler, 1, SLJIT_IMM, srcw, dst, 0); FAIL_IF(!inst); @@ -1316,9 +1335,6 @@ static sljit_s32 emit_unary(struct sljit_compiler *compiler, sljit_u8 opcode, return SLJIT_SUCCESS; } - if (SLJIT_UNLIKELY(dst == SLJIT_UNUSED)) - dst = TMP_REG1; - if (FAST_IS_REG(dst)) { EMIT_MOV(compiler, dst, 0, src, srcw); inst = emit_x86_instruction(compiler, 1, 0, 0, dst, 0); @@ -1343,9 +1359,6 @@ static sljit_s32 emit_not_with_flags(struct sljit_compiler *compiler, { sljit_u8* inst; - if (dst == SLJIT_UNUSED) - dst = TMP_REG1; - if (FAST_IS_REG(dst)) { EMIT_MOV(compiler, dst, 0, src, srcw); inst = emit_x86_instruction(compiler, 1, 0, 0, dst, 0); @@ -1412,7 +1425,7 @@ static sljit_s32 emit_clz(struct sljit_compiler *compiler, sljit_s32 op_flags, inst = emit_x86_instruction(compiler, 1 | EX86_BIN_INS, SLJIT_IMM, 31, dst_r, 0); #else if (cpu_has_cmov) { - EMIT_MOV(compiler, TMP_REG2, 0, SLJIT_IMM, !(op_flags & SLJIT_I32_OP) ? (64 + 63) : (32 + 31)); + EMIT_MOV(compiler, TMP_REG2, 0, SLJIT_IMM, !(op_flags & SLJIT_32) ? (64 + 63) : (32 + 31)); inst = emit_x86_instruction(compiler, 2, dst_r, 0, TMP_REG2, 0); FAIL_IF(!inst); @@ -1420,9 +1433,9 @@ static sljit_s32 emit_clz(struct sljit_compiler *compiler, sljit_s32 op_flags, *inst = CMOVE_r_rm; } else - FAIL_IF(sljit_emit_cmov_generic(compiler, SLJIT_EQUAL, dst_r, SLJIT_IMM, !(op_flags & SLJIT_I32_OP) ? (64 + 63) : (32 + 31))); + FAIL_IF(sljit_emit_cmov_generic(compiler, SLJIT_EQUAL, dst_r, SLJIT_IMM, !(op_flags & SLJIT_32) ? (64 + 63) : (32 + 31))); - inst = emit_x86_instruction(compiler, 1 | EX86_BIN_INS, SLJIT_IMM, !(op_flags & SLJIT_I32_OP) ? 63 : 31, dst_r, 0); + inst = emit_x86_instruction(compiler, 1 | EX86_BIN_INS, SLJIT_IMM, !(op_flags & SLJIT_32) ? 63 : 31, dst_r, 0); #endif FAIL_IF(!inst); @@ -1450,7 +1463,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile CHECK_EXTRA_REGS(dst, dstw, dst_is_ereg = 1); CHECK_EXTRA_REGS(src, srcw, (void)0); #if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64) - compiler->mode32 = op_flags & SLJIT_I32_OP; + compiler->mode32 = op_flags & SLJIT_32; #endif op = GET_OPCODE(op); @@ -1465,8 +1478,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile return SLJIT_SUCCESS; } - if (op_flags & SLJIT_I32_OP) { #if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64) + if (op_flags & SLJIT_32) { if (src & SLJIT_MEM) { if (op == SLJIT_MOV_S32) op = SLJIT_MOV_U32; @@ -1475,8 +1488,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile if (op == SLJIT_MOV_U32) op = SLJIT_MOV_S32; } -#endif } +#endif if (src & SLJIT_IMM) { switch (op) { @@ -1520,8 +1533,9 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32) case SLJIT_MOV_U32: case SLJIT_MOV_S32: + case SLJIT_MOV32: #endif - FAIL_IF(emit_mov(compiler, dst, dstw, src, srcw)); + EMIT_MOV(compiler, dst, dstw, src, srcw); break; case SLJIT_MOV_U8: FAIL_IF(emit_mov_byte(compiler, 0, dst, dstw, src, srcw)); @@ -1542,6 +1556,11 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile case SLJIT_MOV_S32: FAIL_IF(emit_mov_int(compiler, 1, dst, dstw, src, srcw)); break; + case SLJIT_MOV32: + compiler->mode32 = 1; + EMIT_MOV(compiler, dst, dstw, src, srcw); + compiler->mode32 = 0; + break; #endif } @@ -1558,9 +1577,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile return emit_not_with_flags(compiler, dst, dstw, src, srcw); return emit_unary(compiler, NOT_rm, dst, dstw, src, srcw); - case SLJIT_NEG: - return emit_unary(compiler, NEG_rm, dst, dstw, src, srcw); - case SLJIT_CLZ: return emit_clz(compiler, op_flags, dst, dstw, src, srcw); } @@ -1568,36 +1584,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile return SLJIT_SUCCESS; } -#if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64) - -#define BINARY_IMM(op_imm, op_mr, immw, arg, argw) \ - if (IS_HALFWORD(immw) || compiler->mode32) { \ - inst = emit_x86_instruction(compiler, 1 | EX86_BIN_INS, SLJIT_IMM, immw, arg, argw); \ - FAIL_IF(!inst); \ - *(inst + 1) |= (op_imm); \ - } \ - else { \ - FAIL_IF(emit_load_imm64(compiler, (arg == TMP_REG1) ? TMP_REG2 : TMP_REG1, immw)); \ - inst = emit_x86_instruction(compiler, 1, (arg == TMP_REG1) ? TMP_REG2 : TMP_REG1, 0, arg, argw); \ - FAIL_IF(!inst); \ - *inst = (op_mr); \ - } - -#define BINARY_EAX_IMM(op_eax_imm, immw) \ - FAIL_IF(emit_do_imm32(compiler, (!compiler->mode32) ? REX_W : 0, (op_eax_imm), immw)) - -#else - -#define BINARY_IMM(op_imm, op_mr, immw, arg, argw) \ - inst = emit_x86_instruction(compiler, 1 | EX86_BIN_INS, SLJIT_IMM, immw, arg, argw); \ - FAIL_IF(!inst); \ - *(inst + 1) |= (op_imm); - -#define BINARY_EAX_IMM(op_eax_imm, immw) \ - FAIL_IF(emit_do_imm(compiler, (op_eax_imm), immw)) - -#endif - static sljit_s32 emit_cum_binary(struct sljit_compiler *compiler, sljit_u32 op_types, sljit_s32 dst, sljit_sw dstw, @@ -1605,23 +1591,10 @@ static sljit_s32 emit_cum_binary(struct sljit_compiler *compiler, sljit_s32 src2, sljit_sw src2w) { sljit_u8* inst; - sljit_u8 op_eax_imm = (op_types >> 24); - sljit_u8 op_rm = (op_types >> 16) & 0xff; - sljit_u8 op_mr = (op_types >> 8) & 0xff; - sljit_u8 op_imm = op_types & 0xff; - - if (dst == SLJIT_UNUSED) { - EMIT_MOV(compiler, TMP_REG1, 0, src1, src1w); - if (src2 & SLJIT_IMM) { - BINARY_IMM(op_imm, op_mr, src2w, TMP_REG1, 0); - } - else { - inst = emit_x86_instruction(compiler, 1, TMP_REG1, 0, src2, src2w); - FAIL_IF(!inst); - *inst = op_rm; - } - return SLJIT_SUCCESS; - } + sljit_u8 op_eax_imm = U8(op_types >> 24); + sljit_u8 op_rm = U8((op_types >> 16) & 0xff); + sljit_u8 op_mr = U8((op_types >> 8) & 0xff); + sljit_u8 op_imm = U8(op_types & 0xff); if (dst == src1 && dstw == src1w) { if (src2 & SLJIT_IMM) { @@ -1725,23 +1698,10 @@ static sljit_s32 emit_non_cum_binary(struct sljit_compiler *compiler, sljit_s32 src2, sljit_sw src2w) { sljit_u8* inst; - sljit_u8 op_eax_imm = (op_types >> 24); - sljit_u8 op_rm = (op_types >> 16) & 0xff; - sljit_u8 op_mr = (op_types >> 8) & 0xff; - sljit_u8 op_imm = op_types & 0xff; - - if (dst == SLJIT_UNUSED) { - EMIT_MOV(compiler, TMP_REG1, 0, src1, src1w); - if (src2 & SLJIT_IMM) { - BINARY_IMM(op_imm, op_mr, src2w, TMP_REG1, 0); - } - else { - inst = emit_x86_instruction(compiler, 1, TMP_REG1, 0, src2, src2w); - FAIL_IF(!inst); - *inst = op_rm; - } - return SLJIT_SUCCESS; - } + sljit_u8 op_eax_imm = U8(op_types >> 24); + sljit_u8 op_rm = U8((op_types >> 16) & 0xff); + sljit_u8 op_mr = U8((op_types >> 8) & 0xff); + sljit_u8 op_imm = U8(op_types & 0xff); if (dst == src1 && dstw == src1w) { if (src2 & SLJIT_IMM) { @@ -1810,9 +1770,7 @@ static sljit_s32 emit_mul(struct sljit_compiler *compiler, sljit_s32 src2, sljit_sw src2w) { sljit_u8* inst; - sljit_s32 dst_r; - - dst_r = SLOW_IS_REG(dst) ? dst : TMP_REG1; + sljit_s32 dst_r = FAST_IS_REG(dst) ? dst : TMP_REG1; /* Register destination. */ if (dst_r == src1 && !(src2 & SLJIT_IMM)) { @@ -1841,7 +1799,7 @@ static sljit_s32 emit_mul(struct sljit_compiler *compiler, inst = (sljit_u8*)ensure_buf(compiler, 1 + 1); FAIL_IF(!inst); INC_SIZE(1); - *inst = (sljit_s8)src1w; + *inst = U8(src1w); } #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32) else { @@ -1884,7 +1842,7 @@ static sljit_s32 emit_mul(struct sljit_compiler *compiler, inst = (sljit_u8*)ensure_buf(compiler, 1 + 1); FAIL_IF(!inst); INC_SIZE(1); - *inst = (sljit_s8)src2w; + *inst = U8(src2w); } #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32) else { @@ -2167,13 +2125,6 @@ static sljit_s32 emit_shift(struct sljit_compiler *compiler, *inst |= mode; return SLJIT_SUCCESS; } - if (dst == SLJIT_UNUSED) { - EMIT_MOV(compiler, TMP_REG1, 0, src1, src1w); - inst = emit_x86_instruction(compiler, 1 | EX86_SHIFT_INS, src2, src2w, TMP_REG1, 0); - FAIL_IF(!inst); - *inst |= mode; - return SLJIT_SUCCESS; - } if (dst == SLJIT_PREF_SHIFT_REG && src2 == SLJIT_PREF_SHIFT_REG) { EMIT_MOV(compiler, TMP_REG1, 0, src1, src1w); inst = emit_x86_instruction(compiler, 1 | EX86_SHIFT_INS, SLJIT_PREF_SHIFT_REG, 0, TMP_REG1, 0); @@ -2206,7 +2157,7 @@ static sljit_s32 emit_shift(struct sljit_compiler *compiler, *inst |= mode; EMIT_MOV(compiler, SLJIT_PREF_SHIFT_REG, 0, TMP_REG1, 0); } - else if (SLOW_IS_REG(dst) && dst != src2 && !ADDRESSING_DEPENDS_ON(src2, dst)) { + else if (FAST_IS_REG(dst) && dst != src2 && dst != TMP_REG1 && !ADDRESSING_DEPENDS_ON(src2, dst)) { if (src1 != dst) EMIT_MOV(compiler, dst, 0, src1, src1w); EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_PREF_SHIFT_REG, 0); @@ -2235,7 +2186,7 @@ static sljit_s32 emit_shift(struct sljit_compiler *compiler, *inst |= mode; EMIT_MOV(compiler, SLJIT_PREF_SHIFT_REG, 0, TMP_REG2, 0); #endif - if (dst != SLJIT_UNUSED) + if (dst != TMP_REG1) return emit_mov(compiler, dst, dstw, TMP_REG1, 0); } @@ -2273,7 +2224,7 @@ static sljit_s32 emit_shift_with_flags(struct sljit_compiler *compiler, FAIL_IF(emit_shift(compiler, mode, dst, dstw, src1, src1w, src2, src2w)); if (FAST_IS_REG(dst)) - return emit_cmp_binary(compiler, (dst == SLJIT_UNUSED) ? TMP_REG1 : dst, dstw, SLJIT_IMM, 0); + return emit_cmp_binary(compiler, dst, dstw, SLJIT_IMM, 0); return SLJIT_SUCCESS; } @@ -2283,7 +2234,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile sljit_s32 src2, sljit_sw src2w) { CHECK_ERROR(); - CHECK(check_sljit_emit_op2(compiler, op, dst, dstw, src1, src1w, src2, src2w)); + CHECK(check_sljit_emit_op2(compiler, op, 0, dst, dstw, src1, src1w, src2, src2w)); ADJUST_LOCAL_OFFSET(dst, dstw); ADJUST_LOCAL_OFFSET(src1, src1w); ADJUST_LOCAL_OFFSET(src2, src2w); @@ -2292,11 +2243,10 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile CHECK_EXTRA_REGS(src1, src1w, (void)0); CHECK_EXTRA_REGS(src2, src2w, (void)0); #if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64) - compiler->mode32 = op & SLJIT_I32_OP; + compiler->mode32 = op & SLJIT_32; #endif - if (dst == SLJIT_UNUSED && !HAS_FLAGS(op)) - return SLJIT_SUCCESS; + SLJIT_ASSERT(dst != TMP_REG1 || HAS_FLAGS(op)); switch (GET_OPCODE(op)) { case SLJIT_ADD: @@ -2310,17 +2260,18 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile return emit_cum_binary(compiler, BINARY_OPCODE(ADC), dst, dstw, src1, src1w, src2, src2w); case SLJIT_SUB: + if (src1 == SLJIT_IMM && src1w == 0) + return emit_unary(compiler, NEG_rm, dst, dstw, src2, src2w); + if (!HAS_FLAGS(op)) { if ((src2 & SLJIT_IMM) && emit_lea_binary(compiler, dst, dstw, src1, src1w, SLJIT_IMM, -src2w) != SLJIT_ERR_UNSUPPORTED) return compiler->error; - if (SLOW_IS_REG(dst) && src2 == dst) { + if (FAST_IS_REG(dst) && src2 == dst) { FAIL_IF(emit_non_cum_binary(compiler, BINARY_OPCODE(SUB), dst, 0, dst, 0, src1, src1w)); return emit_unary(compiler, NEG_rm, dst, 0, dst, 0); } } - if (dst == SLJIT_UNUSED) - return emit_cmp_binary(compiler, src1, src1w, src2, src2w); return emit_non_cum_binary(compiler, BINARY_OPCODE(SUB), dst, dstw, src1, src1w, src2, src2w); case SLJIT_SUBC: @@ -2329,8 +2280,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile case SLJIT_MUL: return emit_mul(compiler, dst, dstw, src1, src1w, src2, src2w); case SLJIT_AND: - if (dst == SLJIT_UNUSED) - return emit_test_binary(compiler, src1, src1w, src2, src2w); return emit_cum_binary(compiler, BINARY_OPCODE(AND), dst, dstw, src1, src1w, src2, src2w); case SLJIT_OR: @@ -2353,6 +2302,38 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile return SLJIT_SUCCESS; } +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2u(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2, sljit_sw src2w) +{ + sljit_s32 opcode = GET_OPCODE(op); + + CHECK_ERROR(); + CHECK(check_sljit_emit_op2(compiler, op, 1, 0, 0, src1, src1w, src2, src2w)); + + if (opcode != SLJIT_SUB && opcode != SLJIT_AND) { +#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ + || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) + compiler->skip_checks = 1; +#endif + return sljit_emit_op2(compiler, op, TMP_REG1, 0, src1, src1w, src2, src2w); + } + + ADJUST_LOCAL_OFFSET(src1, src1w); + ADJUST_LOCAL_OFFSET(src2, src2w); + + CHECK_EXTRA_REGS(src1, src1w, (void)0); + CHECK_EXTRA_REGS(src2, src2w, (void)0); +#if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64) + compiler->mode32 = op & SLJIT_32; +#endif + + if (opcode == SLJIT_SUB) { + return emit_cmp_binary(compiler, src1, src1w, src2, src2w); + } + return emit_test_binary(compiler, src1, src1w, src2, src2w); +} + SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_src(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src, sljit_sw srcw) { @@ -2369,7 +2350,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_src(struct sljit_compiler *comp /* Don't adjust shadow stack if it isn't enabled. */ if (!cpu_has_shadow_stack ()) return SLJIT_SUCCESS; - return adjust_shadow_stack(compiler, src, srcw, SLJIT_UNUSED, 0); + return adjust_shadow_stack(compiler, src, srcw); case SLJIT_PREFETCH_L1: case SLJIT_PREFETCH_L2: case SLJIT_PREFETCH_L3: @@ -2401,7 +2382,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_float_register_index(sljit_s32 reg) } SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_custom(struct sljit_compiler *compiler, - void *instruction, sljit_s32 size) + void *instruction, sljit_u32 size) { sljit_u8 *inst; @@ -2420,13 +2401,13 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_custom(struct sljit_compiler *c /* --------------------------------------------------------------------- */ /* Alignment(3) + 4 * 16 bytes. */ -static sljit_s32 sse2_data[3 + (4 * 4)]; -static sljit_s32 *sse2_buffer; +static sljit_u32 sse2_data[3 + (4 * 4)]; +static sljit_u32 *sse2_buffer; static void init_compiler(void) { /* Align to 16 bytes. */ - sse2_buffer = (sljit_s32*)(((sljit_uw)sse2_data + 15) & ~0xf); + sse2_buffer = (sljit_u32*)(((sljit_uw)sse2_data + 15) & ~(sljit_uw)0xf); /* Single precision constants (each constant is 16 byte long). */ sse2_buffer[0] = 0x80000000; @@ -2486,7 +2467,7 @@ static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_sw_from_f64(struct sljit_comp compiler->mode32 = 0; #endif - inst = emit_x86_instruction(compiler, 2 | ((op & SLJIT_F32_OP) ? EX86_PREF_F3 : EX86_PREF_F2) | EX86_SSE2_OP2, dst_r, 0, src, srcw); + inst = emit_x86_instruction(compiler, 2 | ((op & SLJIT_32) ? EX86_PREF_F3 : EX86_PREF_F2) | EX86_SSE2_OP2, dst_r, 0, src, srcw); FAIL_IF(!inst); *inst++ = GROUP_0F; *inst = CVTTSD2SI_r_xm; @@ -2518,7 +2499,7 @@ static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_f64_from_sw(struct sljit_comp srcw = 0; } - inst = emit_x86_instruction(compiler, 2 | ((op & SLJIT_F32_OP) ? EX86_PREF_F3 : EX86_PREF_F2) | EX86_SSE2_OP1, dst_r, 0, src, srcw); + inst = emit_x86_instruction(compiler, 2 | ((op & SLJIT_32) ? EX86_PREF_F3 : EX86_PREF_F2) | EX86_SSE2_OP1, dst_r, 0, src, srcw); FAIL_IF(!inst); *inst++ = GROUP_0F; *inst = CVTSI2SD_x_rm; @@ -2527,7 +2508,7 @@ static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_f64_from_sw(struct sljit_comp compiler->mode32 = 1; #endif if (dst_r == TMP_FREG) - return emit_sse2_store(compiler, op & SLJIT_F32_OP, dst, dstw, TMP_FREG); + return emit_sse2_store(compiler, op & SLJIT_32, dst, dstw, TMP_FREG); return SLJIT_SUCCESS; } @@ -2536,11 +2517,11 @@ static SLJIT_INLINE sljit_s32 sljit_emit_fop1_cmp(struct sljit_compiler *compile sljit_s32 src2, sljit_sw src2w) { if (!FAST_IS_REG(src1)) { - FAIL_IF(emit_sse2_load(compiler, op & SLJIT_F32_OP, TMP_FREG, src1, src1w)); + FAIL_IF(emit_sse2_load(compiler, op & SLJIT_32, TMP_FREG, src1, src1w)); src1 = TMP_FREG; } - return emit_sse2_logic(compiler, UCOMISD_x_xm, !(op & SLJIT_F32_OP), src1, src2, src2w); + return emit_sse2_logic(compiler, UCOMISD_x_xm, !(op & SLJIT_32), src1, src2, src2w); } SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compiler, sljit_s32 op, @@ -2558,11 +2539,11 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compil if (GET_OPCODE(op) == SLJIT_MOV_F64) { if (FAST_IS_REG(dst)) - return emit_sse2_load(compiler, op & SLJIT_F32_OP, dst, src, srcw); + return emit_sse2_load(compiler, op & SLJIT_32, dst, src, srcw); if (FAST_IS_REG(src)) - return emit_sse2_store(compiler, op & SLJIT_F32_OP, dst, dstw, src); - FAIL_IF(emit_sse2_load(compiler, op & SLJIT_F32_OP, TMP_FREG, src, srcw)); - return emit_sse2_store(compiler, op & SLJIT_F32_OP, dst, dstw, TMP_FREG); + return emit_sse2_store(compiler, op & SLJIT_32, dst, dstw, src); + FAIL_IF(emit_sse2_load(compiler, op & SLJIT_32, TMP_FREG, src, srcw)); + return emit_sse2_store(compiler, op & SLJIT_32, dst, dstw, TMP_FREG); } if (GET_OPCODE(op) == SLJIT_CONV_F64_FROM_F32) { @@ -2571,41 +2552,41 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compil /* We overwrite the high bits of source. From SLJIT point of view, this is not an issue. Note: In SSE3, we could also use MOVDDUP and MOVSLDUP. */ - FAIL_IF(emit_sse2_logic(compiler, UNPCKLPD_x_xm, op & SLJIT_F32_OP, src, src, 0)); + FAIL_IF(emit_sse2_logic(compiler, UNPCKLPD_x_xm, op & SLJIT_32, src, src, 0)); } else { - FAIL_IF(emit_sse2_load(compiler, !(op & SLJIT_F32_OP), TMP_FREG, src, srcw)); + FAIL_IF(emit_sse2_load(compiler, !(op & SLJIT_32), TMP_FREG, src, srcw)); src = TMP_FREG; } - FAIL_IF(emit_sse2_logic(compiler, CVTPD2PS_x_xm, op & SLJIT_F32_OP, dst_r, src, 0)); + FAIL_IF(emit_sse2_logic(compiler, CVTPD2PS_x_xm, op & SLJIT_32, dst_r, src, 0)); if (dst_r == TMP_FREG) - return emit_sse2_store(compiler, op & SLJIT_F32_OP, dst, dstw, TMP_FREG); + return emit_sse2_store(compiler, op & SLJIT_32, dst, dstw, TMP_FREG); return SLJIT_SUCCESS; } if (FAST_IS_REG(dst)) { dst_r = dst; if (dst != src) - FAIL_IF(emit_sse2_load(compiler, op & SLJIT_F32_OP, dst_r, src, srcw)); + FAIL_IF(emit_sse2_load(compiler, op & SLJIT_32, dst_r, src, srcw)); } else { dst_r = TMP_FREG; - FAIL_IF(emit_sse2_load(compiler, op & SLJIT_F32_OP, dst_r, src, srcw)); + FAIL_IF(emit_sse2_load(compiler, op & SLJIT_32, dst_r, src, srcw)); } switch (GET_OPCODE(op)) { case SLJIT_NEG_F64: - FAIL_IF(emit_sse2_logic(compiler, XORPD_x_xm, 1, dst_r, SLJIT_MEM0(), (sljit_sw)(op & SLJIT_F32_OP ? sse2_buffer : sse2_buffer + 8))); + FAIL_IF(emit_sse2_logic(compiler, XORPD_x_xm, 1, dst_r, SLJIT_MEM0(), (sljit_sw)(op & SLJIT_32 ? sse2_buffer : sse2_buffer + 8))); break; case SLJIT_ABS_F64: - FAIL_IF(emit_sse2_logic(compiler, ANDPD_x_xm, 1, dst_r, SLJIT_MEM0(), (sljit_sw)(op & SLJIT_F32_OP ? sse2_buffer + 4 : sse2_buffer + 12))); + FAIL_IF(emit_sse2_logic(compiler, ANDPD_x_xm, 1, dst_r, SLJIT_MEM0(), (sljit_sw)(op & SLJIT_32 ? sse2_buffer + 4 : sse2_buffer + 12))); break; } if (dst_r == TMP_FREG) - return emit_sse2_store(compiler, op & SLJIT_F32_OP, dst, dstw, TMP_FREG); + return emit_sse2_store(compiler, op & SLJIT_32, dst, dstw, TMP_FREG); return SLJIT_SUCCESS; } @@ -2636,37 +2617,37 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop2(struct sljit_compiler *compil src2w = src1w; } else if (dst != src2) - FAIL_IF(emit_sse2_load(compiler, op & SLJIT_F32_OP, dst_r, src1, src1w)); + FAIL_IF(emit_sse2_load(compiler, op & SLJIT_32, dst_r, src1, src1w)); else { dst_r = TMP_FREG; - FAIL_IF(emit_sse2_load(compiler, op & SLJIT_F32_OP, TMP_FREG, src1, src1w)); + FAIL_IF(emit_sse2_load(compiler, op & SLJIT_32, TMP_FREG, src1, src1w)); } } else { dst_r = TMP_FREG; - FAIL_IF(emit_sse2_load(compiler, op & SLJIT_F32_OP, TMP_FREG, src1, src1w)); + FAIL_IF(emit_sse2_load(compiler, op & SLJIT_32, TMP_FREG, src1, src1w)); } switch (GET_OPCODE(op)) { case SLJIT_ADD_F64: - FAIL_IF(emit_sse2(compiler, ADDSD_x_xm, op & SLJIT_F32_OP, dst_r, src2, src2w)); + FAIL_IF(emit_sse2(compiler, ADDSD_x_xm, op & SLJIT_32, dst_r, src2, src2w)); break; case SLJIT_SUB_F64: - FAIL_IF(emit_sse2(compiler, SUBSD_x_xm, op & SLJIT_F32_OP, dst_r, src2, src2w)); + FAIL_IF(emit_sse2(compiler, SUBSD_x_xm, op & SLJIT_32, dst_r, src2, src2w)); break; case SLJIT_MUL_F64: - FAIL_IF(emit_sse2(compiler, MULSD_x_xm, op & SLJIT_F32_OP, dst_r, src2, src2w)); + FAIL_IF(emit_sse2(compiler, MULSD_x_xm, op & SLJIT_32, dst_r, src2, src2w)); break; case SLJIT_DIV_F64: - FAIL_IF(emit_sse2(compiler, DIVSD_x_xm, op & SLJIT_F32_OP, dst_r, src2, src2w)); + FAIL_IF(emit_sse2(compiler, DIVSD_x_xm, op & SLJIT_32, dst_r, src2, src2w)); break; } if (dst_r == TMP_FREG) - return emit_sse2_store(compiler, op & SLJIT_F32_OP, dst, dstw, TMP_FREG); + return emit_sse2_store(compiler, op & SLJIT_32, dst, dstw, TMP_FREG); return SLJIT_SUCCESS; } @@ -2708,7 +2689,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump)); PTR_FAIL_IF_NULL(jump); - set_jump(jump, compiler, (type & SLJIT_REWRITABLE_JUMP) | ((type & 0xff) << TYPE_SHIFT)); + set_jump(jump, compiler, (sljit_u32)((type & SLJIT_REWRITABLE_JUMP) | ((type & 0xff) << TYPE_SHIFT))); type &= 0xff; /* Worst case size. */ @@ -2740,8 +2721,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_ijump(struct sljit_compiler *compi if (src == SLJIT_IMM) { jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump)); FAIL_IF_NULL(jump); - set_jump(jump, compiler, JUMP_ADDR | (type << TYPE_SHIFT)); - jump->u.target = srcw; + set_jump(jump, compiler, (sljit_u32)(JUMP_ADDR | (type << TYPE_SHIFT))); + jump->u.target = (sljit_uw)srcw; /* Worst case size. */ #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32) @@ -2764,7 +2745,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_ijump(struct sljit_compiler *compi inst = emit_x86_instruction(compiler, 1, 0, 0, src, srcw); FAIL_IF(!inst); *inst++ = GROUP_FF; - *inst |= (type >= SLJIT_FAST_CALL) ? CALL_rm : JMP_rm; + *inst = U8(*inst | ((type >= SLJIT_FAST_CALL) ? CALL_rm : JMP_rm)); } return SLJIT_SUCCESS; } @@ -2790,7 +2771,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co type &= 0xff; /* setcc = jcc + 0x10. */ - cond_set = get_jump_code(type) + 0x10; + cond_set = U8(get_jump_code((sljit_uw)type) + 0x10); #if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64) if (GET_OPCODE(op) == SLJIT_OR && !GET_ALL_FLAGS(op) && FAST_IS_REG(dst)) { @@ -2802,9 +2783,9 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co *inst++ = GROUP_0F; *inst++ = cond_set; *inst++ = MOD_REG | reg_lmap[TMP_REG1]; - *inst++ = REX | (reg_map[TMP_REG1] <= 7 ? 0 : REX_R) | (reg_map[dst] <= 7 ? 0 : REX_B); + *inst++ = U8(REX | (reg_map[TMP_REG1] <= 7 ? 0 : REX_R) | (reg_map[dst] <= 7 ? 0 : REX_B)); *inst++ = OR_rm8_r8; - *inst++ = MOD_REG | (reg_lmap[TMP_REG1] << 3) | reg_lmap[dst]; + *inst++ = U8(MOD_REG | (reg_lmap[TMP_REG1] << 3) | reg_lmap[dst]); return SLJIT_SUCCESS; } @@ -2822,7 +2803,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co /* The movzx instruction does not affect flags. */ *inst++ = GROUP_0F; *inst++ = MOVZX_r_rm8; - *inst = MOD_REG | (reg_lmap[reg] << 3) | reg_lmap[reg]; + *inst = U8(MOD_REG | (reg_lmap[reg] << 3) | reg_lmap[reg]); if (reg != TMP_REG1) return SLJIT_SUCCESS; @@ -2849,11 +2830,11 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co /* Set low byte to conditional flag. */ *inst++ = GROUP_0F; *inst++ = cond_set; - *inst++ = MOD_REG | reg_map[dst]; + *inst++ = U8(MOD_REG | reg_map[dst]); *inst++ = GROUP_0F; *inst++ = MOVZX_r_rm8; - *inst = MOD_REG | (reg_map[dst] << 3) | reg_map[dst]; + *inst = U8(MOD_REG | (reg_map[dst] << 3) | reg_map[dst]); return SLJIT_SUCCESS; } @@ -2872,15 +2853,15 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co *inst++ = GROUP_0F; /* cmovcc = setcc - 0x50. */ - *inst++ = cond_set - 0x50; - *inst++ = MOD_REG | (reg_map[dst] << 3) | reg_map[TMP_REG1]; + *inst++ = U8(cond_set - 0x50); + *inst++ = U8(MOD_REG | (reg_map[dst] << 3) | reg_map[TMP_REG1]); return SLJIT_SUCCESS; } inst = (sljit_u8*)ensure_buf(compiler, 1 + 1 + 3 + 3 + 1); FAIL_IF(!inst); INC_SIZE(1 + 3 + 3 + 1); - *inst++ = XCHG_EAX_r + reg_map[TMP_REG1]; + *inst++ = U8(XCHG_EAX_r | reg_map[TMP_REG1]); /* Set al to conditional flag. */ *inst++ = GROUP_0F; *inst++ = cond_set; @@ -2888,8 +2869,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co *inst++ = GROUP_0F; *inst++ = MOVZX_r_rm8; - *inst++ = MOD_REG | (reg_map[dst] << 3) | 0 /* eax */; - *inst++ = XCHG_EAX_r + reg_map[TMP_REG1]; + *inst++ = U8(MOD_REG | (reg_map[dst] << 3) | 0 /* eax */); + *inst++ = U8(XCHG_EAX_r | reg_map[TMP_REG1]); return SLJIT_SUCCESS; } @@ -2901,13 +2882,13 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co FAIL_IF(!inst); INC_SIZE(1 + 3 + 2 + 1); /* Set low register to conditional flag. */ - *inst++ = XCHG_EAX_r + reg_map[TMP_REG1]; + *inst++ = U8(XCHG_EAX_r | reg_map[TMP_REG1]); *inst++ = GROUP_0F; *inst++ = cond_set; *inst++ = MOD_REG | 0 /* eax */; *inst++ = OR_rm8_r8; *inst++ = MOD_REG | (0 /* eax */ << 3) | reg_map[dst]; - *inst++ = XCHG_EAX_r + reg_map[TMP_REG1]; + *inst++ = U8(XCHG_EAX_r | reg_map[TMP_REG1]); } else { inst = (sljit_u8*)ensure_buf(compiler, 1 + 2 + 3 + 2 + 2); @@ -2915,14 +2896,14 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co INC_SIZE(2 + 3 + 2 + 2); /* Set low register to conditional flag. */ *inst++ = XCHG_r_rm; - *inst++ = MOD_REG | (1 /* ecx */ << 3) | reg_map[TMP_REG1]; + *inst++ = U8(MOD_REG | (1 /* ecx */ << 3) | reg_map[TMP_REG1]); *inst++ = GROUP_0F; *inst++ = cond_set; *inst++ = MOD_REG | 1 /* ecx */; *inst++ = OR_rm8_r8; *inst++ = MOD_REG | (1 /* ecx */ << 3) | 0 /* eax */; *inst++ = XCHG_r_rm; - *inst++ = MOD_REG | (1 /* ecx */ << 3) | reg_map[TMP_REG1]; + *inst++ = U8(MOD_REG | (1 /* ecx */ << 3) | reg_map[TMP_REG1]); } return SLJIT_SUCCESS; } @@ -2931,7 +2912,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co inst = (sljit_u8*)ensure_buf(compiler, 1 + 1 + 3 + 3 + 1); FAIL_IF(!inst); INC_SIZE(1 + 3 + 3 + 1); - *inst++ = XCHG_EAX_r + reg_map[TMP_REG1]; + *inst++ = U8(XCHG_EAX_r | reg_map[TMP_REG1]); /* Set al to conditional flag. */ *inst++ = GROUP_0F; *inst++ = cond_set; @@ -2941,7 +2922,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co *inst++ = MOVZX_r_rm8; *inst++ = MOD_REG | (0 << 3) /* eax */ | 0 /* eax */; - *inst++ = XCHG_EAX_r + reg_map[TMP_REG1]; + *inst++ = U8(XCHG_EAX_r | reg_map[TMP_REG1]); if (GET_OPCODE(op) < SLJIT_ADD) return emit_mov(compiler, dst, dstw, TMP_REG1, 0); @@ -2964,7 +2945,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_cmov(struct sljit_compiler *compil CHECK(check_sljit_emit_cmov(compiler, type, dst_reg, src, srcw)); #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32) - dst_reg &= ~SLJIT_I32_OP; + dst_reg &= ~SLJIT_32; if (!sljit_has_cpu_feature(SLJIT_HAS_CMOV) || (dst_reg >= SLJIT_R3 && dst_reg <= SLJIT_S3)) return sljit_emit_cmov_generic(compiler, type, dst_reg, src, srcw); @@ -2977,8 +2958,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_cmov(struct sljit_compiler *compil CHECK_EXTRA_REGS(src, srcw, (void)0); #if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64) - compiler->mode32 = dst_reg & SLJIT_I32_OP; - dst_reg &= ~SLJIT_I32_OP; + compiler->mode32 = dst_reg & SLJIT_32; + dst_reg &= ~SLJIT_32; #endif if (SLJIT_UNLIKELY(src & SLJIT_IMM)) { @@ -2990,7 +2971,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_cmov(struct sljit_compiler *compil inst = emit_x86_instruction(compiler, 2, dst_reg, 0, src, srcw); FAIL_IF(!inst); *inst++ = GROUP_0F; - *inst = get_jump_code(type & 0xff) - 0x40; + *inst = U8(get_jump_code(type & 0xff) - 0x40); return SLJIT_SUCCESS; } @@ -3123,9 +3104,9 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_set_jump_addr(sljit_uw addr, sljit_uw new_ta SLJIT_UPDATE_WX_FLAGS((void*)addr, (void*)(addr + sizeof(sljit_uw)), 0); #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32) - sljit_unaligned_store_sw((void*)addr, new_target - (addr + 4) - (sljit_uw)executable_offset); + sljit_unaligned_store_sw((void*)addr, (sljit_sw)(new_target - (addr + 4) - (sljit_uw)executable_offset)); #else - sljit_unaligned_store_sw((void*)addr, (sljit_sw) new_target); + sljit_unaligned_store_sw((void*)addr, (sljit_sw)new_target); #endif SLJIT_UPDATE_WX_FLAGS((void*)addr, (void*)(addr + sizeof(sljit_uw)), 1); } diff --git a/thirdparty/pcre2/src/sljit/sljitProtExecAllocator.c b/thirdparty/pcre2/src/sljit/sljitProtExecAllocator.c index 147175afa6..915411fbed 100644 --- a/thirdparty/pcre2/src/sljit/sljitProtExecAllocator.c +++ b/thirdparty/pcre2/src/sljit/sljitProtExecAllocator.c @@ -66,7 +66,7 @@ /* --------------------------------------------------------------------- */ /* 64 KByte. */ -#define CHUNK_SIZE 0x10000 +#define CHUNK_SIZE (sljit_uw)0x10000 struct chunk_header { void *executable; @@ -194,7 +194,7 @@ static SLJIT_INLINE struct chunk_header* alloc_chunk(sljit_uw size) if (fd == -1) return NULL; - if (ftruncate(fd, size)) { + if (ftruncate(fd, (off_t)size)) { close(fd); return NULL; } @@ -281,7 +281,7 @@ struct free_block { #define AS_FREE_BLOCK(base, offset) \ ((struct free_block*)(((sljit_u8*)base) + offset)) #define MEM_START(base) ((void*)((base) + 1)) -#define ALIGN_SIZE(size) (((size) + sizeof(struct block_header) + 7) & ~7) +#define ALIGN_SIZE(size) (((size) + sizeof(struct block_header) + 7u) & ~(sljit_uw)7) static struct free_block* free_blocks; static sljit_uw allocated_size; diff --git a/thirdparty/pcre2/src/sljit/sljitUtils.c b/thirdparty/pcre2/src/sljit/sljitUtils.c index 9bce714735..967593b157 100644 --- a/thirdparty/pcre2/src/sljit/sljitUtils.c +++ b/thirdparty/pcre2/src/sljit/sljitUtils.c @@ -131,12 +131,12 @@ static SLJIT_INLINE int open_dev_zero(void) #ifdef _WIN32 -static SLJIT_INLINE sljit_sw get_page_alignment(void) { +static SLJIT_INLINE sljit_uw get_page_alignment(void) { SYSTEM_INFO si; - static sljit_sw sljit_page_align; + static sljit_uw sljit_page_align = 0; if (!sljit_page_align) { GetSystemInfo(&si); - sljit_page_align = si.dwPageSize - 1; + sljit_page_align = (sljit_uw)si.dwPageSize - 1; } return sljit_page_align; } @@ -145,18 +145,21 @@ static SLJIT_INLINE sljit_sw get_page_alignment(void) { #include <unistd.h> -static SLJIT_INLINE sljit_sw get_page_alignment(void) { - static sljit_sw sljit_page_align = -1; - if (sljit_page_align < 0) { +static SLJIT_INLINE sljit_uw get_page_alignment(void) { + static sljit_uw sljit_page_align = 0; + + sljit_sw align; + + if (!sljit_page_align) { #ifdef _SC_PAGESIZE - sljit_page_align = sysconf(_SC_PAGESIZE); + align = sysconf(_SC_PAGESIZE); #else - sljit_page_align = getpagesize(); + align = getpagesize(); #endif /* Should never happen. */ - if (sljit_page_align < 0) - sljit_page_align = 4096; - sljit_page_align--; + if (align < 0) + align = 4096; + sljit_page_align = (sljit_uw)align - 1; } return sljit_page_align; } @@ -227,7 +230,7 @@ SLJIT_API_FUNC_ATTRIBUTE void SLJIT_FUNC sljit_free_stack(struct sljit_stack *st SLJIT_API_FUNC_ATTRIBUTE void SLJIT_FUNC sljit_free_stack(struct sljit_stack *stack, void *allocator_data) { SLJIT_UNUSED_ARG(allocator_data); - munmap((void*)stack->min_start, stack->end - stack->min_start); + munmap((void*)stack->min_start, (size_t)(stack->end - stack->min_start)); SLJIT_FREE(stack, allocator_data); } @@ -237,7 +240,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_stack* SLJIT_FUNC sljit_allocate_stack(slj { struct sljit_stack *stack; void *ptr; - sljit_sw page_align; + sljit_uw page_align; SLJIT_UNUSED_ARG(allocator_data); @@ -295,7 +298,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_u8 *SLJIT_FUNC sljit_stack_resize(struct sljit_st #if defined _WIN32 || defined(POSIX_MADV_DONTNEED) sljit_uw aligned_old_start; sljit_uw aligned_new_start; - sljit_sw page_align; + sljit_uw page_align; #endif if ((new_start < stack->min_start) || (new_start >= stack->end)) diff --git a/thirdparty/recastnavigation/Recast/Include/RecastAlloc.h b/thirdparty/recastnavigation/Recast/Include/RecastAlloc.h index e436af9a01..071278d659 100644 --- a/thirdparty/recastnavigation/Recast/Include/RecastAlloc.h +++ b/thirdparty/recastnavigation/Recast/Include/RecastAlloc.h @@ -22,7 +22,7 @@ #include <stddef.h> #include <stdint.h> -#include <RecastAssert.h> +#include "RecastAssert.h" /// Provides hint values to the memory allocator on how long the /// memory is expected to be used. @@ -106,6 +106,8 @@ class rcVectorBase { // Creates an array of the given size, copies all of this vector's data into it, and returns it. T* allocate_and_copy(rcSizeType size); void resize_impl(rcSizeType size, const T* value); + // Requires: min_capacity > m_cap. + rcSizeType get_new_capacity(rcSizeType min_capacity); public: typedef rcSizeType size_type; typedef T value_type; @@ -196,8 +198,7 @@ void rcVectorBase<T, H>::push_back(const T& value) { return; } - rcAssert(RC_SIZE_MAX / 2 >= m_size); - rcSizeType new_cap = m_size ? 2*m_size : 1; + const rcSizeType new_cap = get_new_capacity(m_cap + 1); T* data = allocate_and_copy(new_cap); // construct between allocate and destroy+free in case value is // in this vector. @@ -208,25 +209,44 @@ void rcVectorBase<T, H>::push_back(const T& value) { rcFree(m_data); m_data = data; } + +template <typename T, rcAllocHint H> +rcSizeType rcVectorBase<T, H>::get_new_capacity(rcSizeType min_capacity) { + rcAssert(min_capacity <= RC_SIZE_MAX); + if (rcUnlikely(m_cap >= RC_SIZE_MAX / 2)) + return RC_SIZE_MAX; + return 2 * m_cap > min_capacity ? 2 * m_cap : min_capacity; +} + template <typename T, rcAllocHint H> void rcVectorBase<T, H>::resize_impl(rcSizeType size, const T* value) { if (size < m_size) { destroy_range(size, m_size); m_size = size; } else if (size > m_size) { - T* new_data = allocate_and_copy(size); - // We defer deconstructing/freeing old data until after constructing - // new elements in case "value" is there. - if (value) { - construct_range(new_data + m_size, new_data + size, *value); + if (size <= m_cap) { + if (value) { + construct_range(m_data + m_size, m_data + size, *value); + } else { + construct_range(m_data + m_size, m_data + size); + } + m_size = size; } else { - construct_range(new_data + m_size, new_data + size); + const rcSizeType new_cap = get_new_capacity(size); + T* new_data = allocate_and_copy(new_cap); + // We defer deconstructing/freeing old data until after constructing + // new elements in case "value" is there. + if (value) { + construct_range(new_data + m_size, new_data + size, *value); + } else { + construct_range(new_data + m_size, new_data + size); + } + destroy_range(0, m_size); + rcFree(m_data); + m_data = new_data; + m_cap = new_cap; + m_size = size; } - destroy_range(0, m_size); - rcFree(m_data); - m_data = new_data; - m_cap = size; - m_size = size; } } template <typename T, rcAllocHint H> @@ -303,6 +323,7 @@ public: rcIntArray(int n) : m_impl(n, 0) {} void push(int item) { m_impl.push_back(item); } void resize(int size) { m_impl.resize(size); } + void clear() { m_impl.clear(); } int pop() { int v = m_impl.back(); diff --git a/thirdparty/recastnavigation/Recast/Source/RecastContour.cpp b/thirdparty/recastnavigation/Recast/Source/RecastContour.cpp index 6574c11b6b..1293d4fbde 100644 --- a/thirdparty/recastnavigation/Recast/Source/RecastContour.cpp +++ b/thirdparty/recastnavigation/Recast/Source/RecastContour.cpp @@ -921,8 +921,8 @@ bool rcBuildContours(rcContext* ctx, rcCompactHeightfield& chf, continue; const unsigned char area = chf.areas[i]; - verts.resize(0); - simplified.resize(0); + verts.clear(); + simplified.clear(); ctx->startTimer(RC_TIMER_BUILD_CONTOURS_TRACE); walkContour(x, y, i, chf, flags, verts); diff --git a/thirdparty/recastnavigation/Recast/Source/RecastMeshDetail.cpp b/thirdparty/recastnavigation/Recast/Source/RecastMeshDetail.cpp index 9a423cab8a..1999200c1a 100644 --- a/thirdparty/recastnavigation/Recast/Source/RecastMeshDetail.cpp +++ b/thirdparty/recastnavigation/Recast/Source/RecastMeshDetail.cpp @@ -653,8 +653,8 @@ static bool buildPolyDetail(rcContext* ctx, const float* in, const int nin, for (int i = 0; i < nin; ++i) rcVcopy(&verts[i*3], &in[i*3]); - edges.resize(0); - tris.resize(0); + edges.clear(); + tris.clear(); const float cs = chf.cs; const float ics = 1.0f/cs; @@ -803,7 +803,7 @@ static bool buildPolyDetail(rcContext* ctx, const float* in, const int nin, int x1 = (int)ceilf(bmax[0]/sampleDist); int z0 = (int)floorf(bmin[2]/sampleDist); int z1 = (int)ceilf(bmax[2]/sampleDist); - samples.resize(0); + samples.clear(); for (int z = z0; z < z1; ++z) { for (int x = x0; x < x1; ++x) @@ -864,8 +864,8 @@ static bool buildPolyDetail(rcContext* ctx, const float* in, const int nin, // Create new triangulation. // TODO: Incremental add instead of full rebuild. - edges.resize(0); - tris.resize(0); + edges.clear(); + tris.clear(); delaunayHull(ctx, nverts, verts, nhull, hull, tris, edges); } } @@ -935,7 +935,7 @@ static void seedArrayWithPolyCenter(rcContext* ctx, const rcCompactHeightfield& pcy /= npoly; // Use seeds array as a stack for DFS - array.resize(0); + array.clear(); array.push(startCellX); array.push(startCellY); array.push(startSpanIndex); @@ -1001,7 +1001,7 @@ static void seedArrayWithPolyCenter(rcContext* ctx, const rcCompactHeightfield& rcSwap(dirs[directDir], dirs[3]); } - array.resize(0); + array.clear(); // getHeightData seeds are given in coordinates with borders array.push(cx+bs); array.push(cy+bs); @@ -1030,7 +1030,7 @@ static void getHeightData(rcContext* ctx, const rcCompactHeightfield& chf, // Note: Reads to the compact heightfield are offset by border size (bs) // since border size offset is already removed from the polymesh vertices. - queue.resize(0); + queue.clear(); // Set all heights to RC_UNSET_HEIGHT. memset(hp.data, 0xff, sizeof(unsigned short)*hp.width*hp.height); diff --git a/thirdparty/recastnavigation/Recast/Source/RecastRegion.cpp b/thirdparty/recastnavigation/Recast/Source/RecastRegion.cpp index e1fc0ee788..48318688bc 100644 --- a/thirdparty/recastnavigation/Recast/Source/RecastRegion.cpp +++ b/thirdparty/recastnavigation/Recast/Source/RecastRegion.cpp @@ -650,7 +650,7 @@ static bool mergeRegions(rcRegion& rega, rcRegion& regb) return false; // Merge neighbours. - rega.connections.resize(0); + rega.connections.clear(); for (int i = 0, ni = acon.size(); i < ni-1; ++i) rega.connections.push(acon[(insa+1+i) % ni]); @@ -876,8 +876,8 @@ static bool mergeAndFilterRegions(rcContext* ctx, int minRegionArea, int mergeRe // Also keep track of the regions connects to a tile border. bool connectsToBorder = false; int spanCount = 0; - stack.resize(0); - trace.resize(0); + stack.clear(); + trace.clear(); reg.visited = true; stack.push(i); @@ -1068,7 +1068,7 @@ static bool mergeAndFilterLayerRegions(rcContext* ctx, int minRegionArea, { const rcCompactCell& c = chf.cells[x+y*w]; - lregs.resize(0); + lregs.clear(); for (int i = (int)c.index, ni = (int)(c.index+c.count); i < ni; ++i) { @@ -1139,7 +1139,7 @@ static bool mergeAndFilterLayerRegions(rcContext* ctx, int minRegionArea, // Start search. root.id = layerId; - stack.resize(0); + stack.clear(); stack.push(i); while (stack.size() > 0) diff --git a/thirdparty/rvo2/API.h b/thirdparty/rvo2/API.h deleted file mode 100644 index c64efb452c..0000000000 --- a/thirdparty/rvo2/API.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * API.h - * RVO2-3D Library - * - * Copyright 2008 University of North Carolina at Chapel Hill - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Please send all bug reports to <geom@cs.unc.edu>. - * - * The authors may be contacted via: - * - * Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha - * Dept. of Computer Science - * 201 S. Columbia St. - * Frederick P. Brooks, Jr. Computer Science Bldg. - * Chapel Hill, N.C. 27599-3175 - * United States of America - * - * <http://gamma.cs.unc.edu/RVO2/> - */ - -/** - * \file API.h - * \brief Contains definitions related to Microsoft Windows. - */ - -#ifndef RVO_API_H_ -#define RVO_API_H_ - -// -- GODOT start -- -#define RVO_API -// -- GODOT end -- - -#endif /* RVO_API_H_ */ diff --git a/thirdparty/rvo2/Agent.cpp b/thirdparty/rvo2/Agent.cpp index 851d780758..b35eee9c12 100644 --- a/thirdparty/rvo2/Agent.cpp +++ b/thirdparty/rvo2/Agent.cpp @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -27,40 +27,40 @@ * Chapel Hill, N.C. 27599-3175 * United States of America * - * <http://gamma.cs.unc.edu/RVO2/> + * <https://gamma.cs.unc.edu/RVO2/> */ #include "Agent.h" -#include <algorithm> #include <cmath> +#include <algorithm> #include "Definitions.h" #include "KdTree.h" namespace RVO { -/** + /** * \brief A sufficiently small positive number. */ -const float RVO_EPSILON = 0.00001f; + const float RVO3D_EPSILON = 0.00001f; -/** + /** * \brief Defines a directed line. */ -class Line { -public: - /** + class Line { + public: + /** * \brief The direction of the directed line. */ - Vector3 direction; + Vector3 direction; - /** + /** * \brief A point on the directed line. */ - Vector3 point; -}; + Vector3 point; + }; -/** + /** * \brief Solves a one-dimensional linear program on a specified line subject to linear constraints defined by planes and a spherical constraint. * \param planes Planes defining the linear constraints. * \param planeNo The plane on which the line lies. @@ -71,9 +71,9 @@ public: * \param result A reference to the result of the linear program. * \return True if successful. */ -bool linearProgram1(const std::vector<Plane> &planes, size_t planeNo, const Line &line, float radius, const Vector3 &optVelocity, bool directionOpt, Vector3 &result); + bool linearProgram1(const std::vector<Plane> &planes, size_t planeNo, const Line &line, float radius, const Vector3 &optVelocity, bool directionOpt, Vector3 &result); -/** + /** * \brief Solves a two-dimensional linear program on a specified plane subject to linear constraints defined by planes and a spherical constraint. * \param planes Planes defining the linear constraints. * \param planeNo The plane on which the 2-d linear program is solved @@ -83,9 +83,9 @@ bool linearProgram1(const std::vector<Plane> &planes, size_t planeNo, const Line * \param result A reference to the result of the linear program. * \return True if successful. */ -bool linearProgram2(const std::vector<Plane> &planes, size_t planeNo, float radius, const Vector3 &optVelocity, bool directionOpt, Vector3 &result); + bool linearProgram2(const std::vector<Plane> &planes, size_t planeNo, float radius, const Vector3 &optVelocity, bool directionOpt, Vector3 &result); -/** + /** * \brief Solves a three-dimensional linear program subject to linear constraints defined by planes and a spherical constraint. * \param planes Planes defining the linear constraints. * \param radius The radius of the spherical constraint. @@ -94,332 +94,352 @@ bool linearProgram2(const std::vector<Plane> &planes, size_t planeNo, float radi * \param result A reference to the result of the linear program. * \return The number of the plane it fails on, and the number of planes if successful. */ -size_t linearProgram3(const std::vector<Plane> &planes, float radius, const Vector3 &optVelocity, bool directionOpt, Vector3 &result); + size_t linearProgram3(const std::vector<Plane> &planes, float radius, const Vector3 &optVelocity, bool directionOpt, Vector3 &result); -/** + /** * \brief Solves a four-dimensional linear program subject to linear constraints defined by planes and a spherical constraint. * \param planes Planes defining the linear constraints. * \param beginPlane The plane on which the 3-d linear program failed. * \param radius The radius of the spherical constraint. * \param result A reference to the result of the linear program. */ -void linearProgram4(const std::vector<Plane> &planes, size_t beginPlane, float radius, Vector3 &result); + void linearProgram4(const std::vector<Plane> &planes, size_t beginPlane, float radius, Vector3 &result); -Agent::Agent() : - id_(0), maxNeighbors_(0), maxSpeed_(0.0f), neighborDist_(0.0f), radius_(0.0f), timeHorizon_(0.0f), ignore_y_(false) {} + Agent::Agent() : id_(0), maxNeighbors_(0), maxSpeed_(0.0f), neighborDist_(0.0f), radius_(0.0f), timeHorizon_(0.0f), ignore_y_(false) { } -void Agent::computeNeighbors(KdTree *kdTree_) { - agentNeighbors_.clear(); - if (maxNeighbors_ > 0) { - kdTree_->computeAgentNeighbors(this, neighborDist_ * neighborDist_); - } -} + void Agent::computeNeighbors(KdTree *kdTree_) + { + agentNeighbors_.clear(); + if (maxNeighbors_ > 0) { + kdTree_->computeAgentNeighbors(this, neighborDist_ * neighborDist_); + } + } + void Agent::computeNewVelocity(float timeStep) + { + orcaPlanes_.clear(); + const float invTimeHorizon = 1.0f / timeHorizon_; + + /* Create agent ORCA planes. */ + for (size_t i = 0; i < agentNeighbors_.size(); ++i) { + const Agent *const other = agentNeighbors_[i].second; + + Vector3 relativePosition = other->position_ - position_; + Vector3 relativeVelocity = velocity_ - other->velocity_; + const float combinedRadius = radius_ + other->radius_; + + // This is a Godot feature that allow the agents to avoid the collision + // by moving only on the horizontal plane relative to the player velocity. + if (ignore_y_) { + // Skip if these are in two different heights #define ABS(m_v) (((m_v) < 0) ? (-(m_v)) : (m_v)) -void Agent::computeNewVelocity(float timeStep) { - orcaPlanes_.clear(); - const float invTimeHorizon = 1.0f / timeHorizon_; - - /* Create agent ORCA planes. */ - for (size_t i = 0; i < agentNeighbors_.size(); ++i) { - const Agent *const other = agentNeighbors_[i].second; - - Vector3 relativePosition = other->position_ - position_; - Vector3 relativeVelocity = velocity_ - other->velocity_; - const float combinedRadius = radius_ + other->radius_; - - // This is a Godot feature that allow the agents to avoid the collision - // by moving only on the horizontal plane relative to the player velocity. - if (ignore_y_) { - // Skip if these are in two different heights - if (ABS(relativePosition[1]) > combinedRadius * 2) { - continue; - } - relativePosition[1] = 0; - relativeVelocity[1] = 0; - } - - const float distSq = absSq(relativePosition); - const float combinedRadiusSq = sqr(combinedRadius); - - Plane plane; - Vector3 u; - - if (distSq > combinedRadiusSq) { - /* No collision. */ - const Vector3 w = relativeVelocity - invTimeHorizon * relativePosition; - /* Vector from cutoff center to relative velocity. */ - const float wLengthSq = absSq(w); - - const float dotProduct = w * relativePosition; - - if (dotProduct < 0.0f && sqr(dotProduct) > combinedRadiusSq * wLengthSq) { - /* Project on cut-off circle. */ - const float wLength = std::sqrt(wLengthSq); - const Vector3 unitW = w / wLength; - - plane.normal = unitW; - u = (combinedRadius * invTimeHorizon - wLength) * unitW; - } else { - /* Project on cone. */ - const float a = distSq; - const float b = relativePosition * relativeVelocity; - const float c = absSq(relativeVelocity) - absSq(cross(relativePosition, relativeVelocity)) / (distSq - combinedRadiusSq); - const float t = (b + std::sqrt(sqr(b) - a * c)) / a; - const Vector3 w = relativeVelocity - t * relativePosition; + if (ABS(relativePosition[1]) > combinedRadius * 2) { + continue; + } + relativePosition[1] = 0; + relativeVelocity[1] = 0; + } + + const float distSq = absSq(relativePosition); + const float combinedRadiusSq = sqr(combinedRadius); + + Plane plane; + Vector3 u; + + if (distSq > combinedRadiusSq) { + /* No collision. */ + const Vector3 w = relativeVelocity - invTimeHorizon * relativePosition; + /* Vector from cutoff center to relative velocity. */ + const float wLengthSq = absSq(w); + + const float dotProduct = w * relativePosition; + + if (dotProduct < 0.0f && sqr(dotProduct) > combinedRadiusSq * wLengthSq) { + /* Project on cut-off circle. */ + const float wLength = std::sqrt(wLengthSq); + const Vector3 unitW = w / wLength; + + plane.normal = unitW; + u = (combinedRadius * invTimeHorizon - wLength) * unitW; + } + else { + /* Project on cone. */ + const float a = distSq; + const float b = relativePosition * relativeVelocity; + const float c = absSq(relativeVelocity) - absSq(cross(relativePosition, relativeVelocity)) / (distSq - combinedRadiusSq); + const float t = (b + std::sqrt(sqr(b) - a * c)) / a; + const Vector3 ww = relativeVelocity - t * relativePosition; + const float wwLength = abs(ww); + const Vector3 unitWW = ww / wwLength; + + plane.normal = unitWW; + u = (combinedRadius * t - wwLength) * unitWW; + } + } + else { + /* Collision. */ + const float invTimeStep = 1.0f / timeStep; + const Vector3 w = relativeVelocity - invTimeStep * relativePosition; const float wLength = abs(w); const Vector3 unitW = w / wLength; plane.normal = unitW; - u = (combinedRadius * t - wLength) * unitW; + u = (combinedRadius * invTimeStep - wLength) * unitW; } - } else { - /* Collision. */ - const float invTimeStep = 1.0f / timeStep; - const Vector3 w = relativeVelocity - invTimeStep * relativePosition; - const float wLength = abs(w); - const Vector3 unitW = w / wLength; - - plane.normal = unitW; - u = (combinedRadius * invTimeStep - wLength) * unitW; - } - plane.point = velocity_ + 0.5f * u; - orcaPlanes_.push_back(plane); - } + plane.point = velocity_ + 0.5f * u; + orcaPlanes_.push_back(plane); + } - const size_t planeFail = linearProgram3(orcaPlanes_, maxSpeed_, prefVelocity_, false, newVelocity_); + const size_t planeFail = linearProgram3(orcaPlanes_, maxSpeed_, prefVelocity_, false, newVelocity_); - if (planeFail < orcaPlanes_.size()) { - linearProgram4(orcaPlanes_, planeFail, maxSpeed_, newVelocity_); - } + if (planeFail < orcaPlanes_.size()) { + linearProgram4(orcaPlanes_, planeFail, maxSpeed_, newVelocity_); + } - if (ignore_y_) { - // Not 100% necessary, but better to have. - newVelocity_[1] = prefVelocity_[1]; - } -} + if (ignore_y_) { + // Not 100% necessary, but better to have. + newVelocity_[1] = prefVelocity_[1]; + } + } -void Agent::insertAgentNeighbor(const Agent *agent, float &rangeSq) { - if (this != agent) { - const float distSq = absSq(position_ - agent->position_); + void Agent::insertAgentNeighbor(const Agent *agent, float &rangeSq) + { + if (this != agent) { + const float distSq = absSq(position_ - agent->position_); - if (distSq < rangeSq) { - if (agentNeighbors_.size() < maxNeighbors_) { - agentNeighbors_.push_back(std::make_pair(distSq, agent)); - } + if (distSq < rangeSq) { + if (agentNeighbors_.size() < maxNeighbors_) { + agentNeighbors_.push_back(std::make_pair(distSq, agent)); + } - size_t i = agentNeighbors_.size() - 1; + size_t i = agentNeighbors_.size() - 1; - while (i != 0 && distSq < agentNeighbors_[i - 1].first) { - agentNeighbors_[i] = agentNeighbors_[i - 1]; - --i; - } + while (i != 0 && distSq < agentNeighbors_[i - 1].first) { + agentNeighbors_[i] = agentNeighbors_[i - 1]; + --i; + } - agentNeighbors_[i] = std::make_pair(distSq, agent); + agentNeighbors_[i] = std::make_pair(distSq, agent); - if (agentNeighbors_.size() == maxNeighbors_) { - rangeSq = agentNeighbors_.back().first; + if (agentNeighbors_.size() == maxNeighbors_) { + rangeSq = agentNeighbors_.back().first; + } } } } -} -bool linearProgram1(const std::vector<Plane> &planes, size_t planeNo, const Line &line, float radius, const Vector3 &optVelocity, bool directionOpt, Vector3 &result) { - const float dotProduct = line.point * line.direction; - const float discriminant = sqr(dotProduct) + sqr(radius) - absSq(line.point); - - if (discriminant < 0.0f) { - /* Max speed sphere fully invalidates line. */ - return false; - } - - const float sqrtDiscriminant = std::sqrt(discriminant); - float tLeft = -dotProduct - sqrtDiscriminant; - float tRight = -dotProduct + sqrtDiscriminant; - - for (size_t i = 0; i < planeNo; ++i) { - const float numerator = (planes[i].point - line.point) * planes[i].normal; - const float denominator = line.direction * planes[i].normal; - - if (sqr(denominator) <= RVO_EPSILON) { - /* Lines line is (almost) parallel to plane i. */ - if (numerator > 0.0f) { - return false; - } else { - continue; + bool linearProgram1(const std::vector<Plane> &planes, size_t planeNo, const Line &line, float radius, const Vector3 &optVelocity, bool directionOpt, Vector3 &result) + { + const float dotProduct = line.point * line.direction; + const float discriminant = sqr(dotProduct) + sqr(radius) - absSq(line.point); + + if (discriminant < 0.0f) { + /* Max speed sphere fully invalidates line. */ + return false; + } + + const float sqrtDiscriminant = std::sqrt(discriminant); + float tLeft = -dotProduct - sqrtDiscriminant; + float tRight = -dotProduct + sqrtDiscriminant; + + for (size_t i = 0; i < planeNo; ++i) { + const float numerator = (planes[i].point - line.point) * planes[i].normal; + const float denominator = line.direction * planes[i].normal; + + if (sqr(denominator) <= RVO3D_EPSILON) { + /* Lines line is (almost) parallel to plane i. */ + if (numerator > 0.0f) { + return false; + } + else { + continue; + } } - } - const float t = numerator / denominator; + const float t = numerator / denominator; - if (denominator >= 0.0f) { - /* Plane i bounds line on the left. */ - tLeft = std::max(tLeft, t); - } else { - /* Plane i bounds line on the right. */ - tRight = std::min(tRight, t); + if (denominator >= 0.0f) { + /* Plane i bounds line on the left. */ + tLeft = std::max(tLeft, t); + } + else { + /* Plane i bounds line on the right. */ + tRight = std::min(tRight, t); + } + + if (tLeft > tRight) { + return false; + } } - if (tLeft > tRight) { - return false; + if (directionOpt) { + /* Optimize direction. */ + if (optVelocity * line.direction > 0.0f) { + /* Take right extreme. */ + result = line.point + tRight * line.direction; + } + else { + /* Take left extreme. */ + result = line.point + tLeft * line.direction; + } } - } - - if (directionOpt) { - /* Optimize direction. */ - if (optVelocity * line.direction > 0.0f) { - /* Take right extreme. */ - result = line.point + tRight * line.direction; - } else { - /* Take left extreme. */ - result = line.point + tLeft * line.direction; + else { + /* Optimize closest point. */ + const float t = line.direction * (optVelocity - line.point); + + if (t < tLeft) { + result = line.point + tLeft * line.direction; + } + else if (t > tRight) { + result = line.point + tRight * line.direction; + } + else { + result = line.point + t * line.direction; + } } - } else { - /* Optimize closest point. */ - const float t = line.direction * (optVelocity - line.point); - - if (t < tLeft) { - result = line.point + tLeft * line.direction; - } else if (t > tRight) { - result = line.point + tRight * line.direction; - } else { - result = line.point + t * line.direction; - } - } - return true; -} + return true; + } -bool linearProgram2(const std::vector<Plane> &planes, size_t planeNo, float radius, const Vector3 &optVelocity, bool directionOpt, Vector3 &result) { - const float planeDist = planes[planeNo].point * planes[planeNo].normal; - const float planeDistSq = sqr(planeDist); - const float radiusSq = sqr(radius); + bool linearProgram2(const std::vector<Plane> &planes, size_t planeNo, float radius, const Vector3 &optVelocity, bool directionOpt, Vector3 &result) + { + const float planeDist = planes[planeNo].point * planes[planeNo].normal; + const float planeDistSq = sqr(planeDist); + const float radiusSq = sqr(radius); - if (planeDistSq > radiusSq) { - /* Max speed sphere fully invalidates plane planeNo. */ - return false; - } + if (planeDistSq > radiusSq) { + /* Max speed sphere fully invalidates plane planeNo. */ + return false; + } - const float planeRadiusSq = radiusSq - planeDistSq; + const float planeRadiusSq = radiusSq - planeDistSq; - const Vector3 planeCenter = planeDist * planes[planeNo].normal; + const Vector3 planeCenter = planeDist * planes[planeNo].normal; - if (directionOpt) { - /* Project direction optVelocity on plane planeNo. */ - const Vector3 planeOptVelocity = optVelocity - (optVelocity * planes[planeNo].normal) * planes[planeNo].normal; - const float planeOptVelocityLengthSq = absSq(planeOptVelocity); + if (directionOpt) { + /* Project direction optVelocity on plane planeNo. */ + const Vector3 planeOptVelocity = optVelocity - (optVelocity * planes[planeNo].normal) * planes[planeNo].normal; + const float planeOptVelocityLengthSq = absSq(planeOptVelocity); - if (planeOptVelocityLengthSq <= RVO_EPSILON) { - result = planeCenter; - } else { - result = planeCenter + std::sqrt(planeRadiusSq / planeOptVelocityLengthSq) * planeOptVelocity; + if (planeOptVelocityLengthSq <= RVO3D_EPSILON) { + result = planeCenter; + } + else { + result = planeCenter + std::sqrt(planeRadiusSq / planeOptVelocityLengthSq) * planeOptVelocity; + } } - } else { - /* Project point optVelocity on plane planeNo. */ - result = optVelocity + ((planes[planeNo].point - optVelocity) * planes[planeNo].normal) * planes[planeNo].normal; - - /* If outside planeCircle, project on planeCircle. */ - if (absSq(result) > radiusSq) { - const Vector3 planeResult = result - planeCenter; - const float planeResultLengthSq = absSq(planeResult); - result = planeCenter + std::sqrt(planeRadiusSq / planeResultLengthSq) * planeResult; + else { + /* Project point optVelocity on plane planeNo. */ + result = optVelocity + ((planes[planeNo].point - optVelocity) * planes[planeNo].normal) * planes[planeNo].normal; + + /* If outside planeCircle, project on planeCircle. */ + if (absSq(result) > radiusSq) { + const Vector3 planeResult = result - planeCenter; + const float planeResultLengthSq = absSq(planeResult); + result = planeCenter + std::sqrt(planeRadiusSq / planeResultLengthSq) * planeResult; + } } - } - - for (size_t i = 0; i < planeNo; ++i) { - if (planes[i].normal * (planes[i].point - result) > 0.0f) { - /* Result does not satisfy constraint i. Compute new optimal result. */ - /* Compute intersection line of plane i and plane planeNo. */ - Vector3 crossProduct = cross(planes[i].normal, planes[planeNo].normal); - - if (absSq(crossProduct) <= RVO_EPSILON) { - /* Planes planeNo and i are (almost) parallel, and plane i fully invalidates plane planeNo. */ - return false; - } - - Line line; - line.direction = normalize(crossProduct); - const Vector3 lineNormal = cross(line.direction, planes[planeNo].normal); - line.point = planes[planeNo].point + (((planes[i].point - planes[planeNo].point) * planes[i].normal) / (lineNormal * planes[i].normal)) * lineNormal; - - if (!linearProgram1(planes, i, line, radius, optVelocity, directionOpt, result)) { - return false; + + for (size_t i = 0; i < planeNo; ++i) { + if (planes[i].normal * (planes[i].point - result) > 0.0f) { + /* Result does not satisfy constraint i. Compute new optimal result. */ + /* Compute intersection line of plane i and plane planeNo. */ + Vector3 crossProduct = cross(planes[i].normal, planes[planeNo].normal); + + if (absSq(crossProduct) <= RVO3D_EPSILON) { + /* Planes planeNo and i are (almost) parallel, and plane i fully invalidates plane planeNo. */ + return false; + } + + Line line; + line.direction = normalize(crossProduct); + const Vector3 lineNormal = cross(line.direction, planes[planeNo].normal); + line.point = planes[planeNo].point + (((planes[i].point - planes[planeNo].point) * planes[i].normal) / (lineNormal * planes[i].normal)) * lineNormal; + + if (!linearProgram1(planes, i, line, radius, optVelocity, directionOpt, result)) { + return false; + } } } + + return true; } - return true; -} + size_t linearProgram3(const std::vector<Plane> &planes, float radius, const Vector3 &optVelocity, bool directionOpt, Vector3 &result) + { + if (directionOpt) { + /* Optimize direction. Note that the optimization velocity is of unit length in this case. */ + result = optVelocity * radius; + } + else if (absSq(optVelocity) > sqr(radius)) { + /* Optimize closest point and outside circle. */ + result = normalize(optVelocity) * radius; + } + else { + /* Optimize closest point and inside circle. */ + result = optVelocity; + } + + for (size_t i = 0; i < planes.size(); ++i) { + if (planes[i].normal * (planes[i].point - result) > 0.0f) { + /* Result does not satisfy constraint i. Compute new optimal result. */ + const Vector3 tempResult = result; -size_t linearProgram3(const std::vector<Plane> &planes, float radius, const Vector3 &optVelocity, bool directionOpt, Vector3 &result) { - if (directionOpt) { - /* Optimize direction. Note that the optimization velocity is of unit length in this case. */ - result = optVelocity * radius; - } else if (absSq(optVelocity) > sqr(radius)) { - /* Optimize closest point and outside circle. */ - result = normalize(optVelocity) * radius; - } else { - /* Optimize closest point and inside circle. */ - result = optVelocity; - } - - for (size_t i = 0; i < planes.size(); ++i) { - if (planes[i].normal * (planes[i].point - result) > 0.0f) { - /* Result does not satisfy constraint i. Compute new optimal result. */ - const Vector3 tempResult = result; - - if (!linearProgram2(planes, i, radius, optVelocity, directionOpt, result)) { - result = tempResult; - return i; + if (!linearProgram2(planes, i, radius, optVelocity, directionOpt, result)) { + result = tempResult; + return i; + } } } - } - return planes.size(); -} + return planes.size(); + } -void linearProgram4(const std::vector<Plane> &planes, size_t beginPlane, float radius, Vector3 &result) { - float distance = 0.0f; - - for (size_t i = beginPlane; i < planes.size(); ++i) { - if (planes[i].normal * (planes[i].point - result) > distance) { - /* Result does not satisfy constraint of plane i. */ - std::vector<Plane> projPlanes; - - for (size_t j = 0; j < i; ++j) { - Plane plane; - - const Vector3 crossProduct = cross(planes[j].normal, planes[i].normal); - - if (absSq(crossProduct) <= RVO_EPSILON) { - /* Plane i and plane j are (almost) parallel. */ - if (planes[i].normal * planes[j].normal > 0.0f) { - /* Plane i and plane j point in the same direction. */ - continue; - } else { - /* Plane i and plane j point in opposite direction. */ - plane.point = 0.5f * (planes[i].point + planes[j].point); - } - } else { - /* Plane.point is point on line of intersection between plane i and plane j. */ - const Vector3 lineNormal = cross(crossProduct, planes[i].normal); - plane.point = planes[i].point + (((planes[j].point - planes[i].point) * planes[j].normal) / (lineNormal * planes[j].normal)) * lineNormal; + void linearProgram4(const std::vector<Plane> &planes, size_t beginPlane, float radius, Vector3 &result) + { + float distance = 0.0f; + + for (size_t i = beginPlane; i < planes.size(); ++i) { + if (planes[i].normal * (planes[i].point - result) > distance) { + /* Result does not satisfy constraint of plane i. */ + std::vector<Plane> projPlanes; + + for (size_t j = 0; j < i; ++j) { + Plane plane; + + const Vector3 crossProduct = cross(planes[j].normal, planes[i].normal); + + if (absSq(crossProduct) <= RVO3D_EPSILON) { + /* Plane i and plane j are (almost) parallel. */ + if (planes[i].normal * planes[j].normal > 0.0f) { + /* Plane i and plane j point in the same direction. */ + continue; + } + else { + /* Plane i and plane j point in opposite direction. */ + plane.point = 0.5f * (planes[i].point + planes[j].point); + } + } + else { + /* Plane.point is point on line of intersection between plane i and plane j. */ + const Vector3 lineNormal = cross(crossProduct, planes[i].normal); + plane.point = planes[i].point + (((planes[j].point - planes[i].point) * planes[j].normal) / (lineNormal * planes[j].normal)) * lineNormal; + } + + plane.normal = normalize(planes[j].normal - planes[i].normal); + projPlanes.push_back(plane); } - plane.normal = normalize(planes[j].normal - planes[i].normal); - projPlanes.push_back(plane); - } + const Vector3 tempResult = result; - const Vector3 tempResult = result; + if (linearProgram3(projPlanes, radius, planes[i].normal, true, result) < projPlanes.size()) { + /* This should in principle not happen. The result is by definition already in the feasible region of this linear program. If it fails, it is due to small floating point error, and the current result is kept. */ + result = tempResult; + } - if (linearProgram3(projPlanes, radius, planes[i].normal, true, result) < projPlanes.size()) { - /* This should in principle not happen. The result is by definition already in the feasible region of this linear program. If it fails, it is due to small floating point error, and the current result is kept. */ - result = tempResult; + distance = planes[i].normal * (planes[i].point - result); } - - distance = planes[i].normal * (planes[i].point - result); - } + } } } -} // namespace RVO diff --git a/thirdparty/rvo2/Agent.h b/thirdparty/rvo2/Agent.h index 16f75a08f6..45fbead2f5 100644 --- a/thirdparty/rvo2/Agent.h +++ b/thirdparty/rvo2/Agent.h @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -27,17 +27,15 @@ * Chapel Hill, N.C. 27599-3175 * United States of America * - * <http://gamma.cs.unc.edu/RVO2/> + * <https://gamma.cs.unc.edu/RVO2/> */ /** * \file Agent.h * \brief Contains the Agent class. */ -#ifndef RVO_AGENT_H_ -#define RVO_AGENT_H_ - -#include "API.h" +#ifndef RVO3D_AGENT_H_ +#define RVO3D_AGENT_H_ #include <cstddef> #include <utility> @@ -53,69 +51,68 @@ // - Moved the `Plane` class here. // - Added a new parameter `ignore_y_` in the `Agent`. This parameter is used to control a godot feature that allows to avoid collisions by moving on the horizontal plane. namespace RVO { -/** - * \brief Defines a plane. - */ -class Plane { -public: - /** - * \brief A point on the plane. - */ - Vector3 point; - - /** - * \brief The normal to the plane. - */ - Vector3 normal; -}; + /** + * \brief Defines a plane. + */ + class Plane { + public: + /** + * \brief A point on the plane. + */ + Vector3 point; -/** - * \brief Defines an agent in the simulation. - */ -class Agent { + /** + * \brief The normal to the plane. + */ + Vector3 normal; + }; -public: - /** + /** + * \brief Defines an agent in the simulation. + */ + class Agent { + public: + /** * \brief Constructs an agent instance. * \param sim The simulator instance. */ - explicit Agent(); + explicit Agent(); - /** + /** * \brief Computes the neighbors of this agent. */ - void computeNeighbors(class KdTree *kdTree_); + void computeNeighbors(class KdTree *kdTree_); - /** + /** * \brief Computes the new velocity of this agent. */ - void computeNewVelocity(float timeStep); + void computeNewVelocity(float timeStep); - /** + /** * \brief Inserts an agent neighbor into the set of neighbors of this agent. * \param agent A pointer to the agent to be inserted. * \param rangeSq The squared range around this agent. */ - void insertAgentNeighbor(const Agent *agent, float &rangeSq); + void insertAgentNeighbor(const Agent *agent, float &rangeSq); - Vector3 newVelocity_; - Vector3 position_; - Vector3 prefVelocity_; - Vector3 velocity_; - size_t id_; - size_t maxNeighbors_; - float maxSpeed_; - float neighborDist_; - float radius_; - float timeHorizon_; - std::vector<std::pair<float, const Agent *> > agentNeighbors_; - std::vector<Plane> orcaPlanes_; - /// This is a godot feature that allows the Agent to avoid collision by mooving - /// on the horizontal plane. - bool ignore_y_; + Vector3 newVelocity_; + Vector3 position_; + Vector3 prefVelocity_; + Vector3 velocity_; + size_t id_; + size_t maxNeighbors_; + float maxSpeed_; + float neighborDist_; + float radius_; + float timeHorizon_; + std::vector<std::pair<float, const Agent *> > agentNeighbors_; + std::vector<Plane> orcaPlanes_; + /// This is a godot feature that allows the Agent to avoid collision by mooving + /// on the horizontal plane. + bool ignore_y_; - friend class KdTree; -}; -} // namespace RVO + friend class KdTree; + }; +} -#endif /* RVO_AGENT_H_ */ +#endif /* RVO3D_AGENT_H_ */ diff --git a/thirdparty/rvo2/Definitions.h b/thirdparty/rvo2/Definitions.h index a73aca9908..707d3c897f 100644 --- a/thirdparty/rvo2/Definitions.h +++ b/thirdparty/rvo2/Definitions.h @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -27,7 +27,7 @@ * Chapel Hill, N.C. 27599-3175 * United States of America * - * <http://gamma.cs.unc.edu/RVO2/> + * <https://gamma.cs.unc.edu/RVO2/> */ /** @@ -35,10 +35,8 @@ * \brief Contains functions and constants used in multiple classes. */ -#ifndef RVO_DEFINITIONS_H_ -#define RVO_DEFINITIONS_H_ - -#include "API.h" +#ifndef RVO3D_DEFINITIONS_H_ +#define RVO3D_DEFINITIONS_H_ namespace RVO { /** @@ -52,4 +50,4 @@ namespace RVO { } } -#endif /* RVO_DEFINITIONS_H_ */ +#endif /* RVO3D_DEFINITIONS_H_ */ diff --git a/thirdparty/rvo2/KdTree.cpp b/thirdparty/rvo2/KdTree.cpp index bc224614f0..c857f299df 100644 --- a/thirdparty/rvo2/KdTree.cpp +++ b/thirdparty/rvo2/KdTree.cpp @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -27,7 +27,7 @@ * Chapel Hill, N.C. 27599-3175 * United States of America * - * <http://gamma.cs.unc.edu/RVO2/> + * <https://gamma.cs.unc.edu/RVO2/> */ #include "KdTree.h" @@ -38,115 +38,123 @@ #include "Definitions.h" namespace RVO { -const size_t RVO_MAX_LEAF_SIZE = 10; + const size_t RVO3D_MAX_LEAF_SIZE = 10; -KdTree::KdTree() {} + KdTree::KdTree() { } -void KdTree::buildAgentTree(std::vector<Agent *> agents) { - agents_.swap(agents); + void KdTree::buildAgentTree(std::vector<Agent *> agents) + { + agents_.swap(agents); - if (!agents_.empty()) { - agentTree_.resize(2 * agents_.size() - 1); - buildAgentTreeRecursive(0, agents_.size(), 0); + if (!agents_.empty()) { + agentTree_.resize(2 * agents_.size() - 1); + buildAgentTreeRecursive(0, agents_.size(), 0); + } } -} -void KdTree::buildAgentTreeRecursive(size_t begin, size_t end, size_t node) { - agentTree_[node].begin = begin; - agentTree_[node].end = end; - agentTree_[node].minCoord = agents_[begin]->position_; - agentTree_[node].maxCoord = agents_[begin]->position_; - - for (size_t i = begin + 1; i < end; ++i) { - agentTree_[node].maxCoord[0] = std::max(agentTree_[node].maxCoord[0], agents_[i]->position_.x()); - agentTree_[node].minCoord[0] = std::min(agentTree_[node].minCoord[0], agents_[i]->position_.x()); - agentTree_[node].maxCoord[1] = std::max(agentTree_[node].maxCoord[1], agents_[i]->position_.y()); - agentTree_[node].minCoord[1] = std::min(agentTree_[node].minCoord[1], agents_[i]->position_.y()); - agentTree_[node].maxCoord[2] = std::max(agentTree_[node].maxCoord[2], agents_[i]->position_.z()); - agentTree_[node].minCoord[2] = std::min(agentTree_[node].minCoord[2], agents_[i]->position_.z()); - } - - if (end - begin > RVO_MAX_LEAF_SIZE) { - /* No leaf node. */ - size_t coord; - - if (agentTree_[node].maxCoord[0] - agentTree_[node].minCoord[0] > agentTree_[node].maxCoord[1] - agentTree_[node].minCoord[1] && agentTree_[node].maxCoord[0] - agentTree_[node].minCoord[0] > agentTree_[node].maxCoord[2] - agentTree_[node].minCoord[2]) { - coord = 0; - } else if (agentTree_[node].maxCoord[1] - agentTree_[node].minCoord[1] > agentTree_[node].maxCoord[2] - agentTree_[node].minCoord[2]) { - coord = 1; - } else { - coord = 2; - } - - const float splitValue = 0.5f * (agentTree_[node].maxCoord[coord] + agentTree_[node].minCoord[coord]); - - size_t left = begin; - - size_t right = end; - - while (left < right) { - while (left < right && agents_[left]->position_[coord] < splitValue) { - ++left; - } - - while (right > left && agents_[right - 1]->position_[coord] >= splitValue) { - --right; + void KdTree::buildAgentTreeRecursive(size_t begin, size_t end, size_t node) + { + agentTree_[node].begin = begin; + agentTree_[node].end = end; + agentTree_[node].minCoord = agents_[begin]->position_; + agentTree_[node].maxCoord = agents_[begin]->position_; + + for (size_t i = begin + 1; i < end; ++i) { + agentTree_[node].maxCoord[0] = std::max(agentTree_[node].maxCoord[0], agents_[i]->position_.x()); + agentTree_[node].minCoord[0] = std::min(agentTree_[node].minCoord[0], agents_[i]->position_.x()); + agentTree_[node].maxCoord[1] = std::max(agentTree_[node].maxCoord[1], agents_[i]->position_.y()); + agentTree_[node].minCoord[1] = std::min(agentTree_[node].minCoord[1], agents_[i]->position_.y()); + agentTree_[node].maxCoord[2] = std::max(agentTree_[node].maxCoord[2], agents_[i]->position_.z()); + agentTree_[node].minCoord[2] = std::min(agentTree_[node].minCoord[2], agents_[i]->position_.z()); + } + + if (end - begin > RVO3D_MAX_LEAF_SIZE) { + /* No leaf node. */ + size_t coord; + + if (agentTree_[node].maxCoord[0] - agentTree_[node].minCoord[0] > agentTree_[node].maxCoord[1] - agentTree_[node].minCoord[1] && agentTree_[node].maxCoord[0] - agentTree_[node].minCoord[0] > agentTree_[node].maxCoord[2] - agentTree_[node].minCoord[2]) { + coord = 0; + } + else if (agentTree_[node].maxCoord[1] - agentTree_[node].minCoord[1] > agentTree_[node].maxCoord[2] - agentTree_[node].minCoord[2]) { + coord = 1; + } + else { + coord = 2; } - if (left < right) { - std::swap(agents_[left], agents_[right - 1]); - ++left; - --right; + const float splitValue = 0.5f * (agentTree_[node].maxCoord[coord] + agentTree_[node].minCoord[coord]); + + size_t left = begin; + + size_t right = end; + + while (left < right) { + while (left < right && agents_[left]->position_[coord] < splitValue) { + ++left; + } + + while (right > left && agents_[right - 1]->position_[coord] >= splitValue) { + --right; + } + + if (left < right) { + std::swap(agents_[left], agents_[right - 1]); + ++left; + --right; + } } - } - size_t leftSize = left - begin; + size_t leftSize = left - begin; - if (leftSize == 0) { - ++leftSize; - ++left; - ++right; - } + if (leftSize == 0) { + ++leftSize; + ++left; + ++right; + } - agentTree_[node].left = node + 1; - agentTree_[node].right = node + 2 * leftSize; + agentTree_[node].left = node + 1; + agentTree_[node].right = node + 2 * leftSize; - buildAgentTreeRecursive(begin, left, agentTree_[node].left); - buildAgentTreeRecursive(left, end, agentTree_[node].right); + buildAgentTreeRecursive(begin, left, agentTree_[node].left); + buildAgentTreeRecursive(left, end, agentTree_[node].right); + } } -} -void KdTree::computeAgentNeighbors(Agent *agent, float rangeSq) const { - queryAgentTreeRecursive(agent, rangeSq, 0); -} + void KdTree::computeAgentNeighbors(Agent *agent, float rangeSq) const + { + queryAgentTreeRecursive(agent, rangeSq, 0); + } -void KdTree::queryAgentTreeRecursive(Agent *agent, float &rangeSq, size_t node) const { - if (agentTree_[node].end - agentTree_[node].begin <= RVO_MAX_LEAF_SIZE) { - for (size_t i = agentTree_[node].begin; i < agentTree_[node].end; ++i) { - agent->insertAgentNeighbor(agents_[i], rangeSq); + void KdTree::queryAgentTreeRecursive(Agent *agent, float &rangeSq, size_t node) const + { + if (agentTree_[node].end - agentTree_[node].begin <= RVO3D_MAX_LEAF_SIZE) { + for (size_t i = agentTree_[node].begin; i < agentTree_[node].end; ++i) { + agent->insertAgentNeighbor(agents_[i], rangeSq); + } } - } else { - const float distSqLeft = sqr(std::max(0.0f, agentTree_[agentTree_[node].left].minCoord[0] - agent->position_.x())) + sqr(std::max(0.0f, agent->position_.x() - agentTree_[agentTree_[node].left].maxCoord[0])) + sqr(std::max(0.0f, agentTree_[agentTree_[node].left].minCoord[1] - agent->position_.y())) + sqr(std::max(0.0f, agent->position_.y() - agentTree_[agentTree_[node].left].maxCoord[1])) + sqr(std::max(0.0f, agentTree_[agentTree_[node].left].minCoord[2] - agent->position_.z())) + sqr(std::max(0.0f, agent->position_.z() - agentTree_[agentTree_[node].left].maxCoord[2])); + else { + const float distSqLeft = sqr(std::max(0.0f, agentTree_[agentTree_[node].left].minCoord[0] - agent->position_.x())) + sqr(std::max(0.0f, agent->position_.x() - agentTree_[agentTree_[node].left].maxCoord[0])) + sqr(std::max(0.0f, agentTree_[agentTree_[node].left].minCoord[1] - agent->position_.y())) + sqr(std::max(0.0f, agent->position_.y() - agentTree_[agentTree_[node].left].maxCoord[1])) + sqr(std::max(0.0f, agentTree_[agentTree_[node].left].minCoord[2] - agent->position_.z())) + sqr(std::max(0.0f, agent->position_.z() - agentTree_[agentTree_[node].left].maxCoord[2])); - const float distSqRight = sqr(std::max(0.0f, agentTree_[agentTree_[node].right].minCoord[0] - agent->position_.x())) + sqr(std::max(0.0f, agent->position_.x() - agentTree_[agentTree_[node].right].maxCoord[0])) + sqr(std::max(0.0f, agentTree_[agentTree_[node].right].minCoord[1] - agent->position_.y())) + sqr(std::max(0.0f, agent->position_.y() - agentTree_[agentTree_[node].right].maxCoord[1])) + sqr(std::max(0.0f, agentTree_[agentTree_[node].right].minCoord[2] - agent->position_.z())) + sqr(std::max(0.0f, agent->position_.z() - agentTree_[agentTree_[node].right].maxCoord[2])); + const float distSqRight = sqr(std::max(0.0f, agentTree_[agentTree_[node].right].minCoord[0] - agent->position_.x())) + sqr(std::max(0.0f, agent->position_.x() - agentTree_[agentTree_[node].right].maxCoord[0])) + sqr(std::max(0.0f, agentTree_[agentTree_[node].right].minCoord[1] - agent->position_.y())) + sqr(std::max(0.0f, agent->position_.y() - agentTree_[agentTree_[node].right].maxCoord[1])) + sqr(std::max(0.0f, agentTree_[agentTree_[node].right].minCoord[2] - agent->position_.z())) + sqr(std::max(0.0f, agent->position_.z() - agentTree_[agentTree_[node].right].maxCoord[2])); - if (distSqLeft < distSqRight) { - if (distSqLeft < rangeSq) { - queryAgentTreeRecursive(agent, rangeSq, agentTree_[node].left); + if (distSqLeft < distSqRight) { + if (distSqLeft < rangeSq) { + queryAgentTreeRecursive(agent, rangeSq, agentTree_[node].left); + if (distSqRight < rangeSq) { + queryAgentTreeRecursive(agent, rangeSq, agentTree_[node].right); + } + } + } + else { if (distSqRight < rangeSq) { queryAgentTreeRecursive(agent, rangeSq, agentTree_[node].right); - } - } - } else { - if (distSqRight < rangeSq) { - queryAgentTreeRecursive(agent, rangeSq, agentTree_[node].right); - - if (distSqLeft < rangeSq) { - queryAgentTreeRecursive(agent, rangeSq, agentTree_[node].left); + + if (distSqLeft < rangeSq) { + queryAgentTreeRecursive(agent, rangeSq, agentTree_[node].left); + } } } } } } -} // namespace RVO diff --git a/thirdparty/rvo2/KdTree.h b/thirdparty/rvo2/KdTree.h index 1dbad00ea4..69d8920ce0 100644 --- a/thirdparty/rvo2/KdTree.h +++ b/thirdparty/rvo2/KdTree.h @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -27,16 +27,14 @@ * Chapel Hill, N.C. 27599-3175 * United States of America * - * <http://gamma.cs.unc.edu/RVO2/> + * <https://gamma.cs.unc.edu/RVO2/> */ /** * \file KdTree.h * \brief Contains the KdTree class. */ -#ifndef RVO_KD_TREE_H_ -#define RVO_KD_TREE_H_ - -#include "API.h" +#ifndef RVO3D_KD_TREE_H_ +#define RVO3D_KD_TREE_H_ #include <cstddef> #include <vector> @@ -47,78 +45,78 @@ // - Removed `sim_`. // - KdTree things are public namespace RVO { -class Agent; -class RVOSimulator; + class Agent; + class RVOSimulator; -/** + /** * \brief Defines <i>k</i>d-trees for agents in the simulation. */ -class KdTree { -public: - /** + class KdTree { + public: + /** * \brief Defines an agent <i>k</i>d-tree node. */ - class AgentTreeNode { - public: - /** + class AgentTreeNode { + public: + /** * \brief The beginning node number. */ - size_t begin; + size_t begin; - /** + /** * \brief The ending node number. */ - size_t end; + size_t end; - /** + /** * \brief The left node number. */ - size_t left; + size_t left; - /** + /** * \brief The right node number. */ - size_t right; + size_t right; - /** + /** * \brief The maximum coordinates. */ - Vector3 maxCoord; + Vector3 maxCoord; - /** + /** * \brief The minimum coordinates. */ - Vector3 minCoord; - }; + Vector3 minCoord; + }; - /** + /** * \brief Constructs a <i>k</i>d-tree instance. * \param sim The simulator instance. */ - explicit KdTree(); + explicit KdTree(); - /** + /** * \brief Builds an agent <i>k</i>d-tree. */ - void buildAgentTree(std::vector<Agent *> agents); + void buildAgentTree(std::vector<Agent *> agents); - void buildAgentTreeRecursive(size_t begin, size_t end, size_t node); + void buildAgentTreeRecursive(size_t begin, size_t end, size_t node); - /** + /** * \brief Computes the agent neighbors of the specified agent. * \param agent A pointer to the agent for which agent neighbors are to be computed. * \param rangeSq The squared range around the agent. */ - void computeAgentNeighbors(Agent *agent, float rangeSq) const; + void computeAgentNeighbors(Agent *agent, float rangeSq) const; - void queryAgentTreeRecursive(Agent *agent, float &rangeSq, size_t node) const; + void queryAgentTreeRecursive(Agent *agent, float &rangeSq, size_t node) const; - std::vector<Agent *> agents_; - std::vector<AgentTreeNode> agentTree_; + std::vector<Agent *> agents_; + std::vector<AgentTreeNode> agentTree_; - friend class Agent; - friend class RVOSimulator; -}; -} // namespace RVO + friend class Agent; + friend class RVOSimulator; + }; +} -#endif /* RVO_KD_TREE_H_ */ +#endif /* RVO3D_KD_TREE_H_ */ diff --git a/thirdparty/rvo2/README.md b/thirdparty/rvo2/README.md deleted file mode 100644 index 96af597cb6..0000000000 --- a/thirdparty/rvo2/README.md +++ /dev/null @@ -1,32 +0,0 @@ -Optimal Reciprocal Collision Avoidance in Three Dimensions -========================================================== - -<http://gamma.cs.unc.edu/RVO2/> - -[](https://travis-ci.org/snape/RVO2-3D) -[](https://ci.appveyor.com/project/snape/rvo2-3d) - -Copyright 2008 University of North Carolina at Chapel Hill - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -<http://www.apache.org/licenses/LICENSE-2.0> - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - -Please send all bug reports to [geom@cs.unc.edu](mailto:geom@cs.unc.edu). - -The authors may be contacted via: - -Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, and Dinesh Manocha -Dept. of Computer Science -201 S. Columbia St. -Frederick P. Brooks, Jr. Computer Science Bldg. -Chapel Hill, N.C. 27599-3175 -United States of America diff --git a/thirdparty/rvo2/Vector3.h b/thirdparty/rvo2/Vector3.h index 8c8835c865..f44e311f29 100644 --- a/thirdparty/rvo2/Vector3.h +++ b/thirdparty/rvo2/Vector3.h @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -27,32 +27,32 @@ * Chapel Hill, N.C. 27599-3175 * United States of America * - * <http://gamma.cs.unc.edu/RVO2/> + * <https://gamma.cs.unc.edu/RVO2/> */ /** * \file Vector3.h * \brief Contains the Vector3 class. */ -#ifndef RVO_VECTOR3_H_ -#define RVO_VECTOR3_H_ - -#include "API.h" +#ifndef RVO3D_VECTOR3_H_ +#define RVO3D_VECTOR3_H_ #include <cmath> #include <cstddef> #include <ostream> +#define RVO3D_EXPORT + namespace RVO { /** * \brief Defines a three-dimensional vector. */ - class Vector3 { + class RVO3D_EXPORT Vector3 { public: /** * \brief Constructs and initializes a three-dimensional vector instance to zero. */ - RVO_API inline Vector3() + inline Vector3() { val_[0] = 0.0f; val_[1] = 0.0f; @@ -63,7 +63,7 @@ namespace RVO { * \brief Constructs and initializes a three-dimensional vector from the specified three-element array. * \param val The three-element array containing the xyz-coordinates. */ - RVO_API inline explicit Vector3(const float val[3]) + inline explicit Vector3(const float val[3]) { val_[0] = val[0]; val_[1] = val[1]; @@ -76,7 +76,7 @@ namespace RVO { * \param y The y-coordinate of the three-dimensional vector. * \param z The z-coordinate of the three-dimensional vector. */ - RVO_API inline Vector3(float x, float y, float z) + inline Vector3(float x, float y, float z) { val_[0] = x; val_[1] = y; @@ -87,39 +87,39 @@ namespace RVO { * \brief Returns the x-coordinate of this three-dimensional vector. * \return The x-coordinate of the three-dimensional vector. */ - RVO_API inline float x() const { return val_[0]; } + inline float x() const { return val_[0]; } /** * \brief Returns the y-coordinate of this three-dimensional vector. * \return The y-coordinate of the three-dimensional vector. */ - RVO_API inline float y() const { return val_[1]; } + inline float y() const { return val_[1]; } /** * \brief Returns the z-coordinate of this three-dimensional vector. * \return The z-coordinate of the three-dimensional vector. */ - RVO_API inline float z() const { return val_[2]; } + inline float z() const { return val_[2]; } /** * \brief Returns the specified coordinate of this three-dimensional vector. * \param i The coordinate that should be returned (0 <= i < 3). * \return The specified coordinate of the three-dimensional vector. */ - RVO_API inline float operator[](size_t i) const { return val_[i]; } + inline float operator[](size_t i) const { return val_[i]; } /** * \brief Returns a reference to the specified coordinate of this three-dimensional vector. * \param i The coordinate to which a reference should be returned (0 <= i < 3). * \return A reference to the specified coordinate of the three-dimensional vector. */ - RVO_API inline float &operator[](size_t i) { return val_[i]; } + inline float &operator[](size_t i) { return val_[i]; } /** * \brief Computes the negation of this three-dimensional vector. * \return The negation of this three-dimensional vector. */ - RVO_API inline Vector3 operator-() const + inline Vector3 operator-() const { return Vector3(-val_[0], -val_[1], -val_[2]); } @@ -129,7 +129,7 @@ namespace RVO { * \param vector The three-dimensional vector with which the dot product should be computed. * \return The dot product of this three-dimensional vector with a specified three-dimensional vector. */ - RVO_API inline float operator*(const Vector3 &vector) const + inline float operator*(const Vector3 &vector) const { return val_[0] * vector[0] + val_[1] * vector[1] + val_[2] * vector[2]; } @@ -139,7 +139,7 @@ namespace RVO { * \param scalar The scalar value with which the scalar multiplication should be computed. * \return The scalar multiplication of this three-dimensional vector with a specified scalar value. */ - RVO_API inline Vector3 operator*(float scalar) const + inline Vector3 operator*(float scalar) const { return Vector3(val_[0] * scalar, val_[1] * scalar, val_[2] * scalar); } @@ -149,7 +149,7 @@ namespace RVO { * \param scalar The scalar value with which the scalar division should be computed. * \return The scalar division of this three-dimensional vector with a specified scalar value. */ - RVO_API inline Vector3 operator/(float scalar) const + inline Vector3 operator/(float scalar) const { const float invScalar = 1.0f / scalar; @@ -161,7 +161,7 @@ namespace RVO { * \param vector The three-dimensional vector with which the vector sum should be computed. * \return The vector sum of this three-dimensional vector with a specified three-dimensional vector. */ - RVO_API inline Vector3 operator+(const Vector3 &vector) const + inline Vector3 operator+(const Vector3 &vector) const { return Vector3(val_[0] + vector[0], val_[1] + vector[1], val_[2] + vector[2]); } @@ -171,7 +171,7 @@ namespace RVO { * \param vector The three-dimensional vector with which the vector difference should be computed. * \return The vector difference of this three-dimensional vector with a specified three-dimensional vector. */ - RVO_API inline Vector3 operator-(const Vector3 &vector) const + inline Vector3 operator-(const Vector3 &vector) const { return Vector3(val_[0] - vector[0], val_[1] - vector[1], val_[2] - vector[2]); } @@ -181,7 +181,7 @@ namespace RVO { * \param vector The three-dimensional vector with which to test for equality. * \return True if the three-dimensional vectors are equal. */ - RVO_API inline bool operator==(const Vector3 &vector) const + inline bool operator==(const Vector3 &vector) const { return val_[0] == vector[0] && val_[1] == vector[1] && val_[2] == vector[2]; } @@ -191,7 +191,7 @@ namespace RVO { * \param vector The three-dimensional vector with which to test for inequality. * \return True if the three-dimensional vectors are not equal. */ - RVO_API inline bool operator!=(const Vector3 &vector) const + inline bool operator!=(const Vector3 &vector) const { return val_[0] != vector[0] || val_[1] != vector[1] || val_[2] != vector[2]; } @@ -201,7 +201,7 @@ namespace RVO { * \param scalar The scalar value with which the scalar multiplication should be computed. * \return A reference to this three-dimensional vector. */ - RVO_API inline Vector3 &operator*=(float scalar) + inline Vector3 &operator*=(float scalar) { val_[0] *= scalar; val_[1] *= scalar; @@ -215,7 +215,7 @@ namespace RVO { * \param scalar The scalar value with which the scalar division should be computed. * \return A reference to this three-dimensional vector. */ - RVO_API inline Vector3 &operator/=(float scalar) + inline Vector3 &operator/=(float scalar) { const float invScalar = 1.0f / scalar; @@ -232,7 +232,7 @@ namespace RVO { * \param vector The three-dimensional vector with which the vector sum should be computed. * \return A reference to this three-dimensional vector. */ - RVO_API inline Vector3 &operator+=(const Vector3 &vector) + inline Vector3 &operator+=(const Vector3 &vector) { val_[0] += vector[0]; val_[1] += vector[1]; @@ -246,7 +246,7 @@ namespace RVO { * \param vector The three-dimensional vector with which the vector difference should be computed. * \return A reference to this three-dimensional vector. */ - RVO_API inline Vector3 &operator-=(const Vector3 &vector) + inline Vector3 &operator-=(const Vector3 &vector) { val_[0] -= vector[0]; val_[1] -= vector[1]; @@ -267,7 +267,7 @@ namespace RVO { * \param vector The three-dimensional vector with which the scalar multiplication should be computed. * \return The scalar multiplication of the three-dimensional vector with the scalar value. */ - inline Vector3 operator*(float scalar, const Vector3 &vector) + RVO3D_EXPORT inline Vector3 operator*(float scalar, const Vector3 &vector) { return Vector3(scalar * vector[0], scalar * vector[1], scalar * vector[2]); } @@ -279,7 +279,7 @@ namespace RVO { * \param vector2 The second vector with which the cross product should be computed. * \return The cross product of the two specified vectors. */ - inline Vector3 cross(const Vector3 &vector1, const Vector3 &vector2) + RVO3D_EXPORT inline Vector3 cross(const Vector3 &vector1, const Vector3 &vector2) { return Vector3(vector1[1] * vector2[2] - vector1[2] * vector2[1], vector1[2] * vector2[0] - vector1[0] * vector2[2], vector1[0] * vector2[1] - vector1[1] * vector2[0]); } @@ -291,7 +291,7 @@ namespace RVO { * \param vector The three-dimensional vector which to insert into the output stream. * \return A reference to the output stream. */ - inline std::ostream &operator<<(std::ostream &os, const Vector3 &vector) + RVO3D_EXPORT inline std::ostream &operator<<(std::ostream &os, const Vector3 &vector) { os << "(" << vector[0] << "," << vector[1] << "," << vector[2] << ")"; @@ -304,7 +304,7 @@ namespace RVO { * \param vector The three-dimensional vector whose length is to be computed. * \return The length of the three-dimensional vector. */ - inline float abs(const Vector3 &vector) + RVO3D_EXPORT inline float abs(const Vector3 &vector) { return std::sqrt(vector * vector); } @@ -315,7 +315,7 @@ namespace RVO { * \param vector The three-dimensional vector whose squared length is to be computed. * \return The squared length of the three-dimensional vector. */ - inline float absSq(const Vector3 &vector) + RVO3D_EXPORT inline float absSq(const Vector3 &vector) { return vector * vector; } @@ -326,7 +326,7 @@ namespace RVO { * \param vector The three-dimensional vector whose normalization is to be computed. * \return The normalization of the three-dimensional vector. */ - inline Vector3 normalize(const Vector3 &vector) + RVO3D_EXPORT inline Vector3 normalize(const Vector3 &vector) { return vector / abs(vector); } diff --git a/thirdparty/rvo2/patches/rvo2-godot-changes.patch b/thirdparty/rvo2/patches/rvo2-godot-changes.patch new file mode 100644 index 0000000000..16dbc203ed --- /dev/null +++ b/thirdparty/rvo2/patches/rvo2-godot-changes.patch @@ -0,0 +1,282 @@ +diff --git a/thirdparty/rvo2/Agent.cpp b/thirdparty/rvo2/Agent.cpp +index 5e49a3554c..b35eee9c12 100644 +--- a/thirdparty/rvo2/Agent.cpp ++++ b/thirdparty/rvo2/Agent.cpp +@@ -105,18 +105,17 @@ namespace RVO { + */ + void linearProgram4(const std::vector<Plane> &planes, size_t beginPlane, float radius, Vector3 &result); + +- Agent::Agent(RVOSimulator *sim) : sim_(sim), id_(0), maxNeighbors_(0), maxSpeed_(0.0f), neighborDist_(0.0f), radius_(0.0f), timeHorizon_(0.0f) { } ++ Agent::Agent() : id_(0), maxNeighbors_(0), maxSpeed_(0.0f), neighborDist_(0.0f), radius_(0.0f), timeHorizon_(0.0f), ignore_y_(false) { } + +- void Agent::computeNeighbors() ++ void Agent::computeNeighbors(KdTree *kdTree_) + { + agentNeighbors_.clear(); +- + if (maxNeighbors_ > 0) { +- sim_->kdTree_->computeAgentNeighbors(this, neighborDist_ * neighborDist_); ++ kdTree_->computeAgentNeighbors(this, neighborDist_ * neighborDist_); + } + } + +- void Agent::computeNewVelocity() ++ void Agent::computeNewVelocity(float timeStep) + { + orcaPlanes_.clear(); + const float invTimeHorizon = 1.0f / timeHorizon_; +@@ -124,10 +123,24 @@ namespace RVO { + /* Create agent ORCA planes. */ + for (size_t i = 0; i < agentNeighbors_.size(); ++i) { + const Agent *const other = agentNeighbors_[i].second; +- const Vector3 relativePosition = other->position_ - position_; +- const Vector3 relativeVelocity = velocity_ - other->velocity_; +- const float distSq = absSq(relativePosition); ++ ++ Vector3 relativePosition = other->position_ - position_; ++ Vector3 relativeVelocity = velocity_ - other->velocity_; + const float combinedRadius = radius_ + other->radius_; ++ ++ // This is a Godot feature that allow the agents to avoid the collision ++ // by moving only on the horizontal plane relative to the player velocity. ++ if (ignore_y_) { ++ // Skip if these are in two different heights ++#define ABS(m_v) (((m_v) < 0) ? (-(m_v)) : (m_v)) ++ if (ABS(relativePosition[1]) > combinedRadius * 2) { ++ continue; ++ } ++ relativePosition[1] = 0; ++ relativeVelocity[1] = 0; ++ } ++ ++ const float distSq = absSq(relativePosition); + const float combinedRadiusSq = sqr(combinedRadius); + + Plane plane; +@@ -165,7 +178,7 @@ namespace RVO { + } + else { + /* Collision. */ +- const float invTimeStep = 1.0f / sim_->timeStep_; ++ const float invTimeStep = 1.0f / timeStep; + const Vector3 w = relativeVelocity - invTimeStep * relativePosition; + const float wLength = abs(w); + const Vector3 unitW = w / wLength; +@@ -183,6 +196,11 @@ namespace RVO { + if (planeFail < orcaPlanes_.size()) { + linearProgram4(orcaPlanes_, planeFail, maxSpeed_, newVelocity_); + } ++ ++ if (ignore_y_) { ++ // Not 100% necessary, but better to have. ++ newVelocity_[1] = prefVelocity_[1]; ++ } + } + + void Agent::insertAgentNeighbor(const Agent *agent, float &rangeSq) +@@ -211,12 +229,6 @@ namespace RVO { + } + } + +- void Agent::update() +- { +- velocity_ = newVelocity_; +- position_ += velocity_ * sim_->timeStep_; +- } +- + bool linearProgram1(const std::vector<Plane> &planes, size_t planeNo, const Line &line, float radius, const Vector3 &optVelocity, bool directionOpt, Vector3 &result) + { + const float dotProduct = line.point * line.direction; +diff --git a/thirdparty/rvo2/Agent.h b/thirdparty/rvo2/Agent.h +index d3922ec645..45fbead2f5 100644 +--- a/thirdparty/rvo2/Agent.h ++++ b/thirdparty/rvo2/Agent.h +@@ -41,30 +41,52 @@ + #include <utility> + #include <vector> + +-#include "RVOSimulator.h" + #include "Vector3.h" + ++// Note: Slightly modified to work better in Godot. ++// - The agent can be created by anyone. ++// - The simulator pointer is removed. ++// - The update function is removed. ++// - The compute velocity function now need the timeStep. ++// - Moved the `Plane` class here. ++// - Added a new parameter `ignore_y_` in the `Agent`. This parameter is used to control a godot feature that allows to avoid collisions by moving on the horizontal plane. + namespace RVO { ++ /** ++ * \brief Defines a plane. ++ */ ++ class Plane { ++ public: ++ /** ++ * \brief A point on the plane. ++ */ ++ Vector3 point; ++ ++ /** ++ * \brief The normal to the plane. ++ */ ++ Vector3 normal; ++ }; ++ + /** + * \brief Defines an agent in the simulation. + */ + class Agent { +- private: ++ public: + /** + * \brief Constructs an agent instance. + * \param sim The simulator instance. + */ +- explicit Agent(RVOSimulator *sim); ++ explicit Agent(); + + /** + * \brief Computes the neighbors of this agent. + */ +- void computeNeighbors(); ++ void computeNeighbors(class KdTree *kdTree_); + + /** + * \brief Computes the new velocity of this agent. + */ +- void computeNewVelocity(); ++ void computeNewVelocity(float timeStep); + + /** + * \brief Inserts an agent neighbor into the set of neighbors of this agent. +@@ -73,16 +95,10 @@ namespace RVO { + */ + void insertAgentNeighbor(const Agent *agent, float &rangeSq); + +- /** +- * \brief Updates the three-dimensional position and three-dimensional velocity of this agent. +- */ +- void update(); +- + Vector3 newVelocity_; + Vector3 position_; + Vector3 prefVelocity_; + Vector3 velocity_; +- RVOSimulator *sim_; + size_t id_; + size_t maxNeighbors_; + float maxSpeed_; +@@ -91,9 +107,11 @@ namespace RVO { + float timeHorizon_; + std::vector<std::pair<float, const Agent *> > agentNeighbors_; + std::vector<Plane> orcaPlanes_; ++ /// This is a godot feature that allows the Agent to avoid collision by mooving ++ /// on the horizontal plane. ++ bool ignore_y_; + + friend class KdTree; +- friend class RVOSimulator; + }; + } + +diff --git a/thirdparty/rvo2/KdTree.cpp b/thirdparty/rvo2/KdTree.cpp +index 5e9e9777a6..c857f299df 100644 +--- a/thirdparty/rvo2/KdTree.cpp ++++ b/thirdparty/rvo2/KdTree.cpp +@@ -36,16 +36,15 @@ + + #include "Agent.h" + #include "Definitions.h" +-#include "RVOSimulator.h" + + namespace RVO { + const size_t RVO3D_MAX_LEAF_SIZE = 10; + +- KdTree::KdTree(RVOSimulator *sim) : sim_(sim) { } ++ KdTree::KdTree() { } + +- void KdTree::buildAgentTree() ++ void KdTree::buildAgentTree(std::vector<Agent *> agents) + { +- agents_ = sim_->agents_; ++ agents_.swap(agents); + + if (!agents_.empty()) { + agentTree_.resize(2 * agents_.size() - 1); +diff --git a/thirdparty/rvo2/KdTree.h b/thirdparty/rvo2/KdTree.h +index a09384c20f..69d8920ce0 100644 +--- a/thirdparty/rvo2/KdTree.h ++++ b/thirdparty/rvo2/KdTree.h +@@ -41,6 +41,9 @@ + + #include "Vector3.h" + ++// Note: Slightly modified to work better with Godot. ++// - Removed `sim_`. ++// - KdTree things are public + namespace RVO { + class Agent; + class RVOSimulator; +@@ -49,7 +52,7 @@ namespace RVO { + * \brief Defines <i>k</i>d-trees for agents in the simulation. + */ + class KdTree { +- private: ++ public: + /** + * \brief Defines an agent <i>k</i>d-tree node. + */ +@@ -90,12 +93,12 @@ namespace RVO { + * \brief Constructs a <i>k</i>d-tree instance. + * \param sim The simulator instance. + */ +- explicit KdTree(RVOSimulator *sim); ++ explicit KdTree(); + + /** + * \brief Builds an agent <i>k</i>d-tree. + */ +- void buildAgentTree(); ++ void buildAgentTree(std::vector<Agent *> agents); + + void buildAgentTreeRecursive(size_t begin, size_t end, size_t node); + +@@ -110,7 +113,6 @@ namespace RVO { + + std::vector<Agent *> agents_; + std::vector<AgentTreeNode> agentTree_; +- RVOSimulator *sim_; + + friend class Agent; + friend class RVOSimulator; +diff --git a/thirdparty/rvo2/Vector3.h b/thirdparty/rvo2/Vector3.h +index 6c3223bb87..f44e311f29 100644 +--- a/thirdparty/rvo2/Vector3.h ++++ b/thirdparty/rvo2/Vector3.h +@@ -41,7 +41,7 @@ + #include <cstddef> + #include <ostream> + +-#include "Export.h" ++#define RVO3D_EXPORT + + namespace RVO { + /** +@@ -59,17 +59,6 @@ namespace RVO { + val_[2] = 0.0f; + } + +- /** +- * \brief Constructs and initializes a three-dimensional vector from the specified three-dimensional vector. +- * \param vector The three-dimensional vector containing the xyz-coordinates. +- */ +- inline Vector3(const Vector3 &vector) +- { +- val_[0] = vector[0]; +- val_[1] = vector[1]; +- val_[2] = vector[2]; +- } +- + /** + * \brief Constructs and initializes a three-dimensional vector from the specified three-element array. + * \param val The three-element array containing the xyz-coordinates. diff --git a/thirdparty/xatlas/xatlas.cpp b/thirdparty/xatlas/xatlas.cpp index d92ef1a83a..5c5c57ecab 100644 --- a/thirdparty/xatlas/xatlas.cpp +++ b/thirdparty/xatlas/xatlas.cpp @@ -4753,13 +4753,10 @@ public: Vector2 *v = m_vertexBuffers[m_activeVertexBuffer]; v[m_numVertices] = v[0]; m_area = 0; - float centroidx = 0, centroidy = 0; for (uint32_t k = 0; k < m_numVertices; k++) { // http://local.wasp.uwa.edu.au/~pbourke/geometry/polyarea/ float f = v[k].x * v[k + 1].y - v[k + 1].x * v[k].y; m_area += f; - centroidx += f * (v[k].x + v[k + 1].x); - centroidy += f * (v[k].y + v[k + 1].y); } m_area = 0.5f * fabsf(m_area); } @@ -9089,7 +9086,6 @@ AddMeshError AddMesh(Atlas *atlas, const MeshDecl &meshDecl, uint32_t meshCountH const uint32_t kMaxWarnings = 50; uint32_t warningCount = 0; internal::Array<uint32_t> triIndices; - uint32_t firstFaceIndex = 0; internal::Triangulator triangulator; for (uint32_t face = 0; face < faceCount; face++) { // Decode face indices. @@ -9199,7 +9195,6 @@ AddMeshError AddMesh(Atlas *atlas, const MeshDecl &meshDecl, uint32_t meshCountH for (uint32_t i = 0; i < triIndices.size(); i++) meshPolygonMapping->triangleToPolygonIndicesMap.push_back(triIndices[i]); } - firstFaceIndex += faceVertexCount; } if (warningCount > kMaxWarnings) XA_PRINT(" %u additional warnings truncated\n", warningCount - kMaxWarnings); |